我有一个绑定了点击事件监听器的链接。单击它会将单击事件侦听器附加到文档,这次事件是命名空间,以便我可以轻松删除它。在附加第二个事件后立即触发。这是为什么会发生的?我最好的猜测是,当新事件附加到文档时,事件仍然在冒充树。因此,它会触发两个事件。请参阅以下JSFiddle。
HTML
<a href="#" id="example">Click Me</a>
的Javascript
$('#example').on('click', function(e) {
$(document).on('click.example', function(e) {
alert('example event triggered');
});
});
我想要完成的是点击一个按钮我插入一个dom元素。插入时,我想将一个事件监听器附加到文档,当触发时检查事件目标,以检测是否在插入的元素之外发生任何单击事件。如果目标在其中,它应该什么都不做。如果目标位于元素之外的任何位置,则应隐藏元素。
答案 0 :(得分:2)
这是因为事件传播
$('#example').on('click', function(e) {
$(document).on('click.example', function(e) {
alert('example event triggered');
});
e.stopPropagation();
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<a href="#" id="example">Click Me</a>
当事件仍在anchor
元素中时,您正在注册处理程序,并且事件绑定到作为当前元素的祖先的文档对象。所以现在当事件最终传播并到达document
对象时,它将找到绑定到它的点击处理程序并将触发它。
注意:您不应该只是在每次点击中添加新的处理程序...希望您已经处理好了