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');
          }
    }
}

萤火虫显示:

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

1 回答 1

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 元素。

于 2013-05-03T17:30:57.137 回答