问答详情
源自:4-3 [DOM事件] QQ面板状态切换效果

列表下划过的代码中,为什么只能用this不能用Lis[i]?

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]吗?        

提问者:weibo_一万群什麼_0 2016-07-01 12:17

个回答

  • 万卷古今消永日
    2016-07-18 12:14:57
    已采纳

    list[i]指向的是所有经过遍历的li,并不是你鼠标经过的这一个,你要找到当前的这一个,就必须传值,而this是已经封装好的,指向当前你鼠标指向的这一个。

  • shuihorizon
    2016-07-01 17:49:15

    在这个函数里面的i其实引用的是最后一次i的值,因为for循环时,你并没有执行点击函数,当执行这个函数的时候,for循环已经完毕,它发现它自己没有这个变量i,于是向它的上级作用域查找这个变量i,也就是储存在作用域链里面的最后一个i值

  • 安之以祖古
    2016-07-01 16:49:38

    是可以使用Lis[i]的,可能是书写错误。