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

来源:9-22 编程练习

林鸿伯3985306

2016-10-29 22:25

    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回答

  • stone310
    2016-10-30 20:36:00
    已采纳

    如果直接这么写:

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

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

    但也不能这么写:

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

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

    林鸿伯398...

    非常感谢!

    2016-10-30 20:55:55

    共 4 条回复 >

  • 慕粉547471488
    2016-10-30 08:45:52

    方便把全部代码贴出来吗


    林鸿伯398...

    这就是全部代码了,你贴上去就会发现全是红的,鼠标移过去红色消失,我觉得是前半句(trlist[i].onmouse=)直接被忽略了,只执行了函数bgcChange(trlist[i]);

    2016-10-30 10:04:50

    共 1 条回复 >

  • 慕粉547471488
    2016-10-29 22:53:57

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

    function bgcChange(a){

            a.style.backgroundColor="red";

        }

    这个函数和

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

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

    林鸿伯398...

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

    2016-10-29 22:59:41

    共 1 条回复 >

  • 慕粉547471488
    2016-10-29 22:34:07

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

    林鸿伯398...

    那为什么trlist[i].onmouseover=function(){this.style.backgroundColor="red"}这种写法就可以了?

    2016-10-29 22:48:56

    共 1 条回复 >

JavaScript进阶篇

本课程从如何插入JS代码开始,带您进入网页动态交互世界

468194 学习 · 21891 问题

查看课程

相似问题