在DOM内容加载后附加元素中的事件侦听器
Event listener in elements appended after DOM Content Loaded
我需要听一个<select>
的"change"事件,但这只在第一次选择时才有效,有一个按钮可以将更多的<select>
添加到document
,所以我需要检查是否有任何<select>
被改变,我正在做这样的事情:
document.addEventListener('DOMContentLoaded', function() {
var selects = document.getElementsByClassName('select');
for(var i=0;i < selects.length;i++) {
selects[0].addEventListener('change', function() {
// do something here...
}, false);
}
}, flase);
但这只在DOMContentLoaded
时执行,如果我在document.addEventListener
之外执行,它不会执行。
注:我这样做与纯JS原因是相同的jQuery
,我有更多的控制我的脚本与纯JS。
直接将事件附加到DOM节点是可以的,因为这些节点已经存在于DOM中。
但是,根据您的情况要求,有一种更好的方法允许将给定事件的处理程序绑定到当前节点和将来添加的节点。
您可以使用事件冒泡:附加到节点的事件将为节点本身及其所有父节点触发。这里,我使用body元素作为父节点,但是您可以在任何元素上设置侦听器,只要它是当前和未来选择元素的父元素:
document.body.addEventListener("change", function(e) {
console.log(e.target);
}
查看这个示例以获得更好的理解:http://jsfiddle.net/6HqqA/.
下面是对事件冒泡概念的一个很好的解释:http://davidwalsh.name/event-delegate.
不要这样附加,使用jquery的on函数
$(document).on('change', 'select', function(){
// your code
});
http://api.jquery.com/on/试试这个(与jquery ),
$(function(){
$(document).on('change','select', function(){
// do something here...
var val = $(this).val();
});
});
即使你添加了多个动态选择
相关文章:
- 元素事件处理程序到EXT.js面板中
- 浏览器中的javascript和td元素事件属性
- 主干清理元素事件
- 影响类的所有成员而不是一个元素事件的插件正在发生
- AngularJS - ngRepeat.在 ng 重复重新渲染后,需要将焦点集中在相同的元素事件上
- 在jQuery中,如何触发mootools中添加的元素事件
- 允许 Raphael/SVG 元素事件通过顶部分层的 HTML 触发
- CanJS未来元素事件绑定
- 重新选择所选选项时,Javascript/jQuery选择元素事件
- 类变量在元素事件中不可见
- 修改元素'事件函数的参数
- 如何过滤掉事件处理程序中的子元素事件
- 要求Javascript关注多个元素事件的模式
- 允许先触发其他绑定元素事件
- Firefox扩展不能覆盖元素事件
- 如何获取"mouseup"之后的元素事件完成
- 用于文档防止元素事件的Onclick事件
- 如何获取触发“onclick”的元素事件
- 向由子元素事件触发的表单元格添加类/从中删除类
- JavaScript在元素加载后立即绑定元素事件