for 循环中的 addEventListener 始终添加到最后一项
addEventListener in for loop adds always to last item
我目前正在编写一个chrome扩展,所以不要介意"chrome.*"代码。
现在,我面临一个问题,我不知道如何解决这个问题(尝试了我在谷歌上能找到的所有东西)。
这是我的函数:
function tabwlwatchlist() {
document.getElementById('watchlisttable').innerHTML = "";
chrome.storage.local.get('movienames', function (resultnames) {
chrome.storage.local.get('movielinks', function (resultlinks) {
for (var j=0; j<resultnames.movienames.length; j++) {
(function () {
document.getElementById('watchlisttable').innerHTML += '<tr><td><h3 class="article_preview"><a href="' + resultlinks.movielinks[j] + '" target="_blank"><span>' + resultnames.movienames[j] + '</span></a></h3></td><td><h3 class="article_preview"><span id="wlt' + j +'">entfernen</span></h3></td></tr>';
console.log("test");
document.getElementById('wlt' + j).addEventListener("click", function(){
alert('works');
}, false);
console.log("test2");
}())
}
});
});
document.getElementById('lasthd').style.display = "none";
document.getElementById('lastserien').style.display = "none";
document.getElementById('watchlisttab').style.display = "block";
}
事件侦听器总是添加到 for 循环的最后一个元素。
有什么想法吗? :/
执行 for 循环后,您的 j 值已成为高度数。要解决它,你必须知道一个常见的JavaScript现象,称为闭包。为了防止这种情况,您必须为立即调用的函数提供参数j
。您可以在此处了解有关它们的更多信息,输入链接说明
function tabwlwatchlist() {
document.getElementById('watchlisttable').innerHTML = "";
chrome.storage.local.get('movienames', function (resultnames) {
chrome.storage.local.get('movielinks', function (resultlinks) {
for (var j=0; j<resultnames.movienames.length; j++) {
(function (j) {
document.getElementById('watchlisttable').innerHTML += '<tr><td><h3 class="article_preview"><a href="' + resultlinks.movielinks[j] + '" target="_blank"><span>' + resultnames.movienames[j] + '</span></a></h3></td><td><h3 class="article_preview"><span id="wlt' + j +'">entfernen</span></h3></td></tr>';
console.log("test");
document.getElementById('wlt' + j).addEventListener("click", function(){
alert('works');
}, false);
console.log("test2");
}(j))
}
});
});
document.getElementById('lasthd').style.display = "none";
document.getElementById('lastserien').style.display = "none";
document.getElementById('watchlisttab').style.display = "block";
}
相关文章:
- 如何从对象数组中获取最后一项
- 为什么只有最后一项显示,而不是全部显示
- 删除最后一项jquery
- 为什么我的“for”循环只获取 html 中的最后一项
- 我无法将下拉列表的默认值设置为最后一项
- 流星批量插入仅插入最后一项
- 我怎么能知道元素是最后一项
- 如何删除WinJS组绑定列表的最后一项
- 使用handlers.js模板以数组中的最后一项为条件
- empty().append()追加循环中的最后一项
- jQuery只附加最后一项
- 将属性添加到 for 循环中的最后一项
- 如何按排序键顺序获取对象中的最后一项
- for 循环中的 addEventListener 始终添加到最后一项
- 从数组中删除最后一项
- CasperJS只从我的for循环中多次发布最后一项
- 在 JavaScript 中处理数组中的最后一项
- 胡子.js带有数组,最后一项除外
- 通过jQuery在最后一项之后插入
- JavaScript for 循环只返回数组中的最后一项