动态点击事件监听器

时间:2017-08-06 16:05:38

标签: javascript for-loop addeventlistener

我遇到了一些动态事件监听器循环的问题,如下所示:

profiles.forEach(function(item, i) {

    document.getElementById("test-" + i).addEventListener("click", function() {

      chrome.tabs.query({currentWindow: true, active: true}, function (tab) {

        chrome.tabs.update(tab.id, {url:  `https://example.com/profile/${item.platform}/${item.region}/${item.username}`})

      });

    })

})

假设profiles数组的长度为2,那么它只是获得" addEventListener"的最后一个元素。即使我说ID的test-0和test-1应该得到一个附加的事件监听器,因为循环运行两次,索引为0和1。

我读了一些关于闭包的内容,但由于这已经是一个函数,而不是正常的for循环,我不确定问题是什么。

我很感激任何帮助!

1 个答案:

答案 0 :(得分:0)

我发现了问题,我在循环中遗漏了一个非常重要的部分,在尝试解决问题时忘了添加到帖子中。

将链接test-0和test-1附加到第二行循环中的DOM。

profiles.forEach(function(item, i) {
content.innerHTML += item.column + item.html + "</div>"

document.getElementById("test-" + i).addEventListener("click", function() {

  chrome.tabs.query({currentWindow: true, active: true}, function (tab) {

    chrome.tabs.update(tab.id, {url:  `https://example.com/profile/${item.platform}/${item.region}/${item.username}`})

    });

  })
})

所以我在第一个将单击事件附加到链接之后创建了一个单独的for循环。

我不好意思,不包括那个,感谢帮助人员!