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]的,可能是书写错误。