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

为什么{ this.style.backgroundColor="#f2f2f2";}不用this,用 trs[i]没有用

为什么{ this.style.backgroundColor="#f2f2f2";}不用this,用 trs[i]没有用

huzi55 2016-07-27 16:22:11
function highlight(){    var tbody=document.getElementById("table").lastChild; var trs=tbody.getElementsByTagName("tr"); for(i=1;i<trs.length;i++){   trs[i].onmouseover=function(){     this.style.backgroundColor="#f2f2f2"; } trs[i].onmouseout=function(){      this.style.backgroundColor="#ffffff"; } }       }
查看完整描述

1 回答

?
nickylau82

TA贡献128条经验 获得超67个赞

因为js也是面向对象的,当你结束的时候i已经固定等于5了。所以你用trs[i]就相当于是trs[5]了

另外你的代码有三个问题:在循环的时候声明i的时候需要加上var,还有i的初始值应该为0,另外就是每个赋值表达式后面最好加上分号。

function highlight(){
			var tbody=document.getElementById("table").lastChild;
			var trs=tbody.getElementsByTagName("tr");
			for(var i=0;i<trs.length;i++){
				(function(index){
					trs[index].onmouseover=function(){
						trs[index].style.backgroundColor="#f2f2f2";
					};
					trs[index].onmouseout=function(){
						trs[index].style.backgroundColor="#ffffff";
					};
				})(i);
			}
		}
highlight();



查看完整回答
反对 回复 2016-07-27
  • huzi55
    huzi55
    找到问题了,但是不是你说的问题耶,而且,用for循环需要用var声明i?
  • nickylau82
    nickylau82
    不用var声明就是隐式声明了一个全局变量,你在highlight()后面再写一句alert(i);就会知道了。 btw,不是我说的问题是什么问题?
  • huzi55
    huzi55
    因为trs[i]在这个匿名函数里function(){ this.style.backgroundColor="#f2f2f2"; }没有定义,作用域的原因。在这个函数里面alert(trs[i]),显示的是未定义
点击展开后面7
  • 1 回答
  • 0 关注
  • 1134 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信