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

为什么只有第三行是颜色发生变化的呢?

     window.onload = function(){

                  var tr=document.getElementsByTagName("tr");

                  for(i=0;i<tr.length;i++){

                  tr[i].onmouseenter=function(){tr[i].style.background="#f2f2f2";}

                    tr[i].onmouseleave=function(){tr[i].style.background="#fff";}

                  }

      }


正在回答

2 回答

楼上完全正确,可以用以下方案解决:

方案一:用let声明变量i,即for(i=0;i<tr.length;i++)改为for(let i=0;i<tr.length;i++) 

方案二:用自执行匿名函数把闭包包装起来,

只需将for循环体里面的内容改为:

(function(num){
    tr[num].onmouseenter=function(){tr[num].style.background="#f2f2f2";}
    tr[num].onmouseleave=function(){tr[num].style.background="#fff";}
    })(i)



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

慕侠4705823 提问者

非常感谢!
2018-03-09 回复 有任何疑惑可以回复我~
#2

匹诺曹诺匹

你好,请问一下为什么题主代码完全正确,但是出不来效果呢?
2018-03-13 回复 有任何疑惑可以回复我~

因为你给每个tr都绑定了tr[i]的样式发生变化,它们的i是同一个变量。当你把鼠标以上tr时,这时候数组循环是肯定已经完成了的。这时候的i其实就是tr.length.

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

举报

0/150
提交
取消

为什么只有第三行是颜色发生变化的呢?

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