我不知道为什么我的代码不起作用。请帮忙!
$('nav').mouseout(setTimeout(function() {
$(this).removeClass('subm')
}, 1000));
没有setTimeout是正常的工作。
答案 0 :(得分:2)
setTimeout(...)
。它返回新挂起超时的id号。超时仅在此处注册并调用一次。你的代码执行就像这样:
setTimeout(function() {
$(this).removeClass('subm')
}, 1000);
// = 2
$('nav').mouseout(2);
你需要传递.mouseout()一个每次调用setTimeout的函数。您还需要修复this
引用,该引用在setTimeout回调中是不同的。这应该解决这两个问题:
$('nav').mouseout(function() {
var self = this;
setTimeout(function() {
$(self).removeClass('subm')
}, 1000);
});
答案 1 :(得分:2)
在javascript中,与大多数其他语言一样,当你这样做时:
variable = some_function();
您将函数的返回值传递给变量。同样,当你这样做时:
a_function(another_function());
您将另一个函数的返回值作为参数传递给函数。
这在javascript,C,PHP,Ruby甚至Fortran中都是一样的。
所以,当你这样做时:
$('nav').mouseout(setTimeout(..));
您将setTimeout
的返回值作为参数传递给mouseout
。 setTimeout
会返回一个可以在clearTimeout
中使用的数字。所以你基本上是这样做的:
$('nav').mouseout(a_number);
你想要的是传递一个函数:
$('nav').mouseout(function(){setTimeout(..)});
或者,如果您发现难以阅读,请执行此操作:
function handleMouseOut () {
setTimeout(...);
}
$('nav').mouseout(handleMouseOut); // note we're passing a function here
// not calling it