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

9-22编程练习:为什么不通过函数给onmouseover赋值就不能正常改变颜色?

方法一:  

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="#fff";
            }
        }
   }
   方法二:

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

   function bgcChange(obj)
     {
        obj.onmouseover=function(){
            obj.style.backgroundColor="#f2f2f2";
        }
        obj.onmouseout=function(){
            obj.style.backgroundColor="#fff";
        }
   }


方法一不能正常执行,鼠标指向后颜色不变;方法二可以正常改变背景颜色,这是什么原因?纠结在这问题上2小时了。。。。。


正在回答

2 回答

    window.onload = function(){
        var tr = document.getElementsByTagName("tr");
        for(var i=0; i<tr.length; i++){
            tr[i].onmouseover=function(){
                alert(i); //你在这里弹出一下 i 看看是不是你觉得应该出现的值;
                //tr[i].style.backgroundColor="#f2f2f2";
                //你可以这么写试试
                this.style.backgroundColor="#f2f2f2";
            };
//            //也可以这么试一下
//            (function(i){
//                tr[i].onmouseover=function(){
//                    tr[i].style.backgroundColor="#f2f2f2";
//                }
//            }(i));
            
            //这个方法的改法同上
            tr[i].onmouseout=function(){
                tr[i].style.backgroundColor="#fff";
            }
        }
    }

你可以试着按照注释的来写写看,原因你可以去查一下闭包作用域相关的资料了解一下

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

qq_不能說的秘密_0 提问者

看了闭包的介绍立刻了解了这里的i相对function是全局的。当执行function时i已经都是length-1了。 我对你非常感谢。
2016-01-02 回复 有任何疑惑可以回复我~
#2

慕斯卡4106679

tr[i].onmouseover=function() 这个是什么用法?在前面教程没教过
2016-01-04 回复 有任何疑惑可以回复我~
#3

qq_不能說的秘密_0 提问者 回复 慕斯卡4106679

匿名函数,js里相当部分的函数都直接赋值的
2016-01-05 回复 有任何疑惑可以回复我~

晕乎乎

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

举报

0/150
提交
取消

9-22编程练习:为什么不通过函数给onmouseover赋值就不能正常改变颜色?

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