一尘不染

在循环中添加“点击”事件监听器[重复]

javascript

onClickhtml标记中的标准重构为侦听器,我的代码面临问题:

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是循环中的最后一个索引,例如7Lookslike,eventListeners仅填充了此循环中的最后一个元素,循环初始化看起来正确,为什么会这样呢?


阅读 484

收藏
2020-05-01

共1个答案

一尘不染

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

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);
    }
}
2020-05-01