javascript - JavaScript 中的错误代码?

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

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/

相关文章:

javascript - div 内容中的 Jquery 正则表达式

javascript - 使用 vanilla JS 添加 CSS 规则的最短方法

javascript - 议程.JS : How to schedule an event starting at X time and repeat there after every month?

javascript - MVC中如何设置元素的属性

python - Python 中的 __setattr__ 函数

javascript - $.getJSON 不起作用

java - Java : Why can't I declare the reference-variable in one statement and create the referenced object in another statement of the class?

c++ - 自定义类的实例在结构内部不起作用,但在外部起作用

arrays - 无法快速加载类数组中的数组数据

javascript - 为什么 setAttribute 在 jQuery 的 attr 不起作用时起作用