我不知道为什么我的代码不工作。请帮忙!为什么setTimeout不工作在我的代码?我需要可行的代码)
$('nav').mouseout(setTimeout(function() {
$(this).removeClass('subm')
}, 1000));
没有setTimeout是正常工作。
我不知道为什么我的代码不工作。请帮忙!为什么setTimeout不工作在我的代码?我需要可行的代码)
$('nav').mouseout(setTimeout(function() {
$(this).removeClass('subm')
}, 1000));
没有setTimeout是正常工作。
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);
});
在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
您正在调用setTimeout,而不是将它传递给mouseout。 – slebetman 2014-09-26 23:26:50
想想'mouesout'预期的值和'setTimeout'返回的值。也想想这个回调里面会有什么'this'。 – 2014-09-26 23:27:49