javascript - 在循环中添加 'click' 事件监听器

标签 javascript events loops click listeners

重构标准onClick在 html 标签内给听众,我的代码遇到问题:

var td;
    for (var t=1;t<8;t++){
        td = document.getElementById('td'+t);
        if (typeof window.addEventListener==='function'){
                td.addEventListener('click',function(){
                    console.log(td);
            })}
 }  

何时 td元素被点击,假设点击了td与循环中的最后一个索引,例如7
看起来像,eventListeners仅填充此循环中的最后一个元素。
循环初始化看起来是正确的。
为什么会这样?

这里是live code

最佳答案

您需要将事件监听器的分配包装在闭包中,例如:

var td;
for (var t = 1; t < 8; t++){
    td = document.getElementById('td'+t);
    if (typeof window.addEventListener === 'function'){
        (function (_td) {
            td.addEventListener('click', function(){
                console.log(_td);
            });
        })(td);
    }
}

关于javascript - 在循环中添加 'click' 事件监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8909652/

相关文章:

Java事件: Is this a good way to go about it?

javascript - 如何使用 forEach 循环向下计数 javascript

javascript - extjs 与 jquery 结合的问题

Android 异步任务取消/停止

javascript - 使用 web3-core-promievent 创建一个返回 PromiEvent 的函数

java - 如何让 for 循环并排运行?

c++ - 在 C++ 中嵌套 for()

javascript - 如何在js中对两个不同类型的数组列表使用相同的数组?

显示昨天和今天日期的 Javascript 代码

javascript - 谷歌地图关闭信息窗口汽车中心