为了账号安全,请及时绑定邮箱和手机立即绑定

5-1编程引发的一些问题

<!doctype html>

<html>

<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;}

</style>

<script type="text/javascript">

window.onload=function(){

    var box=document.getElementById('divselect'),

   title=box.getElementsByTagName('cite')[0],

   menu=box.getElementsByTagName('ul')[0],

   as=box.getElementsByTagName('a'),

        index=-1;

   

    // 点击三角时

    title.onclick=function(event){

      event = event||window.event;

 menu.style.display = 'block';

 if(event.stopPropagation){

event.stopPropagation(); 

 }else{

    event.cancelBubble = true;   

 }

 document.onkeyup = function(event){

event = event||window.event;

if(event.keyCode==40){

index++;

if(index>=as.length) index=0;

for(var i=0; i<as.length;i++){

 as[i].style.background = '#fff';

}

as[index].style.background = '#ccc';

if(event.keyCode==38){

index--;

if(index<0) index=as.length-1;

for(var i=0; i<as.length;i++){

 as[i].style.background = '#fff';

}

as[index].style.background = '#ccc';

}

if(event.keyCode==13){

for(var i=0; i<as.length;i++){

 as[i].style.background = '#fff';

}

title.innerHTML = as[index].innerHTML;

menu.style.display = 'none';

}  

 }

    }  

    

   // 滑过滑过、离开、点击每个选项时

      for(var i=0; i<as.length; i++){

   as[i].num = i

as[i].onmouseover = function(){

this.style.background = '#ccc'

index = as[i].num-1;  

}

as[i].onmouseout = function(){

this.style.background = '#fff'  

}

as[i].onclick = function(event){

event = event||window.event;

if(event.stopPropagation){

  event.stopPropagation(); 

}else{

  event.cancelBubble = true;   

}

menu.style.display = 'none';

title.innerHTML = this.innerHTML;  

}  

 }


   // 点击页面空白处时

      document.onclick = function(){

menu.style.display = 'none'; 

 }

 }

</script>

</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>

</body>

</html>

http://img1.sycdn.imooc.com//5735d7710001718504210372.jpg


5-1的编程挑战基本能实现,还有一个问题就是,当你用鼠标滑过某个选项时,按下enter键,<cite>里不会有变化,不知为何,求大神给改改。

还有就是图片中的代码,这是常用的遍历,但是我不明白为什么这么写程序,for循环不是只能实行一次,为什么鼠标可以在各个选项中不限制的滑动

正在回答

1 回答

非大神不请自答。

  1. 由于你的代码里面对于按enter的键盘操作是建立在as这个数组里。对这个数组进行操作只能由鼠标点击或者键盘上下进行操作。如果你想划定按enter也可以操作,那你可以加入鼠标滑过事件,按着上面对数组操作的方式进行操作。

  2. 这个遍历的确只能执行一次,不过功能是给元素加上事件。然后元素对事件进行响应。

我也是才学,谈的是自己的理解,如果有错误希望大家指正,欢迎一起探讨。

0 回复 有任何疑惑可以回复我~
#1

Dream0703 提问者

谢谢谢,遍历的事情明白了。加个好友吧
2016-05-14 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

5-1编程引发的一些问题

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信