Jquery 如何阻止孩子传播由live/delegate侦听器触发的事件?

Jquery 如何阻止孩子传播由live/delegate侦听器触发的事件?,jquery,events,parent-child,event-propagation,Jquery,Events,Parent Child,Event Propagation,我有一个委托父对象,它在一组具有特定类的子对象中侦听单击事件 $(".toggle_group").on("click",".toggle",function(e){ .. }); 下面是一个html的例子 <div class='toggle_group'> <a class='toggle'>click me and i toggle <div>Im a child of toggle</div></a> <a cl

我有一个委托父对象,它在一组具有特定类的子对象中侦听单击事件

$(".toggle_group").on("click",".toggle",function(e){ .. });
下面是一个html的例子

<div class='toggle_group'>
  <a class='toggle'>click me and i toggle <div>Im a child of toggle</div></a>
  <a class='toggle'>click me and i toggle <div>Im a child of toggle</div></a>
  <a class='toggle'>click me and i toggle <div>Im a child of toggle</div></a>
  <a class='toggle'>click me and i toggle <div>Im a child of toggle</div></a>
</div>

单击我,我切换我是切换的孩子
单击我,我切换我是切换的孩子
单击我,我切换我是切换的孩子
单击我,我切换我是切换的孩子
问题是
a.toggle
a.toggle的子级将事件分发给父级,在不应该时触发处理程序。根据jQuery文档,您无法停止实时/委托事件侦听器上的事件传播

如何阻止a.toggle的这些子级将事件传播给父级?或者在某些情况下允许它


您可以看到
的内部div。toggle
应该是一个下拉菜单。当你点击菜单时,它不应该切换,只有当你点击切换链接时…

检查此页面中的注释,至少有人声称找到了解决方法

已从此处的线程复制注释,以供将来参考:

米凯: 解决.live()事件传播问题。创建的节点 只有在其父事件发生后,才会动态接收该事件 收到了。这将导致滑稽和停止播放 preventDefault无法解决此问题。要修复:添加行

如果(event.target!=this){return true;}

到父节点事件处理程序的顶部。这将阻止 当事件实际寻址到 子节点,并且(与return false不同)将事件传播到 目标节点


另一种方法是,仅当事件来自具有
.toggle
类的元素(或其子元素之一)时,才执行函数处理程序,而不是
.toggle\u组
元素本身

$(".toggle_group").on("click",".toggle",function(e){
    if (!$(e.target).is(".toggle")) return;

    ...
});

您是在子对象上使用.off()来执行此操作的,所以您是说具有继承事件侦听器的子对象应该使用off来禁用它们?是的,这是一种方法。停止播放是另一种方式。另一种方法是使用on()为子div创建一个事件侦听器,让它什么都不做。