问答详情
源自:9-22 编程练习

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小时了。。。。。


提问者:qq_不能說的秘密_0 2016-01-02 01:32

个回答

  • 李晓健
    2016-01-02 11:11:28
    已采纳

        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";
                }
            }
        }

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

  • 吃瓜小夏
    2016-01-22 14:57:06

    晕乎乎