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

这段代码有什么问题 运行不了

这段代码有什么问题 运行不了

甫里 2016-04-13 20:00:10
    window.onload = function(){         var tr =document.getElementsByTagName("tr");         for (var i = 0; i < tr.length; i++) {                 tr[i].addEventListener("mouseover",function(){tr[i].style.color="red"},false);                 tr[i].addEventListener("mouseout",function(){tr[i].style.color=""},false); }
查看完整描述

5 回答

?
qq_冲哥_0

TA贡献40条经验 获得超30个赞

function(){tr[i].style.color="red"}   改成 this.style.color ='red';

你这么写涉及到JS的闭包问题。 function(){tr[i].style.color="red"} 是一个闭包,如果它与包含它的函数引用同一个变量 i,

那么变量i 只能取得最后一个值 .你运行下面的函数可以看一下。

tr[i].addEventListener("mouseover",function(){
        alert(i); // i 永远等于 tr.length,就是 for 循环运行后, i取得最后一个值。
},false);


查看完整回答
3 反对 回复 2016-04-13
  • 甫里
    甫里
    嗯 是的。function(){tr[i].style.color="red"} 如果还是要涉及闭包的话 这个函数中的tr[i]应该如何赋值呢
  • qq_冲哥_0
    qq_冲哥_0
    你这个其实很简单, 用this 代替体tr[i] 就可以了。 tr[i].addEventListener("mouseover",function(){ this.style.color="red" },false); 如果必须要 使用i变量, 那么如果让里面的i 和外面的i 一一对应, 可以给tr 增加一个自定义属性 index, tr[i].index =i; tr[i].addEventListener("mouseover",function(){ tr[this.index].style.color="red" },false);
?
qq_青枣工作室_0

TA贡献446条经验 获得超754个赞

把 tr[i].style.color 改为 this.style.color

查看完整回答
1 反对 回复 2016-04-14
?
不知名的前端程序猴

TA贡献32条经验 获得超22个赞

最后少一个   }    啊,大兄弟

查看完整回答
反对 回复 2016-04-14
?
GoldX

TA贡献1条经验 获得超0个赞

后面少了个括号

查看完整回答
反对 回复 2016-04-13
?
qq___524

TA贡献171条经验 获得超74个赞

能不能把全部的代码贴过来?

查看完整回答
反对 回复 2016-04-13
  • 甫里
    甫里
    已经是完整的代码了~ var tr =document.getElementsByTagName("tr");这段的意思提取tr元素。整段代码的意思给每行添加鼠标事件。
  • qq___524
    qq___524
    那个for语句中,你少了后面 的那个花括号
  • 5 回答
  • 0 关注
  • 1773 浏览
慕课专栏
更多

添加回答

举报

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