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

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

      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怎么用的,麻烦各位了,谢谢。

正在回答

代码语言

2 回答

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

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

慕田峪5928195 提问者

但是如果用tr_change[i],不会有结果的,我看了别人的讲诉,应该这样才正确:完成事件绑定后,如果使用tr_change[i]那么当点击时它是找不到这个对象的,而this可以完美指代。
2016-10-05 回复 有任何疑惑可以回复我~
#2

慕田峪5928195 提问者

谢谢回复,thx
2016-10-05 回复 有任何疑惑可以回复我~

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指向当前对象

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

慕田峪5928195 提问者

先表示感谢,但是还有一个问题,为什么这样就可以呢? tr_change[i].onmouseover=function(){this.style.backgroundColor='#f2f2f2';}; tr_change[i].onmouseout=function(){this.style.backgroundColor=' #fff';}
2016-09-30 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

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

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