为什么动态创建的html没有在DOM中注册
why html created on the fly not registered in DOM?
当使用jquery或javascript动态创建html元素时,事件处理程序不会附加到元素上。因此,我们通常将事件附加到它的父事件或不是动态创建的文档上那么文档如何将事件委托给新创建的元素呢?
您必须了解委托是如何工作的,以及它与元素赋值的区别。
假设我有一个带有六个按钮的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;我& lt;buttons.length;我+ +){Var button = buttons[i];按钮。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;);
}
});
现在,在委托模型中,因为在按钮的外部只有一个点击处理程序,所以我们如何添加/更改或重新排列内部的按钮并不重要。点击处理程序会知道我们做了什么。
更好的代码示例和解释在这里:
http://davidwalsh.name/event-delegate相关文章:
- 在单击任何位置时隐藏元素,而不检查每次DOM单击
- 是否有任何snippet或jQuery插件可以列出easylist.txt模式匹配的DOM中的所有元素
- 在不使用JQuery的情况下隐藏DOM中的选定元素
- 如何在DOM元素上按类型构建此函数
- Windows形成web浏览器控件和Javascript更改的DOM
- Datatables:通过DOM数据源中的名称引用列
- 防止多次显示弹出窗口.Ajax添加结果已在DOM中注册
- 在元素添加到DOM之前,将事件注册到元素中
- 如何通过按 id 注册但未在任何 DOM 节点中引用来删除 dojo 小部件
- 从尚未注册到 DOM 的 jquery 对象中删除元素
- 如何在javascript中动态编写对象时注册DOM id
- 我想用github注册表替换DOM文本节点
- 如何为DOM元素注册事件处理程序
- 用jquery将函数注册到DOM
- 我可以通过'this'作为将事件侦听器注册到local-DOM子节点时的参数
- 如何用DOM注册HTML文本
- 如何有效地将DOM事件注册到特定的JavaScript对象实例
- 为什么动态创建的html没有在DOM中注册
- Javascript:在创建/附加到DOM时注册*每个* DOM元素
- 将现有事件注册到ajax加载的DOM