js键盘选择下拉框

原理:键盘上的按键都有各自的键码,通过这个键码可以来判断按下的是哪个键,下面函数可以获取键盘的键码

document.addEventListener("keyup",function(e){
                console.log(e.keyCode)
})
核心代码:键盘上的向上,向下,enter键触发的内容
 
  
          //键盘按下事件
                document.addEventListener("keyup",function(e){
                    var e=e||window.e;
                    reset()
                    //向上键
                    if(e.keyCode=="38"){
                        index--;
                        if(index<0){
                            index=list.length-1
                        }
                    }
                    //向下键
                    if(e.keyCode=="40"){
                        index++;
                        if(index>list.length-1){
                            index=0
                        }
                    }
                    //enter确认键
                    if(e.keyCode=="13"){
                        cite.innerHTML=list[index].innerHTML;    
                        ul.style.display="none";    
                        return ;
                    }
                    list[index].className="bg";
                    
                })
 
 
 
全部代码:
<!doctype html>
<html lang="en">

    <head>
        <meta charset="UTF-8">
        <title>下拉菜单</title>
        <style type="text/css">
            body,
            ul,
            li {
                margin: 0;
                padding: 0;
                font-size: 13px;
            }
            
            ul,
            li {
                list-style: none;
            }
            
            #divselect {
                width: 186px;
                margin: 80px auto;
                position: relative;
                z-index: 10000;
            }
            
            #divselect cite {
                width: 150px;
                height: 24px;
                line-height: 24px;
                display: block;
                color: #807a62;
                cursor: pointer;
                font-style: normal;
                padding-left: 4px;
                padding-right: 30px;
                border: 1px solid #333333;
                background: url(xjt.png) no-repeat right center;
            }
            
            #divselect ul {
                width: 184px;
                border: 1px solid #333333;
                background-color: #ffffff;
                position: absolute;
                z-index: 20000;
                margin-top: -1px;
                display: none;
            }
            
            #divselect ul li {
                height: 24px;
                line-height: 24px;
            }
            
            #divselect ul li a {
                display: block;
                height: 24px;
                color: #333333;
                text-decoration: none;
                padding-left: 10px;
                padding-right: 10px;
            }
            
            .bg {
                background: #eee;
            }
        </style>

    </head>

    <body>
        <div id="divselect">
            <cite>请选择分类</cite>
            <ul>
                <li id="li">
                    <a href="javascript:;" selectid="1">ASP开发</a>
                </li>
                <li>
                    <a href="javascript:;" selectid="2">.NET开发</a>
                </li>
                <li>
                    <a href="javascript:;" selectid="3">PHP开发</a>
                </li>
                <li>
                    <a href="javascript:;" selectid="4">Javascript开发</a>
                </li>
                <li>
                    <a href="javascript:;" selectid="5">Java特效</a>
                </li>
            </ul>
        </div>
        <script type="text/javascript">
            var cite=document.querySelector("cite"),//选择的内容
                ul=document.querySelector("ul"),//列表
                list=document.querySelectorAll("a"),//选择项
                index=-1;//索引
                //点击列表显示
                cite.addEventListener("click",function(e){
                    var e=e||window.e;
                    e.stopPropagation();//阻止冒泡防止触发document上绑定的隐藏事件
                    ul.style.display="block";
                })
                //给每个列表项绑定点击,滑过事件
                for(var i=0;i<list.length;i++){
                    list[i].onclick=function(){
                        cite.innerHTML=this.innerHTML;    
                        ul.style.display="none";
                    }
                    list[i].onmouseover=function(){
                        this.className="bg";
                    }
                    list[i].onmouseout=function(){
                        this.className="";
                    }
                }
                //键盘按下事件
                document.addEventListener("keyup",function(e){
                    var e=e||window.e;
                    reset()
                    //向上键
                    if(e.keyCode=="38"){
                        index--;
                        if(index<0){
                            index=list.length-1
                        }
                    }
                    //向下键
                    if(e.keyCode=="40"){
                        index++;
                        if(index>list.length-1){
                            index=0
                        }
                    }
                    //enter确认键
                    if(e.keyCode=="13"){
                        cite.innerHTML=list[index].innerHTML;    
                        ul.style.display="none";    
                        return ;
                    }
                    list[index].className="bg";
                    
                })
                //未选择时点击document隐藏
                document.addEventListener("click",function(){
                    ul.style.display="none";
                })
                //样式重置
                function reset(){
                    for(var i=0;i<list.length;i++){
                        list[i].className="";
                    }
                }
        </script>
    </body>

</html>

 

 

转载于:https://www.cnblogs.com/zimengxiyu/p/11157492.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值