e.stopPropagation()和jQuery.hover()

有没有办法让这两个一起工作或者我必须尝试使用​​mouseenter和mouseleave代替?

您可以将event.stopPropagation().hover() ,但实际上实际上正在使用带有.hover()mouseleave 。 如果为.hover()提供1个函数,它将在两个事件上运行,如果提供2个函数,第一个是mouseenter处理程序,第二个是mouseleave处理程序。

然而,这可能不是你所追求的……因为当进入一个孩子时mouseenter不会触发,这实际上是它存在的具体原因,当输入一个孩子时mouseout 将会触发。 您可以看到这里的演示没有区别,从上到下hover,注释和取消注释.stopPropagation() ,它没有区别……因为事件不会冒泡到父级。

但是,如果您使用mouseovermouseout那么它会很重要,如下所示:

 $("li").mouseover(function(e) { $(this).addClass("red").parents().removeClass("red"); }).mouseout(function(e) { $(this).removeClass("red"); });​ 

现在我们有一个冒泡的问题,因为事件冒泡了,将类添加到我们刚刚删除的父级, 请在此处查看问题的演示 。 但是,如果我们使用.stopPropagation() 停止该泡泡,我们会得到所需的效果,如下所示:

 $("li").mouseover(function(e) { $(this).addClass("red").parents().removeClass("red"); e.stopPropagation(); }).mouseout(function(e) { $(this).removeClass("red"); });​ 

您可以在此演示中看到它的工作原理有何不同 。

简而言之: yes event.stopPropagation()适用于.hover() ,但很可能,它并不完全是你所追求的。