循环和功能

时间:2015-02-13 08:41:36

标签: javascript arrays loops

我收集有关点击的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运行良好,因为它不依赖于循环的任何迭代,而不依赖于其他迭代。

有人能看到我在这里做错了吗?

2 个答案:

答案 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;改为创建闭包的方法。