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

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

mouseleave事件与处理事件冒泡的方式不同。 如果在这个例子中使用了mouseout,那么当鼠标指针移出Inner元素时,处理程序将被触发。 这通常是不受欢迎的行为。 另一方面,mouseleave事件只在鼠标离开绑定元素时触发其处理程序,而不是后代。 所以在这个例子中,当鼠标离开Outer元素而不是Inner元素时,触发器被触发。

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

令人惊讶的是,有很多结果@ http://www.google.com/search?sourceid=chrome&ie=UTF-8&q=jquery+mouseleave+mouseout+difference

有时候mouseout是比mouseleave更好的select。

例如,假设您已经创build了一个工具提示,您希望在mouseenter的元素旁边显示该提示。 你使用setTimeout来防止工具提示立即popup。 使用clearTimeout清除mouseleave上的超时,所以如果鼠标离开工具提示将不会显示。 这将工作99%的时间。

但现在让我们说,你有一个工具提示附加的元素是一个click事件的button,让我们也假设这个button提示用户一个confirmalert框。 用户点击button, alert触发。 用户按下它足够快,你的工具提示没有机会popup(到目前为止这么好)。

用户按下alert框确定button,鼠标离开该元素。 但是由于浏览器页面现在处于locking状态,只有按下确定button后才会触发JavaScript,这意味着您的mouseleave事件不会被激发。 用户按下确定后,工具提示将popup(这不是你想要的)。

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

jQuery API文档:

mouseout

由于事件冒泡,这种事件types会引起许多头痛。 例如,在这个例子中,当鼠标指针移出Inner元素时,一个mouseout事件将被发送到那个元素上,然后涓涓细stream到Outer。 这可以在不合时宜的情况下触发绑定的鼠标处理程序。 请参阅.mouseleave()的讨论,以获得有用的select。

所以mouseleave是一个自定义的事件,这是由于上述原因而devise的。

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