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创建一个事件侦听器,让它什么都不做。