1

当您将鼠标悬停在以下站点上的其中一个图像上时,会出现一个 div,其中包含操作按钮。当您单击 div 时,会打开一个弹出窗口,当您单击子操作按钮时,会发生一个不同的事件。

当您单击 div 的其中一个子按钮时,会出现弹出窗口。我尝试使用下面的代码停止事件传播。

http://penguinenglishlibrary.tumblr.com/

$(document).on('click', '#DOMWindow .like', function(event) {
    event.preventDefault();
    event.stopPropagation();

});
4

4 回答 4

4

您无法停止传播,因为该事件已被委派。您真的需要委托,即#DOMWindow .like在绑定时已经存在吗?如果是这样,您可以这样做:

$('#DOMWindow .like').on('click', function(event) {
    event.preventDefault();
    event.stopPropagation();
});

或者,正如我后来在评论中所说:

如果您真的需要委托,您可以将处理程序逻辑包装在 if 中,以检查 event.target 是否为#DOMWindow .like。如果是,让处理程序完成它的工作,否则意味着它正在冒泡,所以什么都不做。

于 2012-04-11T21:11:42.497 回答
1

也许

jQuery('#DOMWindow .like').unbind('mouseenter mouseleave');

假设您在 jQuery(.selector').hover() 上附加了一个事件,它可能会起作用

于 2012-04-11T21:12:40.667 回答
0

您无法通过绑定事件的方式停止传播。它是必然的document。一旦事件发生document,它就会冒泡到顶部,因此无法停止,因为它已经传播了。

尝试将事件绑定到更接近的父元素,.like例如#DOMWindow。注意:当 this 被调用时,你绑定事件的元素必须在 DOM 中(并且留在 DOM 中)。

$('#DOMWindow').on('click', '.like', function(event) {
    event.preventDefault();
    event.stopPropagation();
});

看看我做的这个例子:http: //jsfiddle.net/QAZ3v/ 它应该告诉你我的意思。

于 2012-04-11T21:18:34.847 回答
0

根据 jQuery 中 on() 函数的文档,

默认情况下,大多数事件会从原始事件目标冒泡到文档元素。在此过程中的每个元素处,jQuery 都会调用任何已附加的匹配事件处理程序。处理程序可以通过调用 event.stopPropagation() 来防止事件在文档树中进一步向上冒泡(从而防止这些元素上的处理程序运行)。但是,附加在当前元素上的任何其他处理程序都将运行。为了防止这种情况,请调用 event.stopImmediatePropagation()。(绑定到元素的事件处理程序的调用顺序与它们绑定的顺序相同。)

所以看来

  event.stopImmediatePropagation();

就是你要找的。返回 false 也可以,但我不太确定。

来源:http ://api.jquery.com/on/

编辑:在小提琴中测试了我的两个建议之后,似乎两者都不适用于点击处理程序。我很想知道它们是否适用于 on()。

于 2012-04-11T21:47:28.623 回答