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

为什么这么写提交上去表格直接就是红色?

    window.onload = function(){

        trlist=document.getElementsByTagName("tr");

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

         trlist[i].onmouseover=bgcChange(trlist[i]);

         trlist[i].onmouseout=function(){this.style.backgroundColor="#fff"}

        }

}

    function bgcChange(a){

        a.style.backgroundColor="red";

    }



正在回答

4 回答

如果直接这么写:

trlist[i].onmouseover=bgcChange(trlist[i]);

这里bgcChange是一个自执行函数,而并不是事件函数,因此一加载页面就会执行;

但也不能这么写:

trlist[i].onmouseover=function(){
    bgcChange(trlist[i]);   //改成:bgcChange(this); 
}

这么也i值为定数(i为trlist.length),因此要写成你的mouseout事件的格式,用this.

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

stone310

这里this表示当前触发事件的对象,例如鼠标移到第一个 ,this就是trlist[0],移到第二个,this就是trlist[1]...
2016-10-30 回复 有任何疑惑可以回复我~
#2

林鸿伯3985306 提问者

恩 ,下面这个我也写过。。 这个循环是不是在页面加载完以后就已经停在i=3了? 我再看看书。。
2016-10-30 回复 有任何疑惑可以回复我~
#3

stone310 回复 林鸿伯3985306 提问者

循环加载完后,i为trlist.length
2016-10-30 回复 有任何疑惑可以回复我~
#4

林鸿伯3985306 提问者

非常感谢!
2016-10-30 回复 有任何疑惑可以回复我~
查看1条回复

方便把全部代码贴出来吗


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

林鸿伯3985306 提问者

这就是全部代码了,你贴上去就会发现全是红的,鼠标移过去红色消失,我觉得是前半句(trlist[i].onmouse=)直接被忽略了,只执行了函数bgcChange(trlist[i]);
2016-10-30 回复 有任何疑惑可以回复我~

this就是代表trlist[i],然后this.style.backgroundColor=“red”就是直接给他们每一个都设置了颜色!

function bgcChange(a){

        a.style.backgroundColor="red";

    }

这个函数和

 trlist[i].onmouseout=function(){this.style.backgroundColor="#fff"}只要一个就好了

你用了两种方法设置了颜色

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

林鸿伯3985306 提问者

没有重复,一个设置的onmouseover ,另一个设置的onmouseout, 这样写只是为了看看哪个出问题了。 我现在的问题就是用trlist[i].onmouseout=function(){this.style.backgroundColor="#fff"}设置属性 是可以等到事件发生再响应的 ,如果用 function bgcChange(a)设置,它直接在页面加载的时候直接把颜色全填上去了,没法响应。
2016-10-29 回复 有任何疑惑可以回复我~

因为window.onload意思就是页面一加载就运行!bgcChange(trlist[i]);调用了函数  function bgcChange(a)所以为红色

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

林鸿伯3985306 提问者

那为什么trlist[i].onmouseover=function(){this.style.backgroundColor="red"}这种写法就可以了?
2016-10-29 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

为什么这么写提交上去表格直接就是红色?

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