2013-05-03 91 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