.delegate相当于jQuery 1.4.2中现有的.hover方法

我有一个使用.hover方法绑定到hover事件的事件处理程序,如下所示:

$(".nav li").hover(function () { $(this).addClass("hover"); }, function () { $(this).removeClass("hover"); }); 

需要注意的是,我需要处理程序中的两个函数来确保同步。 是否可以使用.delegate重写该函数,因为以下不起作用?

 $(".nav").delegate("li", "hover", function () { $(this).addClass("hover"); }, function () { $(this).removeClass("hover"); }); 

丰富

试试这种方法:

 $(".nav").delegate("li", "hover", function () { $(this).toggleClass("hover"); }); 

这取决于.nav不会通过AJAX或其他方式替换,因为这是事件处理程序所在的位置。 如果要更换它,则必须将代理附加到不会被替换的更高的祖先上。

还有一个小修正, $(".nav li").hover(function () {不使用.live()方法,即: $(".nav li").live('hover', function () {.hover()在代码运行时将事件直接绑定到元素…任何未来的元素都不会触发那个hover代码,即.live().delegate()不同的地方,它们可以工作未来的元素通过冒泡。

要添加/删除类,Nick的解决方案是完美的,因为jQuery提供了适当的toggleClass方法。

如果需要触发更复杂的函数,而这些函数没有相应的切换方法,可以通过测试事件类型来实现:

 $(".nav").delegate("li", "hover", function (event) { if(event.type == "mouseenter"){ $(this).find(".subDiv").slideDown(); }else{ $(this).find(".subDiv").slideUp(); } }); 

这适用于jQuery> = 1.4.3 – 旧版本使用mouseover而不是mouseenter