2013-05-03 60 views
1
window.onload = function() { 
    var links = document.getElementById('subMenu').getElementsByTagName('a'); 
    for(var i = 0; i < links.length; i++) { 
      links[i].onclick = function() { 
       links[i].setAttribute('class', 'selected'); 
      } 
    } 
} 

萤火显示:JavaScript中的错误代码?

TypeError: link[i] is undefined 
link[i].setAttribute('class', 'selected'); 
+0

您需要关闭。 – adeneo 2013-05-03 17:31:15

回答

6

更改此:

links[i].setAttribute('class', 'selected'); 

这样:

this.setAttribute('class', 'selected'); 

或更好,这个:

this.className = "selected"; 

JavaScript中没有块范围,所以你的i被迭代后的最后一个值卡住。

但是由于您需要的仅仅是对处理程序的元素引用,它已经可以通过处理程序中的this进行访问。


如果你真的确实需要i,则需要范围i在每个迭代一个新的变量范围。

var links = document.getElementById('subMenu').getElementsByTagName('a'); 

for(var i = 0; i < links.length; i++) { 
    links[i].onclick = makeHandler(i); 
} 

function makeHandler(i) { 
    return function() { 
     links[i].setAttribute('class', 'selected'); 
    } 
} 

或者只是将其添加为属性的DOM元素。

+0

谢谢你的工作 – user2347768 2013-05-03 17:34:26

+0

不客气。 – 2013-05-03 17:35:33