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

js 使用for 循环绑定onmouseover 事件出错

js 使用for 循环绑定onmouseover 事件出错

冯春龙 2016-01-16 15:13:29
         var tr = document.getElementsByTagName('tr');             tr[0].onmouseover = function(){               tr[0].style.backgroundColor = '#ccc';              }             tr[1].onmouseover = function(){               tr[1].style.backgroundColor = '#ccc';              }             tr[2].onmouseover = function(){               tr[2].style.backgroundColor = '#ccc';              }上面的语句可以正常执行,但是使用for循环的时候报错。循环方式如下:         var tr = document.getElementsByTagName('tr');             for(var i=0;i<tr.length;i++){               tr[i].onmouseover = function(){                 tr[i].style.backgroundColor = '#ccc';                }                         }求指点
查看完整描述

4 回答

已采纳
?
vone

TA贡献23条经验 获得超2个赞

因为onmouseover事件是在鼠标放上之后触发的,而此时for循环早已结束,所以无论谁触发的事件,i值永远固定不变.

查看完整回答
反对 回复 2016-01-19
?
qq_安伊偌拉_0

TA贡献27条经验 获得超2个赞

这段代码是先执行循环,然后给每个tr添加一个onmouseover事件,但是事件里面的内容还读取不到。等循环完之后,这时i==4,然后你把鼠标挪进去,执行 tr[i].style.backgroundColor = '#ccc'; tr[4]为空,所以报错。

查看完整回答
1 反对 回复 2016-01-18
?
冯春龙

TA贡献2条经验 获得超0个赞

stackoverflow 上有人回答,贴出来。

         var tr = document.getElementsByTagName('tr');
            for(var i=0;i<tr.length;i++){
              tr[i].onmouseover = function(){
                //tr[i].style.backgroundColor = '#ccc';  更改为下一句
                this.style.backgroundColor = '#ccc';
              }            
            }

为什么使用this 还不是很清楚,在学习中。

查看完整回答
反对 回复 2016-01-16
?
qq_安伊偌拉_0

TA贡献27条经验 获得超2个赞

少写了一个条件。如果里面有4个tr,循环完成之后,i==4。

查看完整回答
反对 回复 2016-01-18
  • 4 回答
  • 0 关注
  • 2663 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信