jQuery的悬停延迟

jQuery的悬停延迟,jquery,jquery-hover,Jquery,Jquery Hover,我试图在下拉菜单的悬停效果中实现时间延迟。我试图使用setTimeout和下拉菜单在悬停时正确工作,但是我没有得到延迟。它只是瞬间发生的。下面是我的代码: $(document).ready(function(){ $("li.dropdown-hover").hover(hoverIn, hoverOut); }); function hoverIn(){ setTimeout(func1(this), 3000); } function hoverOut(){ s

我试图在下拉菜单的悬停效果中实现时间延迟。我试图使用setTimeout和下拉菜单在悬停时正确工作,但是我没有得到延迟。它只是瞬间发生的。下面是我的代码:

$(document).ready(function(){
    $("li.dropdown-hover").hover(hoverIn, hoverOut);
});

function hoverIn(){
    setTimeout(func1(this), 3000);
}

function hoverOut(){
    setTimeout(func2(this), 1000);
}

function func1(element) {
    $(element).find(".dropdown-menu-hover").css("display", "block");
}

function func2(element) {
    $(element).find(".dropdown-menu-hover").css("display", "none");
}

我对jQuery非常陌生,出于某种原因,我不希望使用任何外部插件,比如许多类似问题中建议的插件。有人能告诉我这里出了什么问题吗?

我相信您必须按如下方式向函数传递参数:

setTimeout(func1, 3000,this);
相对于

setTimeout(func1(this), 3000);

我相信您必须按如下方式向函数传递参数:

setTimeout(func1, 3000,this);
相对于

setTimeout(func1(this), 3000);

当您写入
setTimeout(func1(this),3000)
,您将立即调用
func1
函数。与此相同:

func1(this);
setTimeout(undefined, 3000);
相反,您希望传递
setTimeout
一个新函数,该函数将在分配的时间后运行

var self = this;
setTimeout(function() {
  func1(self);
}, 3000);

或者,您可以将
作为一个额外参数传递,如Richard B所示。

当您写入
设置超时时(func1(this),3000)
,您将立即调用
func1
函数。与此相同:

func1(this);
setTimeout(undefined, 3000);
相反,您希望传递
setTimeout
一个新函数,该函数将在分配的时间后运行

var self = this;
setTimeout(function() {
  func1(self);
}, 3000);

或者您可以像Richard B所示,将此作为一个额外参数传递。

您可以使用jQuery的默认函数
。如下所示:

$('.a').hover(function () {
    $('.b').delay(2000).fadeIn(200);
});

jsiddle:

您可以像这样使用jQuery的默认函数
。delay

$('.a').hover(function () {
    $('.b').delay(2000).fadeIn(200);
});

jsFiddle:

谢谢你的回答。不知何故,setTimeout无法访问“this”(它被视为窗口对象而不是“li”),因此我通过将其存储在变量中来解决这个问题。现在开始工作了:-)谢谢你的回答。不知何故,setTimeout无法访问“this”(它被视为窗口对象而不是“li”),因此我通过将其存储在变量中来解决这个问题。正在工作:-)