使用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);
});
});