在循环中为每个元素分配 EventListener,而不是在循环中使用一个共同的变量来赋值 EventListener。这样可以避免覆盖以前的元素的 EventListener。
例如,原始代码可能如下所示:
var buttons = document.getElementsByTagName("button");
var i;
for (i = 0; i < buttons.length; i++) {
buttons[i].addEventListener("click", function() {
console.log("Button " + i + " clicked.");
});
}
修复代码应该像这样:
var buttons = document.getElementsByTagName("button");
var i;
for (i = 0; i < buttons.length; i++) {
(function (i) {
buttons[i].addEventListener("click", function() {
console.log("Button " + i + " clicked.");
});
})(i);
}
通过使用闭包,可以为每个元素分配独特的 i 值,然后为每个按钮添加一个独特的 EventListener。