事件监听器中的jQuery绑定事件

时间:2014-11-05 09:02:56

标签: jquery events

我有一个绑定了点击事件监听器的链接。单击它会将单击事件侦听器附加到文档,这次事件是命名空间,以便我可以轻松删除它。在附加第二个事件后立即触发。这是为什么会发生的?我最好的猜测是,当新事件附加到文档时,事件仍然在冒充树。因此,它会触发两个事件。请参阅以下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元素。插入时,我想将一个事件监听器附加到文档,当触发时检查事件目标,以检测是否在插入的元素之外发生任何单击事件。如果目标在其中,它应该什么都不做。如果目标位于元素之外的任何位置,则应隐藏元素。

1 个答案:

答案 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对象时,它将找到绑定到它的点击处理程序并将触发它。

注意:您不应该只是在每次点击中添加新的处理程序...希望您已经处理好了