mouseover和mouseenter事件有什么区别?

我一直使用mouseover事件,但在阅读jQuery文档时,我发现了mouseenter。 他们似乎function完全一样。 两者是否有区别,如果是的话,我应该什么时候使用它们? (也适用于mouseout vs mouseleave)

你可以在jQuery doc页面上试试。 这是一个很好的小交互式演示,非常清晰,你可以亲眼看到。

简而言之,您会注意到当鼠标hover在某个元素上时,会发生鼠标hover事件 – 来自其子元素或父元素,但只有当鼠标从该元素之外移动到此元素时,才会发生鼠标input事件。

或者像mouseover()文档所说:

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

Mouseenter和mouseleave 不会对事件冒泡做出反应,而mouseover和mouseout则可以

这是一篇描述行为的文章 。

像这样的问题往往是真实的,Quirksmode有最好的答案 。

我会想象,因为jQuery的目标之一是使事情浏览器不可知论,使用任何事件名称将触发相同的行为。 编辑:谢谢其他post,我现在看到这不是这种情况

 $(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);}) }); 

在这里解释得很好

只有Chrome浏览器允许您在点击包含dynamic生成内容的链接时提供一个名称。 但是,当鼠标光标位于链接上时,可以生成内容,并将其作为DATAURI放入标准静态href中。 这使右键单击菜单中的“将链接另存为..”选项。

 function download_content(a, side) { a.innerHTML = "preparing content.."; var txt = "call a function to generate content"; var datauri = "data:plain/text;charset=UTF-8," + encodeURIComponent(txt); a.setAttribute('download', "chrome_let_you_suggest_a_name.txt"); a.setAttribute('href', datauri); a.innerHTML = "content ready."; } document.getElementById('my_a_link').addEventListener('mouseover', function() { download_content(this); }); <a id="my_a_link" href="#">save document</a>