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

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

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 回答

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

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

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

问题在于 i 的生命周期

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

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

用 this 的话就不会 

不知道将清楚没 

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

待我强大_我给自己天下

非常清楚, 三克油
2016-12-26 回复 有任何疑惑可以回复我~

因为this指代的是当前项

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

举报

0/150
提交
取消

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

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