当使用jquery或javascript快速创建html元素时,事件处理程序不会附加到元素。 所以我们通常将事件附加到其父动态或未动态创建的文档中 那么文档如何将事件委托给新创建的元素。 请清除这个疑问。
答案 0 :(得分:1)
您必须了解委托如何工作以及它与指定元素的区别。
假设,我有一个带有六个按钮的DOM
<div id="button-home">
<button value="1">Button</button>
<button value="2">Button</button>
<button value="3">Button</button>
<button value="4">Button</button>
<button value="5">Button</button>
<button value="6">Button</button>
</div>
现在,有两种方法可以解决它。我可以为每个按钮附加一个处理程序:
var buttonHome = document.getElementById(“button-home”); var buttons = buttonHome.getElementsByTagName(“button”); for(var i = 0; i&lt; buttons.length; i ++){ var button = buttons [i]; button.onclick = function(){ alet(“你点击了我!”); } }
现在,如果您添加或删除按钮,则必须更新处理程序。
另一个选项是在button-home
上设置一个处理程序,以查看按下了哪个按钮。
document.getElementById("button-home").addEventListener("click",function(e) {
// e.target is the clicked element!
if(e.target && e.target.nodeName === "button") {
console.log("You clicked on button value: " + target.value;);
}
});
现在,在委托模型中,因为按钮外部只有一个单击处理程序,所以我们如何添加/更改或重新排列内部按钮并不重要。点击处理程序将弄清楚我们做了什么。
更好的代码示例和解释: