我收集有关点击的eventListeners的信息时遇到了麻烦。
我有这个构建数组的循环:
myButtonList = document.getElementsByTagName('a');
myAnchorList = [];
for (i=0; i < myButtonList.length;i++) {
if (myButtonList[i].getAttribute('class') == 'flagged') {
myAnchorList.push(myButtonList[i]);
}
}
对于放入<a>
数组的每个myAnchorList
,我还创建另一个数组,存储来自同一标记的其他信息(classe和其他属性)。
我在这里挣扎。我正在尝试设置一个eventListener,以便在点击<a>
时将这些信息发回给我。但不知何故,我在循环中创建一个函数(对于eventListener)会破坏一切。
for (i=0; i < myAnchorList.length; i++) {
myAnchorList[i].addEventListener("click", function(i){
console.log(alpha+' - '+beta[i]+" - "+charlie[i]);
});
}
我的值将为undefined
或其他一些值,这些值对于我点击的每个按钮都是相同的。 alpha
运行良好,因为它不依赖于循环的任何迭代,而不依赖于其他迭代。
有人能看到我在这里做错了吗?
答案 0 :(得分:1)
for (var i = 0; i < myAnchorList.length; i++) {
(function (i) { //Passes i to your function
myAnchorList[i].addEventListener("click", function () {
console.log(alpha+' - '+beta[i]+" - "+charlie[i]);
});
})(i);
}
答案 1 :(得分:0)
变量&#34; i&#34;在循环中创建的闭包中将始终检索最后一个值(myAnchorList.length - 1)。你不应该在一个循环中创建闭包,你可以使用&#34;工厂&#34;改为创建闭包的方法。