e.stopPropagation()和jQuery.hover()
有没有办法让这两个一起工作或者我必须尝试使用mouseenter和mouseleave代替?
您可以将event.stopPropagation()
与.hover()
,但实际上您实际上正在使用带有.hover()
和mouseleave
。 如果为.hover()
提供1个函数,它将在两个事件上运行,如果提供2个函数,第一个是mouseenter
处理程序,第二个是mouseleave
处理程序。
然而,这可能不是你所追求的……因为当进入一个孩子时 , mouseenter
不会触发,这实际上是它存在的具体原因,当输入一个孩子时mouseout
将会触发。 您可以看到这里的演示没有区别,从上到下hover,注释和取消注释.stopPropagation()
,它没有区别……因为事件不会冒泡到父级。
但是,如果您使用mouseover
和mouseout
, 那么它会很重要,如下所示:
$("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()
,但很可能,它并不完全是你所追求的。