关于用 lis 和用 as 的区别?

来源:5-1 编程挑战

Sharron

2016-05-27 16:36

// 滑过滑过、离开、点击每个选项时
      // 执行脚本
      for(var i=0;i<lis.length;i++){
          lis[i].onmouseover=function(){
              this.style.background='#CCC';
          }
          lis[i].onmouseout=function(){
              this.style.background='#FFF';
          }
          lis[i].onclick=function(event){
              menu.style.display='none';
              title.innerHTML=this.innerHTML;
          }
      }

用 lis 如上执行出来的是蓝色连接样式如图

http://img.mukewang.com/574805900001eab802390055.jpg

问题1:其中lis[i].onclick=function(event){
              menu.style.display='none';
              title.innerHTML=this.innerHTML;
          }部分的 this 换成lis[i] 就不行了,为什么?

问题2:改用参考答案as[i]来执行如下:

// 滑过滑过、离开、点击每个选项时
      // 执行脚本
      for(var i=0;i<as.length;i++){
          as[i].onmouseover=function(){
              this.style.background='#CCC';
          }
          as[i].onmouseout=function(){
              this.style.background='#FFF';
          }
          as[i].onclick=function(event){
              menu.style.display='none';
              title.innerHTML=this.innerHTML;
          }
      }

执行效果:

http://img.mukewang.com/574806a400014bd302160060.jpg

相比用 lis 的效果,为什么会有这样的差异呢?

写回答 关注

2回答

  • 舒硕
    2016-05-31 14:23:53

    楼上说的对lis包含a标签

    当你用as[i].onclick=function(){}时 as[i]还不是个对象(java里叫类),就没有属性,你可以看下浏览器的开发者工具控制台

    显示的应该是undifend,如果有java或面向对象的基础就比较好理解了。

  • 卡奇
    2016-05-31 11:37:36

    只能告诉你样式的不同,lis[i].innerHTML中包含a标签,所以会出现上面那种情况,至于this为什么不能用对象直接替代,我找了好多资料也没有理解,只是说不能用这种方式创建function,不懂

DOM事件探秘

DOM事件?本课程会通过实例来给小伙伴们讲解如何使用这些事件

99545 学习 · 1197 问题

查看课程

相似问题