黑白灰菌
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]吗?
你打印出i的值就知道为什么了。这和它运行的顺序有关,它是先做了循环绑定,当你触发事件后才会再去执行
遇到了一个类似的问题, 现在搞清楚了
问题在于 i 的生命周期
当前在循环中, i 被定义并使用
在事件触发时 i 已经被回收, 浏览器就找不到lis[i], 所以报错
用 this 的话就不会
不知道将清楚没
因为this指代的是当前项
DOM事件探秘
99545 学习 · 1197 问题
相似问题