这两段代码不一样吗?为什么第一段不能运行第二段却可以?

来源:9-22 编程练习

qq_星辰_89

2018-06-30 11:42

第一段:

 window.onload = function(){

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

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

         for(var i=1;i<z.length;i++){

          z[i].onmouseover = function(){  z[i].style.backgroundColor = "red"; }

          z[i].onmouseout = function(){  z[i].style.backgroundColor="#fff";  }

         }

      }


第二段:

window.onload = function(){

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

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

        for(var i=1;i<z.length;i++){ ab(z[i]); }

function ab(n){

            n.onmouseover=function(){n.style.backgroundColor="red";}

            n.onmouseout=function(){ n.style.backgroundColor="#fff"; }

       }

}


写回答 关注

2回答

  • 慕圣7096405
    2018-07-04 17:04:10
    已采纳

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

             for(var i=1;i<z.length;i++){

              z[i].onmouseover = function(){  this.style.backgroundColor = "red"; }

              z[i].onmouseout = function(){  this.style.backgroundColor="#fff";  }

             }

    将第一段代码改为上面这样就可以了。主要是TR对象z[i]作用域的问题,你的TR对象z[i]的作用域仅限于FOR循环体内,在回调函数function中TR对象z[i]将会丢失,因此无法对它绑定鼠标移上事件和鼠标移开事件,导致未出现变色效果。不知道这样解释你能否懂,如果还有疑惑,建议去翻译作用域的相关资料。

    qq_星辰_...

    非常感谢!

    2018-07-05 07:17:54

    共 1 条回复 >

  • 慕粉0913873
    2018-07-03 10:56:01

    因为第一个事件是在循环里边   而第二个是在循环外     所第二个事件没有为每一行都添加上

JavaScript进阶篇

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

468194 学习 · 21891 问题

查看课程

相似问题