请看下这段代码的问题

问题可能很低端。。

   // 鼠标移动改变背景,可以通过给每行绑定鼠标移上事件和鼠标移除事件来改变所在行背景色。
         
    var trs = document.getElementsByTagName("tr");
    for(var i = 0;i < trs.length;i++){
        function changeColor(trs[i]){
            trs[i].onmouseover = function(){
                trs[i].style.backgroundColor = 'grey';
            }
            trs[i].onmouseout = function(){
                trs[i].style.backgroundColor = 'white';
            }
        }
    }

图片描述

阅读 3.4k
7 个回答

其实只是你写错了代码而已:

var trs = document.getElementsByTagName("tr");
for(var i = 0;i < trs.length;i++){
    (function changeColor(tr){
        tr.onmouseover = function(){
            tr.style.backgroundColor = 'grey';
        }
        tr.onmouseout = function(){
            tr.style.backgroundColor = 'white';
        }
    })(trs[i]);
}

正解如楼上,谁让你在循环内定义函数的……

function changeColor(trs[i]){}放到for外面,参数trs[i]换一下,for里面用changeColor(trs[i]);或许可以吧。
刚试了一下,for里可以定义函数,你的问题是"function changeColor(trs[i]){}",定义函数参数时你用了一个“trs[i]”,这样是不行的。

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

for(var i = 0;i < trs.length;i++){       
        trs[i].onmouseover = function(){
            this.style.backgroundColor = 'grey';
        }
        trs[i].onmouseout = function(){
            this.style.backgroundColor = 'white';
        }       
}

你没有让里面的函数执行,(function (data) {})(data);这样让函数自执行。要么就在外边写上你想定义的函数,然后在里面引用也可以。

建议你这种事情,完全可以用css实现,用js实现太大材小用了

tr{//默认样式
background:white;
}
tr:hover{//鼠标经过样式
background:grey;
}

for(var i = 0;i < trs.length;i++){ ===》 for(var i = 0,len=trs.length;i < len;i++){

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题