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

.delegate相当于jQuery 1.4.2中现有的.hover方法,jquery,event-handling,hover,delegates,Jquery,Event Handling,Hover,Delegates,我使用.hover方法将事件处理程序绑定到悬停事件,如下所示: $(".nav li").hover(function () { $(this).addClass("hover"); }, function () { $(this).removeClass("hover"); }); 需要注意的是,我需要处理程序中的两个函数来确保同步。是否可以使用.delegate重写函数,因为下列操作不起作用 $(".nav").delegate("li", "hover", functio

我使用.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");
});
Rich

尝试以下方法:

$(".nav").delegate("li", "hover", function () {
    $(this).toggleClass("hover");
});
这取决于
.nav
不会通过AJAX或其他方式被替换,因为这是事件处理程序所在的位置。如果要替换它,则必须将代理附加到未被替换的更高祖先上


还有一个小的修正,
$(“.nav li”).hover(function(){
没有使用
.live()
方法,即:
$(.nav li”).live('hover',function(){
.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。

非常尴尬。盲目地假设我正在转换.live方法而不是.hover方法,眼睛今天显然没有正确聚焦。因此+1。关于连接到父级,可能会被编程替换。我没有“未意识到限制,并且已附加到绑定时不一定存在的父项,没有问题。@kim3er-使用当前方法,它们必须在绑定时存在,否则选择器将找不到/绑定任何内容:)如果您当前的方法有效,那么我发布的委托方法也应该试一试,如果您还有其他问题,请告诉我。对不起,我指的是.delegate方法,而不是.hover(悬停在最后一句中)。同样,您是正确的。委托方法需要附加到静态元素,这在您考虑时非常有意义。感谢您的帮助。关于原始问题。我将保留.hover方法,因为目前似乎没有使用.delegate的直接替换方法。