为了账号安全,请及时绑定邮箱和手机立即绑定

为什么trs[i].onmouseover=function(){ trs[i].style.backgroundColor="#f2f2f2";}没有用呢

http://img1.sycdn.imooc.com//57b6f2650001e48007410305.jpg

把tr[i]用this替换后就可以了呢

正在回答

7 回答

因为i早不是当初的i了,i随for变化变成了trs.length

4 回复 有任何疑惑可以回复我~
#1

水里有条鱼 回复 大块吃肉188 提问者

看起来是这样但实际不是,触发事件时执行 trs[i].style.backgroundColor="#f2f2f2";,意思是把trs数组里i位置的背景改了,但是这时候i已经是trs.length所以错了,就是绑定对了执行错了 可以理解为 window.onload=function(){ for(){//绑定事件} function(){//执行事件} }
2016-08-20 回复 有任何疑惑可以回复我~
#2

大块吃肉188 提问者 回复 水里有条鱼

执行事件错了我明白了,但是我不明白为什么i会变成trs.length。在for循环中i<trs.length。我在trs[i].style.backgroundColor="#f2f2f2";后面加了alert(i),在不添加行的情况下,i确实变成了3(此时trs.length为3)
2016-08-20 回复 有任何疑惑可以回复我~
#3

大块吃肉188 提问者 回复 水里有条鱼

因为for循环已经执行完了,当i=trs.length(在没有添加行的情况下trs.length=3)时跳出循环。所以i=3,我这么理解对么,一开始进了思维误区
2016-08-20 回复 有任何疑惑可以回复我~
#4

水里有条鱼 回复 大块吃肉188 提问者

这很容易理解啊,你看到window.onload=function(){ for(){//绑定事件} function(){//执行事件} }这句吗 看起来执行函数在for循环里执行,但不是这样的,他只是绑定事件,事件触发才会执行,事件触发时页面已经加载完了,事件全部绑定,for循环肯定已经完成,所以i为trs.length 就像我指着一个喝可乐的人叫你,我打电话给你后就去找他,等了很久我打电话了,你还是要找喝着可乐的人吗?他已经不喝可乐了啊,直接找那个人就对了(this)
2016-08-20 回复 有任何疑惑可以回复我~
#5

大块吃肉188 提问者

非常感谢!
2016-08-20 回复 有任何疑惑可以回复我~
查看3条回复

把颜色改了!因为f2f2f2接近于白色

0 回复 有任何疑惑可以回复我~

我也摔跟头了,除了用this,谁能给出其他的方案

0 回复 有任何疑惑可以回复我~

学java的人肯定会在这个问题上摔个跟头的,java里之所以可以可以直接那么写是因为我们一般会声明函数外的变量为final的,然后函数里才能直接用。

0 回复 有任何疑惑可以回复我~

把trs[i].style......改为this.style......

0 回复 有任何疑惑可以回复我~

把trs[i].style......改为this.style......

0 回复 有任何疑惑可以回复我~

因为i是变化的,而且你的for循环写错了

0 回复 有任何疑惑可以回复我~
#1

大块吃肉188 提问者

能说说具体哪里有问题麽
2016-08-20 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

为什么trs[i].onmouseover=function(){ trs[i].style.backgroundColor="#f2f2f2";}没有用呢

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信