我试图找到一种方法来将事件处理程序分配给我动态创建的每个框。目前,用户可以点击“添加上方”或“添加下方”,无论点击哪处,都会出现2行框。事件处理程序不能用于动态添加的元素
我也试图做到这一点,当用户点击特定的方块时,会弹出一个colorPicker,并且该方块的颜色可以改变。
由于某些原因,只有当用户点击前两排正方形时,colorpicker才会弹出。如果更多行被动态添加到当前设置的下方或上方,则当您单击方块时不会发生任何事情。
有谁知道为什么会发生这种情况?
我做了什么/到目前为止已经试过:
http://codepen.io/anon/pen/bwBRmw
var theParent = document.querySelector(".container");
theParent.addEventListener("click", doSomething, false)
function doSomething(e) {
console.log("gets inside doSomething")
console.log(e.target)
console.log(e.currentTarget)
if (e.target !== e.currentTarget && e.target.id !== "") {
var clickedItem = e.target.id;
console.log("Clicked on " + clickedItem);
var led = document.getElementById(clickedItem)
if(!picker){
console.log("new picker initialized")
picker = new Picker(led)
}
else{
console.log("gets inside else case")
picker.settings.parent = led;
}
picker.show();
}
picker.on_done = function(colour) {
$(led).css('background-color',colour.rgba().toString());
picker.hide()
}
//e.stopPropagation();
}
阅读有关[__'Event delegation' __]( https://learn.jquery.com/events/event-delegation/) – Rayon
@Rayon我没有读过关于事件委托的内容,并将侦听器分配给父元素,以便避免绑定给每个子元素添加一个监听器(相当低效) – blazerix
你想传达什么?你为什么觉得效率低下? – Rayon