Javascript &引用;点击";对于动态创建的链接,isn';不要被触发

Javascript &引用;点击";对于动态创建的链接,isn';不要被触发,javascript,dom,Javascript,Dom,我想动态添加一个链接并在其上附加“onclick”事件。以下是我所拥有的内容的简化版本: for (var i = 0; ....) { var a1 = document.createElement("a"); a1.innerHTML = "My link123"; a1.addEventListener("click", function(event) { myFunc(someArray[i].property1, event); // a

我想动态添加一个链接并在其上附加“onclick”事件。以下是我所拥有的内容的简化版本:

for (var i = 0; ....) {
    var a1 = document.createElement("a");
    a1.innerHTML = "My link123";
    a1.addEventListener("click", function(event) {
      myFunc(someArray[i].property1, event);
      // alert("test123");
    });

    var p1 = document.createElement("p");
    var sp1 = document.createElement("span");
    //..........

    divContainer.innerHTML += a1.outerHTML + p1.outerHTML + sp1.outerHTML;
 }
但当我点击它时,它不会触发“点击”事件

更新

创建并单击它后,我得到:
myFunc(someArray[i].property1,event);--无法读取未定义的属性“property1”

我想这与Clojure的评价有关

更新2

我试过这个:

a1.addEventListener("click", function(event) {
  (function(i2){
    myFunc(i2, event);
  })(myArray[i].property1);
});
但在运行时,当我点击它时,它说“property1未定义”;我怎样才能解决这个问题

您正在将DOM节点(新节点和已在
divContainer
中的节点)序列化为HTML,其中不包括事件侦听器,然后从HTML创建新的DOM节点

改用
appendChild
和friends

divContainer.appendChild(a1);
divContainer.appendChild(p1);
divContainer.appendChild(sp1);

如果您希望单击事件保持完整,而不是复制生成的HTML,则应该
.appendChild(a1)
。这也与此相关:@MikeMcCaughan,实际上我还动态创建了其他HTML元素,对于它们,我使用了“outerHTML”。我如何将这两种方法结合起来?@Joshimari:那又怎样?将DOM元素序列化为HTML将丢失所有绑定的事件处理程序。对此你无能为力。“我如何结合这两种方法?”不要。使用domapi修改文档。为每个新的子项调用
divContainer.appendChild
。@Joshimari-这是一个不同的问题。正如Felix所说:请看@Joshimari——您仍在尝试读取click事件处理程序中的
i
。单击发生时,
i
将发生更改。再读一遍。你在循环中捕捉
i
的值,而不是单击。我知道。我该怎么修?给我举一个例子。链接问题中有一些例子。
divContainer.appendChild(a1);
divContainer.appendChild(p1);
divContainer.appendChild(sp1);