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

改变行颜色,这样写为什么不行?

window.onload = function(){     

     // 鼠标移动改变背景,可以通过给每行绑定鼠标移上事件和鼠标移除事件来改变所在行背景色。

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

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

            tr[i].onmouseover=function(){

            tr[i].style.backgroundColor="#f2f2f2";

            }

            tr[i].onmouseout=function(){

            tr[i].style.backgroundColor="#f2f2f2";

            }

        }

}


正在回答

3 回答

alltr[i].onmouseover=function(){ this.style.backgroundColor = "#f2f2f2";}
与alltr[i].onmouseover=function(){ alltr[i].style.backgroundColor = "#f2f2f2";}:
后者无法改变颜色的原因在于,鼠标事件为触发事件,也就是说,是给每行添加一个触发事件,但是触发后执行的内容,是触发对象this颜色改变。
先循环,添加事件后,此时i=3, 再发生触发,运行触发函数中内容,alltr[i]中的i为3,而不是触发对象。

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

HSobin 提问者

非常感谢
2017-02-27 回复 有任何疑惑可以回复我~

因为按照你写的 添加这个事件以后他会按照最后的结果也就是tr[i]去执行,这个i不会变成固定值,而是依然动态的,而FOR结束以后I肯定是3,所以所有的方法里都会变成tr[3],但是3里根本没有元素,所以控制台报错,也没有效果。

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

qq_这是只仓鼠_0

最有力的证据是改为循环改为 for(var i=0;i<tr.length-1;i++) 然后看谁变色 一目了然
2017-02-25 回复 有任何疑惑可以回复我~
#2

HSobin 提问者

非常感谢
2017-02-27 回复 有任何疑惑可以回复我~

先不说你代码对不对,你这两个颜色设置的一样,怎么看效果呢?

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

举报

0/150
提交
取消

改变行颜色,这样写为什么不行?

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