当前位置: 首页 > 面试题库 >

如何在Javascript中使用循环生成事件处理程序?

伏德义
2023-03-14
问题内容

例如,我有10个从AJAX响应生成的标签:

<a href="#" id="b1">b1</a>
<a href="#" id="b2">b2</a>
<a href="#" id="b3">b3</a>
<a href="#" id="b4">b4</a>
<a href="#" id="b5">b5</a>
<a href="#" id="b6">b6</a>
<a href="#" id="b7">b7</a>
<a href="#" id="b8">b8</a>
<a href="#" id="b9">b9</a>
<a href="#" id="b10">b10</a>

我需要通过循环将onclick事件分配给每个事件:

for(i=1; i<11; i++) {
    document.getElementById("b"+i).onclick=function() {
        alert(i);
    }
}

这是行不通的,它仅将onclick分配给最后一个标签,并警告“ 11”。我该如何工作?我宁愿不使用jQuery。


问题答案:

您所有的处理程序都共享相同的i变量。

您需要将每个处理程序放入一个单独的函数i作为参数,以便每个处理程序都有自己的变量:

function handleElement(i) {
    document.getElementById("b"+i).onclick=function() {
        alert(i);
    };
}

for(i=1; i<11; i++) 
    handleElement(i);


 类似资料:
  • 所以我正在编写代码,它将解析文件夹中的多个文本文件,收集它们的信息,并将这些信息保存在两个静态列表实例变量中。信息存放的顺序并不重要,因为我最终将对其进行排序。但由于某些原因,增加线程数不会影响速度。这是我的run方法和主方法中利用多线程的部分。 如果需要额外的信息,我基本上有一个静态实例变量作为我需要浏览的文件的数组,还有一个常量是线程数(为了测试目的手动更改)。如果我有4个线程和8个文件,每个

  • 我正在编写一个Java7Swing应用程序,它调用一个非GUI类来在循环中执行某些操作。不幸的是,当循环运行时,我无法与GUI交互。在该循环中是否可以强制处理GUI事件? 我正在搜索一些内容,告诉JVM在继续循环之前处理其他GUI事件(如按钮单击)。

  • 本文向大家介绍如何使用JavaScript处理绑定事件?,包括了如何使用JavaScript处理绑定事件?的使用技巧和注意事项,需要的朋友参考一下 要使用JavaScript处理事件,请在任何元素上对鼠标单击事件使用click。 示例 您可以尝试运行以下代码,以了解如何使用JavaScript处理绑定事件:

  • 问题内容: 我正在尝试在某些类图中围绕类生成运行时包装,但是当图中有一个循环时,我不知道如何处理这种情况。想象有一个类A的字段类型为B,但是类型B的字段类型为A。我想生成类A’和B’,以便类A’的字段类型为B’,而B’的字段类型为B。 A’类型的字段。在字节伙伴中,方法“ defineField”可以接收类型定义的参数。我认为必须有一种方法可以为尚未定义的类型定义TypeDefinition,但我

  • 问题内容: 我正在处理从别人那里接手的一些html和Javascript代码。该页面每十秒钟(通过异步请求)重新加载数据表,然后使用一些DOM代码重新构建该表。有问题的代码如下所示: 但是,当为某个元素触发事件时,似乎对表中的每个表都将相同的值传递给该方法(我已经验证了该循环的每次迭代,并且都被赋予了新的,不同的值)。 我怀疑这种情况的发生是因为我使用语法设置事件处理程序的方式的本质。如果我了解这

  • 问题内容: 我有几个div的,,,…和要指派点击处理对他们说: 但是,我没有得到单击时的显示(就像其他所有单击一样)。我究竟做错了什么? 问题答案: 在Javascript 中的循环中创建闭包是一个常见的错误。您需要具有以下某种回调函数: 由于这个问题仍然受到关注,并且ES6也越来越受欢迎,因此我建议使用一种现代的解决方案。如果您编写ES6,则可以使用关键字,它使变量在循环本地而不是全局: 它更短