如何将事件附加到新添加的html元素
How to attach events to new added html elements
如果我有这样一个函数:
document.someElement.click = function(){alert(555);}
和我没有在元素someElement
在HTML页面本身,所以我添加someElement
到页面后,但之前的代码不工作。
这里有两种常见的策略。
-
将元素添加到DOM后,将事件挂接在元素上。
-
使用事件委托
第一个相当简单,所以我将重点讨论第二个:
事件委托的思想是,大多数DOM事件从它们发生的元素"冒泡"到文档,并且您可以在任何级别处理它们。
例如,假设你有
<div id="container">
</div>
你可以钩住容器div上的click
事件,然后如果你这样做:
var span = document.createElement('span');
span.innerHTML = "Hi there";
document.getElementById("container").appendChild(span);
…然后,当您单击span
时,事件将弹出到容器,并且您可以在容器的click
处理程序中看到单击。
您可以通过使用event
对象上的target
属性来判断是哪个元素启动了事件。
下面是一个例子:
HTML:<button id="theButton">Click To Add</button>
<div id="container"></div>
JavaScript: // Note that this code is at the end of the document
(function() {
var container = document.getElementById("container");
// Hook clicks on the button
document.getElementById("theButton").onclick = buttonClick;
// Hook clicks on the container
container.onclick = containerClick;
// Handle button clicks
function buttonClick() {
var child = document.createElement('div');
child.id = ('d' + container.childNodes.length) +
Math.floor(Math.random() * 10000);
child.innerHTML = "I'm child div '" + child.id + "'";
container.appendChild(child);
}
// Handle container clicks
function containerClick(event) {
event = event || window.event;
alert("You clicked child '" + event.target.id + "'");
}
})();
实例|来源
注意:我使用onclick
来保持事情简单。在生产中,我建议使用addEventListener
(或IE上的attachEvent
)。事实上,我通常建议使用好的库,如jQuery、YUI、Closure或其他几个库中的任何一个,因为它们提供了重要的实用功能(包括平滑addEventListener
/attachEvent
)。
您可以使用addEventListener()
(IE的attachEvent()
)在新创建的元素上注册一个点击处理程序,例如:
var x = document.createElement('div');
x.innerText = 'click me';
x.addEventListener('click', function() {
alert('i am clicked');
});
document.body.appendChild(x);
看看TJ的回答吧;他基本上是说你可以设置一个容器在上面定义一个点击处理程序;在容器中添加的任何元素都将使其事件冒泡到容器中。这样,您只需要一个点击处理程序,而不是每个元素一个。
相关文章:
- JQuery添加元素需要在我的js之前再次添加JQuery脚本
- 如何使用jquery遍历具有动态添加元素的数组
- jQuery appendTo 替换元素而不是添加元素,如果正在添加的元素预先存在于列表中
- 如何使用jquery添加元素
- 动态添加元素上的 HammerJS
- CSS没有'使用javascript向页面动态添加元素时无法工作
- 使用Javascript在DOM元素中添加元素
- 在添加元素时激发JS事件
- 什么's是在IE8+中添加元素的最有效方法
- d3.js在添加元素时协调
- 使用路由器链接动态添加元素
- 动态添加元素
- 在页面内容完全加载后,使用jQuery在DOM中添加元素
- j查询绑定单击不添加元素
- 在循环 jQuery 上添加元素
- 从一个页面调用 javascript 函数以在第二个页面上添加元素
- 页面加载后向<正文>添加元素时出现问题
- 动态添加元素时刷新 HTML
- 动态添加元素时不触发 JQuery 事件
- 如何使用 JavaScript 获取动态添加元素的宽度