.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 。