使用delegate()和hover()?

我有一个带有许多li项的ul元素:

  • ...

当用户将鼠标hover在li元素上时,我想在li上显示一些隐藏的按钮,当它们停止hover时,再次隐藏按钮。 试图使用委托:

 $("#myList").delegate("li", "hover", function () { if (iAmHovered()) { showButtons(); } else { hideButtons(); } }); 

上面的内容被称为hover和’un-hover’。 我如何区分它是休假还是进入?

另外,我从这个问题得到了这个样本: .delegate相当于jQuery 1.4.2中现有的.hover方法

尼克说:

这取决于[#myList]没有被AJAX或其他方式替换,因为那是事件处理程序所在的位置。

我确实替换#myList的内容,使用:

 $("#myList").empty(); 

会导致问题吗?

谢谢

您需要测试事件类型,如下所示:

 $("#myList").delegate("li", "hover", function ( event ) { if (event.type == 'mouseover') { showButtons(); } else { hideButtons(); } }); 

由于只有一个处理程序可以为两个事件运行,我们正在检查哪个事件被触发,并运行相应的代码。

而不是直接绑定到元素,它可以接受两个事件类型的两个处理程序。


编辑:请注意,从jQuery 1.4.3 ,使用带有.delegate().live() 'hover'时报告的事件类型不再是mouseover/mouseout (应该是)。 现在它将是mouseenter/mouseleave ,这似乎很愚蠢,因为它们是非冒泡的事件。

所以if()语句看起来像:

 if (event.type == 'mouseenter') { //... 

您可以声明处理程序函数,以便它关注事件参数,然后检查类型。