for (var i = 0; i < Lis.length; i++) { Lis[i].onmouseover = function(){ this.style.background = '#567'; } Lis[i].onmouseout = function(){ this.style.background = '#fff'; } Lis[i].onclick = function(e){ var id = this.id; e= e || window.event; if(e.stopPropagation){ e.stopPropagation(); }else{ e.cancelBubble=true; } stateList.style.display = 'none'; stateTxt.innerHTML=getByClass('stateSelect_text',id)[0].innerHTML; loginStateShow.className = "login-state-show "+id; } }
上面那段
Lis[i].onmouseover = function(){
this.style.background = '#567';
}
我想改成Li[i].style.background = '#567'为什么就不能实现经过选项更换颜色?而非要使用this呢?this不是指向Lis[i]吗?
list[i]指向的是所有经过遍历的li,并不是你鼠标经过的这一个,你要找到当前的这一个,就必须传值,而this是已经封装好的,指向当前你鼠标指向的这一个。
在这个函数里面的i其实引用的是最后一次i的值,因为for循环时,你并没有执行点击函数,当执行这个函数的时候,for循环已经完毕,它发现它自己没有这个变量i,于是向它的上级作用域查找这个变量i,也就是储存在作用域链里面的最后一个i值
是可以使用Lis[i]的,可能是书写错误。