美文网首页
输入框下拉提示效果

输入框下拉提示效果

作者: TsingXu | 来源:发表于2016-08-14 16:45 被阅读0次

    制作时间: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键也可以选中。

    输入框下拉提示效果结束

    不积跬步无以至千里

    相关文章

      网友评论

          本文标题:输入框下拉提示效果

          本文链接:https://www.haomeiwen.com/subject/axbysttx.html