Jquery帮我分析发生的事情:mouseover / mouseout ok但不hover/取消hover

我一直在研究一些代码,我在hover/unhover上触发代码。 然后我决定在focus/blur触发相同的代码。 通常只有hover/unhover ,我会使用通常的hover comma no unhover格式。 但这一次,因为我试图添加focus/blur ,我不得不使用绑定并使用this.bind与第二部分,如下所示:

 $.fn.gogogo = function (msg) { $(this).bind("hover focus", function(){ $("#screen").html(msg).show(); }); $(this).bind("unhover blur", function(){ $("#screen").html("").hide(); }); } 

问题在于,无论我做了什么, hover/unhover开始都没有。 我不得不像这样恢复mouseover/mouseout 。 除了单词hover/unhovermouseover/mouseout之外,代码是相同的

 $.fn.gogogo = function (msg) { $(this).bind("mouseover focus", function(){ $("#screen").html(msg).show(); }); $(this).bind("mouseout blur", function(){ $("#screen").html("").hide(); }); } 

我认为hover / unhover只是mouseover / mouseout的jquery抽象。 为什么这里的行为有所不同: hover/unhover会破坏我的代码,而mouseover/mouseout还可以?

谢谢。

没有叫做hover事件。

hover方法是一种便捷方法,它将事件处理程序绑定到mouseentermouseleave事件。

如果你打开jQuery源代码,你会发现hover方法的定义如下:

 hover: function(fnOver, fnOut) { return this.mouseenter(fnOver).mouseleave(fnOut); }, 

您应该绑定到mouseentermouseleave事件。


编辑mouseentermouseover之间的区别在于mouseenter (和mouseleave )不会冒泡。 这意味着如果鼠标移动到您绑定的元素中的任何元素(这可能不是您想要的),您将获得mouseover事件,而如果鼠标输入该元素本身,您将只获得鼠标中心事件。 有关示例,请参阅文档 。

没有“hover”事件。 这只是一个方便的例程。