当我悬停在子元素上时,父元素的事件也被调用。我该怎么阻止它?
<div class="parent">
<div class="child">
</div>
</div>
$(".parent").on("mouseover", function(){//Shouldnt fire on child})
$(".child").on("mouseover", function(){//Child function})
发布于 2015-01-10 23:39:02
只需捕获子事件并停止其传播,如下所示:
$(".child").on("mouseover", function(e){
e.stopPropagation();
//Child function})
发布于 2015-01-10 23:37:48
您可以在子节点中使用stopPropagation
来防止父处理程序收到事件通知:
event.stopPropagation();
发布于 2015-01-11 00:09:19
如果您不希望子节点体验父级mouseover事件处理程序的涓滴效应,那么在子级mouseover事件的处理程序中,需要使用jQuery的event.stopPropagation()。下面的示例说明了它的用法:
$(".parent").on("mouseover", function(){
alert('parents r family');
});
$(".child").on("mouseover", function( e ){
e.stopPropagation();
alert('kids r children');
});
如果您使用像e.stopPropagation()
这样的代码来处理子函数的mouseover事件处理程序,但是忽略了为该函数提供参数e,代码将不会按您的意愿执行。jQuery版本1.6.4到2.1.0以及jQuery edge都会出现这种情况。
jQuery文档指定必须提供一个参数来保存事件对象,如下所示(强调我的):
$( "p“).click(function( event ){ // Do });
在“怪异”演示中,子程序的处理函数没有任何参数。因此,其代码中的第一条语句使用假事件对象,毫不奇怪,在子事件处理程序无法执行其剩余代码时,父处理程序的传播完全不被抑制。由于未能为子函数提供一个参数来保存事件对象,函数代码中的事件对象就不存在,控制台的日志确认了这一事实:
未定义的ReferenceError: e。
当然,未定义的对象e与其方法一样是完全无用的。此错误足以阻止子处理程序的其余处理程序执行。
https://stackoverflow.com/questions/27884962
复制