事件监听器中的 jQuery 绑定(bind)事件

标签 jquery events

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

最佳答案

这是因为事件传播

$('#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 元素中时,您正在注册处理程序,并且该事件绑定(bind)到作为当前元素的祖先的文档对象。因此,现在当事件最终传播并到达 document 对象时,它将找到与其绑定(bind)的点击处理程序并触发它。

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

关于事件监听器中的 jQuery 绑定(bind)事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26753111/

相关文章:

javascript - 使用 AJAX 和 JQuery 在没有页面刷新的情况下提交表单时遇到问题

windows - 如何在 Windows 中监视进程/程序执行?

javascript - 如何使用 onclick 事件触发此代码。我尝试过但失败了

javascript - 延迟 jquery ajax 请求的顺序

c# - 相当于 += 赋值给一个事件的代码

javascript - 输入文件 onchange 事件未在 chrome 中触发

javascript - JavaScript 如何挂接 WinRT 事件?

使用 RequireJS 的 Javascript 命名空间,为什么?

javascript - Joomla 中 Mootools 和 jQuery 的冲突

javascript - Mailchimp AJAX jQuery 意外 token <