克隆具有相同的侦听器,即使它们应该是不同的

时间:2015-11-26 18:14:16

标签: javascript

https://jsfiddle.net/d6rsq426/

出于某种原因,如果我添加一个克隆,它们都有不同的侦听器并单独工作。如果我复制(使用t按钮)现在存在的两个克隆,那么就是4.第四个克隆工作得很好,但第三个监听器控制第四个克隆。我试图找出相当一段时间,但找不到原因。看小提琴。对象中的此函数很可能是出现问题的地方。

duplicateSelected()

1 个答案:

答案 0 :(得分:0)

做这样的事情:

var whichSelected = document.querySelectorAll(".selected");

for(var i = 0; i < whichSelected.length; i++) {
    var clone = whichSelected[i].cloneNode(false);
    (function(clone){
        clone.addEventListener("click", function() {createOutline(clone)});
    })(clone);
    document.body.appendChild(clone);
}

我已更新您的JSFiddle以使其发挥作用。

这背后的原因是,当调用eventlistener时,clone就是迭代中的最后一个(for-loop)。通过使用IIFE(Immidiately invoked function expression),事件触发时会保留clone