javascript中的错误代码?

use*_*768 1 javascript class setattribute

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');
          }
    }
}
Run Code Online (Sandbox Code Playgroud)

萤火虫表明:

TypeError: link[i] is undefined
 link[i].setAttribute('class', 'selected');
Run Code Online (Sandbox Code Playgroud)

小智 6

改变这个:

links[i].setAttribute('class', 'selected');
Run Code Online (Sandbox Code Playgroud)

对此:

this.setAttribute('class', 'selected');
Run Code Online (Sandbox Code Playgroud)

或者更好,对此:

this.className = "selected";
Run Code Online (Sandbox Code Playgroud)

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');
    }
}
Run Code Online (Sandbox Code Playgroud)

或者只是将其作为属性添加到DOM元素.