jQuery的mouseout()和mouseleave()有什么区别?


Answers:


101

mouseleave事件与mouseout事件的处理方式不同。如果在此示例中使用mouseout,则当鼠标指针移出Inner元素时,将触发处理程序。这通常是不受欢迎的行为。另一方面,mouseleave事件仅在鼠标离开绑定元素时才触发其处理程序,而不是其后代。因此,在此示例中,当鼠标离开Outer元素而不是Inner元素时触发处理程序。

资料来源:http//api.jquery.com/mouseleave/


1
mouseover vs. mouseenterjsfiddle.net/hejdav/945pv53h/3(等效于mouseout和mouseleave)
hejdav

当看到两种方法都有效并且它们之间的区别对我有用时,上面的解释会变得更加清晰。
invinciblemuffi

15

有时候会有mouseout比更好的选择mouseleave

例如,假设您创建了一个要显示在上元素旁边的工具提示mouseenter。您setTimeout可以防止工具提示立即弹出。您清除了mouseleave使用时的超时,clearTimeout因此如果鼠标离开工具提示将不会显示。这将在99%的时间内起作用。

但是,现在让我们说您附加了工具提示的元素是带有click事件的按钮,并且还假设该按钮使用a confirmalertbox 提示用户。用户单击按钮,然后alert触发。用户按下它的速度足够快,以至于您的工具提示没有机会弹出(到目前为止非常好)。

用户按下alert“确定”按钮,鼠标离开元素。但是由于浏览器页面现在处于锁定状态,因此只有在按下OK按钮之后,才会触发javascript,这意味着您的mouseleave事件将不会触发。用户按“确定”后,将弹出工具提示(这不是您想要的)。

mouseout在这种情况下使用将是适当的解决方案,因为它将触发。


5
你能解释为什么mouseout在这种情况下会被解雇吗?浏览器会不会仍然处于锁定状态mouseout吗?
user31782 '16

10

jQuery API文档:

mouseout

由于事件冒泡,此事件类型可能会引起很多麻烦。例如,在此示例中,当鼠标指针移出Inner元素时,将向该元素发送mouseout事件,然后再向上滚动到Outer。这可能会在不适当的时间触发绑定的mouseout处理程序。有关有用的替代方案,请参见.mouseleave()的讨论。

所以mouseleave是一个自定义事件,其目的是因为上述原因。

http://api.jquery.com/mouseleave/


3

事件Mouseout将在鼠标离开选定元素时以及鼠标离开其子元素时触发。

当鼠标指针仅离开所选元素时,事件Mouseleave元素将触发。

参考:W3School

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.