使用javascript在循环中注入元素并附加Click事件处理程序

杰森

我正在尝试制作一个下拉列表,该下拉列表是使用javascript从数组填充的。每个项目都需要附加一个事件触发器,但是当前仅将事件附加到最后一个元素。我已经尝试过基于固定闭包的示例,但仍仅附加到最后一个元素。

https://jsfiddle.net/z3h1uux4/

var ArrayUName = ["A","B","C"]
var ArraySlug = ["Q","W","E"]
for (i = 0; i < ArrayUName.length; i++) {
      var GoalID = ArrayUName[i] + '-' + ArraySlug[i];
      document.getElementById("TheContent").innerHTML +=
      '<a class="GoalIDBtn" id="' + GoalID + '">' + ArrayUName[i] + ' / ' + ArraySlug[i] + '</a></br>';
      (function(_i, _GoalID)
          {document.getElementById(_GoalID).addEventListener(
              "click",
               function() {alert("Click Made : " + _i)}
          );
      })(i, GoalID);
      console.log("Loop #" + i);
}
不明确的

那是因为innerHTML破坏性的财产。它会重新创建设置内容并创建元素,新生成的元素没有任何click绑定到它们的处理程序。您应该创建一个节点(元素),而不要使用innerHTML

您可以改用document.createElementHTMLElement.appendChild方法:

var a = document.createElement('a');
a.className = 'GoalIDBtn';
a.id = GoalID;
a.textContent = ArrayUName[i] + ' / ' + ArraySlug[i];
document.getElementById("TheContent").appendChild(a);
(function(_i /*, _GoalID*/) {
  a.addEventListener("click", function() {
      alert("Click Made : " + _i);
  });
})(i);

这是jsfiddle上的演示请注意,它不会添加br元素,您可以使用类似的DOM API来创建它们。

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用javascript在循环中注入元素并附加Click事件处理程序

来自分类Dev

在onclick事件处理程序循环中设置当前元素

来自分类Dev

元素click的Grab属性-在click事件处理程序中使用

来自分类Dev

在for循环中绑定事件处理程序

来自分类Dev

在循环中绑定事件处理程序

来自分类Dev

使用CDI(Weld)在for循环中注入新对象

来自分类Dev

使用CDI(Weld)在for循环中注入新对象

来自分类Dev

JavaScript - 将事件处理程序附加到元素也会将它们附加到其子元素

来自分类Dev

为动态元素附加事件处理程序

来自分类Dev

如何将javascript事件处理程序附加到在javascript中创建的这些元素

来自分类Dev

无法使用for循环代码理解Javascript事件处理程序

来自分类Dev

附加事件处理程序

来自分类Dev

在循环中附加 HTML 元素

来自分类Dev

事件处理程序在循环中无法正常工作

来自分类Dev

事件处理程序未从Foreach循环中触发

来自分类Dev

事件处理程序在循环中无法正常工作

来自分类Dev

事件循环如何处理JavaScript中的事件处理程序?

来自分类Dev

事件循环如何处理JavaScript中的事件处理程序?

来自分类Dev

将事件处理程序附加到Polymer核心元素

来自分类Dev

javascript-如何使用闭包将事件绑定到循环中的元素数组?

来自分类Dev

如何将Click处理程序附加到DOM元素

来自分类Dev

如何使用Click事件处理程序jQuery

来自分类Dev

如何使用Click事件处理程序jQuery

来自分类Dev

如何使用JavaScript OOP在附加的事件处理程序中引用“真实的”?

来自分类Dev

如何使用JavaScript OOP在附加的事件处理程序中引用“真实的”?

来自分类Dev

多次附加事件处理程序

来自分类Dev

无法附加事件处理程序

来自分类Dev

在Angular中注销事件处理程序

来自分类Dev

从空控件中注销事件处理程序

Related 相关文章

  1. 1

    使用javascript在循环中注入元素并附加Click事件处理程序

  2. 2

    在onclick事件处理程序循环中设置当前元素

  3. 3

    元素click的Grab属性-在click事件处理程序中使用

  4. 4

    在for循环中绑定事件处理程序

  5. 5

    在循环中绑定事件处理程序

  6. 6

    使用CDI(Weld)在for循环中注入新对象

  7. 7

    使用CDI(Weld)在for循环中注入新对象

  8. 8

    JavaScript - 将事件处理程序附加到元素也会将它们附加到其子元素

  9. 9

    为动态元素附加事件处理程序

  10. 10

    如何将javascript事件处理程序附加到在javascript中创建的这些元素

  11. 11

    无法使用for循环代码理解Javascript事件处理程序

  12. 12

    附加事件处理程序

  13. 13

    在循环中附加 HTML 元素

  14. 14

    事件处理程序在循环中无法正常工作

  15. 15

    事件处理程序未从Foreach循环中触发

  16. 16

    事件处理程序在循环中无法正常工作

  17. 17

    事件循环如何处理JavaScript中的事件处理程序?

  18. 18

    事件循环如何处理JavaScript中的事件处理程序?

  19. 19

    将事件处理程序附加到Polymer核心元素

  20. 20

    javascript-如何使用闭包将事件绑定到循环中的元素数组?

  21. 21

    如何将Click处理程序附加到DOM元素

  22. 22

    如何使用Click事件处理程序jQuery

  23. 23

    如何使用Click事件处理程序jQuery

  24. 24

    如何使用JavaScript OOP在附加的事件处理程序中引用“真实的”?

  25. 25

    如何使用JavaScript OOP在附加的事件处理程序中引用“真实的”?

  26. 26

    多次附加事件处理程序

  27. 27

    无法附加事件处理程序

  28. 28

    在Angular中注销事件处理程序

  29. 29

    从空控件中注销事件处理程序

热门标签

归档