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

这样写为什么不对呢?麻烦各位了。

      window.onload = function(){

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

        

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


            tr_change[i].setAttribute("onmouseover","function(){this.style.backgroundColor='#f2f2f2';}");

            tr_change[i].setAttribute("onmouseout","function(){this.style.backgroundColor=' #fff';}");

        }

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

        

     

 

}

这样子写就不行,为什么呢? 另外就是为什么不能把这里的this替换成tr_change[i]呢?这个this怎么用的,麻烦各位了,谢谢。

提问者:慕田峪5928195 2016-09-29 11:17

个回答

  • 黑山头山大王
    2016-10-04 12:51:37

    this指的是当前对象,调用的函数对哪个对象起作用,里面的this就指代这个对象。在你的代码环境里相当于tr_change[i],用this指代当前对象,可以简化代码。

  • Lowell_hao
    2016-09-29 16:23:09

    1、首先关于函数设置的问题,setAttribute("onmouseover","function(){this.style.backgroundColor='#f2f2f2';}");这样的写法相当于在移入行的时候定义了一个函数(而且定义错误,正确的函数定义function xxx(){}),函数不调用不执行,所以是错的

    2、关于this的问题,如果使用tr_change[i],当你调用的时候循环已经结束,假设你没有在其他位置对i做操作,i的值是tr_change.length,tr_change[i]的值是undefined,找不到当前对象,所以使用this指向当前对象