mouseover和mouseenter事件之间有什么区别?


152

我一直使用该mouseover事件,但是在阅读jQuery文档时发现了mouseenter。它们的功能似乎完全相同。

两者之间有区别吗?如果是,我什么时候应该使用它们?
(也适用于mouseoutvs mouseleave)。

Answers:


117

您可以从jQuery文档页面尝试以下示例。这是一个不错的互动演示,非常清晰,您可以自己实际看到。

简而言之,您会注意到,当鼠标悬停在元素上时,该元素上会发生鼠标悬停事件-来自其子元素或父元素,但是仅当鼠标从该元素外部移至该元素时,才会发生鼠标进入事件。

或者mouseover()文档所述

[ .mouseover()]会因事件冒泡而引起许多头痛。例如,在此示例中,当鼠标指针移到Inner元素上时,将向该元素发送mouseover事件,然后再向上移动到Outer。这可能会在不合时宜的时候触发绑定的鼠标悬停处理程序。有关.mouseenter()有用的替代方法,请参见讨论。


40
mouseenter“仅当鼠标从父元素移动到元素时才会发生”,这不是真的。当鼠标从元素外部更改为元素内部时,将发生此事件。鼠标来自哪个元素都没有关系。的确,鼠标经常来自父级,但并非总是如此。例如,如果父母没有填充物或边框,则鼠标可以直接从祖父母那里进入,并且mouseenter仍会射击。实际上,它甚至可以从视口外部进入元素(如果元素恰好位于边缘),并且事件仍会触发。
callum 2012年

2
DEMO是最好的解释;)
Luckylooke 2014年

实际上,只需演示一下即可。
凯文·惠勒


4

像这样的问题通常是正确的,Quirksmode具有最佳答案

我可以想象,由于jQuery的目标之一是使事物与浏览器无关,因此使用任一事件名称都将触发相同的行为。编辑:感谢其他职位,我现在不是这种情况


0
$(document).ready(function() {
$("#outer_mouseover").bind
("Mouse Over Mouse Out",function(event){
console.log(event.type," :: ",this.id);})
$("#outer_mouseenter").bind
("Mouse enter Mouse leave",function(event){
console.log(event.type," :: ",this.id);})
 });


如果您的元素没有子元素,但是如果元素确实有子元素,那么这些对的行为就大不相同。简而言之,如果将鼠标传递到元素中,然后传递给它的子元素,则mouseover / mouseout都会触发,而只有mouseenter会触发,因为从技术上讲,鼠标仍在元素内。
2013年
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.