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

关于移动鼠标的几种写法求人指点下

是这样的 我开始写关于这个鼠标移动的代码然后写了几种形式发现都不能实现 一开始以为是写错了或者语法有误  请大家看看

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

tr[a].style.backgroundColor="#f2f2f2"

}

 function sq(a){

tr[a].style.backgroundColor="#fff"

}


    
       a[i].onmouseover=sb(i)
       a[i].onmouseout=sq(i)
       
       }

这种在for里面定义函数的方法感觉有问题 但是我感觉定义在for外面也不对


我后面自己在网上研究了之后得到的结果是

window.onload = function(){

                  

     // 鼠标移动改变背景,可以通过给每行绑定鼠标移上事件和鼠标移除事件来改变所在行背景色。

         var tr=document.getElementsByTagName("tr")

function sb(a){

    return function (){

          tr[a].style.backgroundColor="#f2f2f2"   

    }   

}

            function sq(b){

    return function (){

          tr[b].style.backgroundColor="#fff"   

    }   

}

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

         tr[i].onmouseover=sb(i);

         tr[i].onmouseout=sq(i);

     }

 

}

     

请高手指点下  谢谢!

正在回答

1 回答

你循环了N次,sb(a)也声明了多次……但这不是重点,重点是你以为sb(a)的a会分别根据i来赋值,每个sb都有自己的i值,但其实他们引用的都是最后一个i,因为每个sb的作用域链都保存着匿名函数的活动对象。

下面是用了闭包的方法,这样每个sb(a)就会有不同的i,sb有创建了一个闭包,这个闭包保存了i值的副本,所以可以返回不同的数值。

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

mosaice 提问者

非常感谢!
2015-05-31 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
JavaScript进阶篇
  • 参与学习       468061    人
  • 解答问题       21891    个

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

进入课程

关于移动鼠标的几种写法求人指点下

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