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提示用户一个confirm
或alert
框。 用户点击button, alert
触发。 用户按下它足够快,你的工具提示没有机会popup(到目前为止这么好)。
用户按下alert
框确定button,鼠标离开该元素。 但是由于浏览器页面现在处于locking状态,只有按下确定button后才会触发JavaScript,这意味着您的mouseleave
事件不会被激发。 用户按下确定后,工具提示将popup(这不是你想要的)。
在这种情况下使用mouseout
将是适当的解决scheme,因为它会触发。
jQuery API文档:
mouseout
由于事件冒泡,这种事件types会引起许多头痛。 例如,在这个例子中,当鼠标指针移出Inner元素时,一个mouseout事件将被发送到那个元素上,然后涓涓细stream到Outer。 这可以在不合时宜的情况下触发绑定的鼠标处理程序。 请参阅.mouseleave()的讨论,以获得有用的select。
所以mouseleave
是一个自定义的事件,这是由于上述原因而devise的。