"$(文件);在事件stopPropagation之后不触发$(a) 在“;而不触发新的元素
"$(document).on" not triggering after event.stopPropagation and "$(a).on" not triggering for new elements
我正在尝试编写一个chrome扩展(用于casperjs测试)。扩展的一部分需要绑定到click
事件,我正在这样做:
$(document).on('click', 'a', null, handler)
这适用于所有链接,包括任何新创建的元素。问题是,如果链接有自己的click
处理程序来调用event.stopPropagation()
方法,则.on
不会触发该处理程序。
解决方法是我绑定到a
元素,如下所示:
$('a').on('click', null, null, handler)
即使另一个事件处理程序调用event.stopPropagation()
方法,这也能很好地触发handler
。问题是它不适用于动态创建的元素。因此,创建的任何新元素都不会触发处理程序。
因此,我需要一些具有$(document).on
方法功能的东西,它可以为动态创建的元素触发,但也可以不考虑event.stopPropagation()
方法而触发。
有什么想法吗?
有什么想法吗?
事件处理分为两个阶段:捕获阶段和冒泡阶段:
| | / ' -----------------| |--| |----------------- | element1 | | | | | | -------------| |--| |----------- | | |element2 ' / | | | | | -------------------------------- | | W3C event model | ------------------------------------------
默认情况下,事件处理程序绑定为侦听冒泡阶段(事件处理程序也与jQuery绑定)。
要在调用元素自己的事件处理程序之前对事件作出反应,必须将处理程序绑定到捕获阶段。请注意,尤其是较旧的IE浏览器不支持此功能。
由于jQuery不允许您这样做,您必须直接使用DOM API:
document.addEventListener('click', function(event) {
// test whether event originates inside <a> first
// (search on SO to find out how)
// then:
handler.call(event.target, event);
}, true);
document.addEventListener('click', function(event) {
if (event.target.nodeName !== 'BUTTON') {
return;
}
console.log('Called first.');
}, true);
document.addEventListener('click', function(event) {
if (event.target.nodeName !== 'BUTTON') {
return;
}
console.log('Called last.');
});
document.querySelector('button').onclick = function(event) {
console.log('Called in between (could cancel bubbling here)');
// event.stopPropagation();
};
<button>Click me and look at the console</button>
相关文章:
- CKEditor Widget-阻止编辑可编辑元素本身
- 如何设置html元素填充的动画
- 如何将HTML id分配给元素,以及如何将JavaScript应用于元素
- 使用 jQuery 的 .on 函数如何获取事件的原始元素
- 使用clickToggle并在单击另一个元素时关闭元素
- 单击时将焦点更改为元素
- 表追加而不附加最后一个元素
- 如何在jQuery中获取元素的形式
- 我可以获得相对于被点击元素的确切点击位置吗
- 在函数中添加数组元素的数值
- 在单击任何位置时隐藏元素,而不检查每次DOM单击
- 将视口底部滚动到元素底部
- 是否有任何snippet或jQuery插件可以列出easylist.txt模式匹配的DOM中的所有元素
- 在不使用JQuery的情况下隐藏DOM中的选定元素
- 如何使用jquery处理php循环通过元素
- Ckeditor-plugin:插入虚假元素add不情愿<p>标签前后
- JQuery添加元素需要在我的js之前再次添加JQuery脚本
- 在Jquery detachment()和appendTo()之后定位元素
- 在动态创建的元素上获取对特定选择器的引用
- 根据元素和容器大小计算边距