为什么将this改成lis[i]就运行不出呢,this指代的不就是lis[i]吗?

来源:4-3 [DOM事件] QQ面板状态切换效果

黑白灰菌

2016-12-15 12:11

for(var i=0,l=lis.length;i<l;i++){

      lis[i].onmouseover=function(){

      this.style.background='#567';

      }

      lis[i].onmouseout=function(){

      this.style.background='#FFF';

      }

      lis[i].onclick=function(e){

      e = e || window.event;

      if(e.stopPropagation){

          e.stopPropagation();

      }else{

          e.cancelBubble=true;

      }

      var id=this.id;

      stateList.style.display='none';

        stateTxt.innerHTML=getByClass('stateSelect_text',id)[0].innerHTML;

        loginStateShow.className='';

        loginStateShow.className='login-state-show '+id;

      }

   }

将上面加粗的this都改成lis[i]为什么不能运行,this指代的不就是lis[i]吗?

写回答 关注

3回答

  • 爱3
    2017-08-31 19:38:25

    你打印出i的值就知道为什么了。这和它运行的顺序有关,它是先做了循环绑定,当你触发事件后才会再去执行

  • 每天都要起床的Bu同学3248023
    2016-12-15 17:32:22

    遇到了一个类似的问题, 现在搞清楚了

    问题在于 i 的生命周期

    当前在循环中, i 被定义并使用 

    在事件触发时 i 已经被回收, 浏览器就找不到lis[i], 所以报错

    用 this 的话就不会 

    不知道将清楚没 

    待我强大_我...

    非常清楚, 三克油

    2016-12-26 12:40:27

    共 1 条回复 >

  • qq_流觞琼嬛_0
    2016-12-15 16:26:19

    因为this指代的是当前项

DOM事件探秘

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

99545 学习 · 1197 问题

查看课程

相似问题