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 显示:
TypeError: link[i] is undefined
link[i].setAttribute('class', 'selected');
最佳答案
改变这个:
links[i].setAttribute('class', 'selected');
为此:
this.setAttribute('class', 'selected');
或者更好的是:
this.className = "selected";
JavaScript 中没有 block 作用域,因此您的 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 元素。
关于javascript - JavaScript 中的错误代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16364572/