Answers:
mouseleave事件与mouseout事件的处理方式不同。如果在此示例中使用mouseout,则当鼠标指针移出Inner元素时,将触发处理程序。这通常是不受欢迎的行为。另一方面,mouseleave事件仅在鼠标离开绑定元素时才触发其处理程序,而不是其后代。因此,在此示例中,当鼠标离开Outer元素而不是Inner元素时触发处理程序。
有时候会有mouseout
比更好的选择mouseleave
。
例如,假设您创建了一个要显示在上元素旁边的工具提示mouseenter
。您setTimeout
可以防止工具提示立即弹出。您清除了mouseleave
使用时的超时,clearTimeout
因此如果鼠标离开工具提示将不会显示。这将在99%的时间内起作用。
但是,现在让我们说您附加了工具提示的元素是带有click
事件的按钮,并且还假设该按钮使用a confirm
或alert
box 提示用户。用户单击按钮,然后alert
触发。用户按下它的速度足够快,以至于您的工具提示没有机会弹出(到目前为止非常好)。
用户按下alert
“确定”按钮,鼠标离开元素。但是由于浏览器页面现在处于锁定状态,因此只有在按下OK按钮之后,才会触发javascript,这意味着您的mouseleave
事件将不会触发。用户按“确定”后,将弹出工具提示(这不是您想要的)。
mouseout
在这种情况下使用将是适当的解决方案,因为它将触发。
mouseout
在这种情况下会被解雇吗?浏览器会不会仍然处于锁定状态mouseout
吗?
jQuery API文档:
mouseout
由于事件冒泡,此事件类型可能会引起很多麻烦。例如,在此示例中,当鼠标指针移出Inner元素时,将向该元素发送mouseout事件,然后再向上滚动到Outer。这可能会在不适当的时间触发绑定的mouseout处理程序。有关有用的替代方案,请参见.mouseleave()的讨论。
所以mouseleave
是一个自定义事件,其目的是因为上述原因。