为什么侦听器总是显示上一次迭代的编号?

道格

无论您单击什么数字,警报都会显示数字10。也许这不是在循环中使用addEventListener的最佳方法。需要一些帮助。谢谢。

<table id="tb1"></table>

<template id="tp1">
    <tr>
        <td class="num"></td>
    </tr>
</template>

<script>

    var t = document.getElementById("tp1");
    var tb1 = document.getElementById("tb1");

    for (i=0;i<10;i++){

        var clone = t.content.cloneNode(true);

        clone.querySelector(".num").innerHTML = i;

        var l = clone.querySelector("tr");
        l.id = i;

        clone.getElementById(i).addEventListener("click",function(){
            alert(i);            
        });

        tb1.append(clone);
    }

</script>
Yosvel Quintero Arguelles

i变量通过引用获取循环的最后一个值。在这种情况下,为10

您可以使用IIFE解决此问题,前提是该函数成为立即执行的函数表达式。表达式中的变量不能从外部访问

代码示例:

var t = document.getElementById('tp1');
var tb1 = document.getElementById('tb1');

for (var i = 0; i < 10; i++) {
  var clone = t.content.cloneNode(true);
  clone.querySelector('.num').innerHTML = i;
  var l = clone.querySelector('tr');
  l.id = i;
  (function (i) {
    clone.getElementById(i).addEventListener('click', function () {
      console.log(i);
    });
  })(i);
  tb1.append(clone);
}
<table id="tb1"></table>

<template id="tp1">
    <tr>
        <td class="num"></td>
    </tr>
</template>

注:我已经取代了使用alert()通过console.log()只是为了方便

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么React Native Navigation侦听器在第一次尝试时触发?

为什么我的菜单侦听器不响应第一次点击?

仅在滚动事件侦听器上触发警报一次,直到页面重新加载

jQuery:一次创建多个事件侦听器?

套接字侦听器仅反应一次

我不明白为什么我的 Socket.io 侦听器触发了一次,但即使后端发出更多信息也不会触发

事件侦听器(单击时,链接到显示页面)仅在Ruby on Rails项目中工作一次

为什么在Android侦听器上使用WeakReference?

单击特定的div时仅执行一次事件侦听器,但继续在其他div上执行

为什么第一次迭代总是比下一个循环更快?

在滚动侦听器上,两次调用asynctask两次,或者在listview上滚动一次,则多次调用asynctask

OnClick 侦听器仅在第一次单击时更新回收器视图

请告诉我为什么这个对象迭代器只允许记录一次

OnNavigationItemsSelected侦听器一次又一次地启动相同的活动

为什么侦听器列表是列表?

Javascript 单击事件侦听器仅触发一次

按钮单击事件侦听器仅被调用一次

第一次“使用”后,JTextField的动作侦听器失败

node.js邮件侦听器多久轮询一次电子邮件框?

如何使用 onclick 事件侦听器一次更改多个元素的背景颜色?

侦听器仅用于第一次单击 JTextField

Firestore与过滤器在Recyclerview中一次获取vs实时侦听器

Android套接字侦听器仅运行一次

Click事件的面板项目侦听器仅触发一次

使用滚动只执行一次事件侦听器

数组显示上一次迭代的值

为什么我的while循环只迭代一次?

为什么在第一次迭代后就停止了?

为什么光标在一次迭代后退出?