2013-05-03 1 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'); 
      } 
    } 
} 

Firebug показывает:Код ошибки в javascript?

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

Вам нужно закрыть. – adeneo

ответ

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

+0

Добро пожаловать. – 2013-05-03 17:35:33