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

来源:4-3 [DOM事件] QQ面板状态切换效果

weibo_一万群什麼_0

2016-07-01 12:17

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

写回答 关注

3回答

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

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

    weibo_...

    非常感谢!

    2016-07-18 12:54:50

    共 1 条回复 >

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

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

    weibo_...

    可以说得再具体一点吗谢谢,有点理解不了.

    2016-07-01 18:02:44

    共 1 条回复 >

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

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

    福尔摩斯易 回复z阿汀

    肯定是没法的啊。有闭包的影响

    2017-03-14 22:26:41

    共 2 条回复 >

DOM事件探秘

DOM事件?本课程会通过实例来给小伙伴们讲解如何使用这些事件

99545 学习 · 1197 问题

查看课程

相似问题