输入框下拉提示效果

制作时间:13:30 - 15:45

平常在网站登录/注册时,填写邮箱或用户名时,都会有下拉的提示,直接点击你想要的就可以了。

效果图

html代码:

<body>
<div id="login">
    <div class="detail">
        <input type="text" id="input1" maxlength="128" placeholder="邮箱/会员帐号/手机号" autocomplete="off" name="loginname">
    </div>
    <div class="detail">
        <input type="password" maxlength="24" placeholder="请输入密码">
    </div>
    <ul id="suggest">
        <li class="note">请选择邮箱类型</li>
        <li email="" class="item"></li>
        <li email="@sina.com" class="item">@sina.com</li>
        <li email="@163.com" class="item">@163.com</li>
        <li email="@qq.com" class="item">@qq.com</li>
        <li email="@126.com" class="item">@126.com</li>
        <li email="@vip.sina.com" class="item">@vip.sina.com</li>
        <li email="@sina.cn" class="item">@sina.cn</li>
        <li email="@hotmail.com" class="item">@hotmail.com</li>
        <li email="@gmail.com" class="item">@gmail.com</li>
        <li email="@sohu.com" class="item">@sohu.com</li>
        <li email="@yahoo.cn" class="item">@yahoo.cn</li>
        <li email="@139.com" class="item">@139.com</li>
        <li email="@wo.com.cn" class="item">@wo.com.cn</li>
        <li email="@189.cn" class="item">@189.cn</li>
    </ul>
</div>
</body>
Ul元素

实现步骤:

同样是用面向对象的思想编写代码。

1. 建立框架

window.onload = function(){

    var s1 = new Suggest();

}
function Suggest(){

    this.oInput = document.getElementById("input1");
    this.oUl = document.getElementById("suggest");
    this.aLi = this.oUl.getElementsByTagName("li");

}
Suggest.prototype = {
      ....
}

2. 点击 input 框让 ul 元素显示出来,

创建四个方法:
init
toChange
showUl
toBlur


showUl: function(){

        this.oUl.style.display = "block";
},
toBlur: function(){

        var This = this;
        this.oInput.onblur = function(){
              This.oUl.style.display = "none";
        }

},

4. 当有输入时,下拉提示也同步显示数据

通过循环将 ul 中的每个 li元素的值改成手动输入的加上@后面下拉菜单上的值。

var value = this.oInput.value;
for(var i=1; i<this.aLi.length; i++){

            var oEmail = this.aLi[i].getAttribute("email");
            if(!oEmail){
                    this.aLi[i].innerHTML = value;
            }else{
                    this.aLi[i].innerHTML = value+oEmail;
            }
}

5. 当输入@后的匹配情况处理

6. 添加交互效果。

默认选中第一个。
给 li 元素添加onmouseover样式。

sel: function(inow){

        var This = this;
        this.item();

        if(this.oInput.value == ''){
            this.aLi[inow].className = "item";
        }
        else{
            this.aLi[inow].className = "active";
        }
        for(var i=1; i<this.aLi.length; i++){

            this.aLi[i].onmouseover = function(){

                This.item();
                this.className = "active";
            }

}

其中的item方法.因为需要多次使用,所以单独编写一个方法。

item: function(){
        for(var i=1; i<this.aLi.length; i++){
            this.aLi[i].className = "item";
        }
}

7. 添加按键效果。

(1)给每个li添加onmousedown事件,实现点击选中效果。

this.aLi[i].onmousedown = function(){
        This.oInput.value = this.innerHTML;
}

(2)上下键控制移动。
(3)Enter键也可以选中。

输入框下拉提示效果结束

不积跬步无以至千里

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 172,891评论 25 708
  • 第5章 菜单、按钮及导航 一、下拉菜单 小伙伴们注意,在Bootstrap框架中的下拉菜单组件是一个独立的组件,根...
    凛0_0阅读 5,043评论 0 66
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,192评论 4 61
  • 拖延一般是因为难或者烦,迟到和遗忘看似是意外,不过里面也通常隐藏着愤怒,二者倒有一点相似——都是在试图逃避。 今早...
    阿银老师阅读 184评论 0 0
  • 昨天晚上在朋友家蹭睡,晚上十点过的时候她拿了一本《重口味心理学》给我,她说:我觉得这本书还挺适合你的。我接过书翻开...
    败家的小姑娘阅读 493评论 0 0