使用jquery/javascript防止首次发出警报

使用jquery/javascript防止首次发出警报,javascript,jquery,Javascript,Jquery,我想在文档上单击事件时附加函数。我的函数附加了它,但它也在调用它。我不明白为什么 事件“泡泡”在a元素及其父元素上触发,您可以强制jquery停止在该元素上方触发更多事件,如下所示: 由于click事件在DOM中传播和冒泡。将代码更改为: $(function () { $('a').click(function (e) { e.stopPropagation(); $(document).on('click', perform) }) })

我想在文档上单击事件时附加函数。我的函数附加了它,但它也在调用它。我不明白为什么


事件“泡泡”在
a
元素及其父元素上触发,您可以强制jquery停止在该元素上方触发更多事件,如下所示:


由于click事件在DOM中传播和冒泡。将代码更改为:

$(function () {
    $('a').click(function (e) {
        e.stopPropagation();
        $(document).on('click', perform)
    })
})


因为您的链接是body元素的后代,所以单击它实际上会沿着DOM向上移动,并触发绑定到它的祖先元素的任何单击事件。您可以通过在链接上使用来停止此操作。

在单击事件之前尝试此操作

          $(document).unbind("click");
          $(document).bind("click" , perform);

发生的事情称为
事件传播
。当在
a
元素上触发单击事件时,
文档
被绑定,然后单击事件传播到文档并运行您的函数

要阻止这种情况发生,请运行
event.stopPropagation()。这会告诉浏览器:不要让这个点击事件向上传播

使用
event.stopPropagation()创建示例代码


这里有一个很好的链接:

请确保它没有多次连接。在附加click事件之前,请先解除其绑定。我想知道您是否可以在此明确事件的顺序?原始代码是否在事件完成DOM冒泡之前将click事件绑定到文档?因此,一旦“冒泡”到达“文档”,点击就已经绑定到文档了?这就是我的理解,但冒泡对我来说有点像黑魔法:)@RobinL-是的,在您的原始代码中,绑定首先发生,然后传播发生。
$(function () {
    $('a').click(function (e) {
        e.stopPropagation();
        $(document).on('click', perform)
    })
})
          $(document).unbind("click");
          $(document).bind("click" , perform);
function perform() {
    alert(0);
}

$(function () { 
    $('a').click(function (event) {
        event.stopPropagation();

        $(document).bind('click',perform);
    });
});