我有一些使用jquery的代码,我想等待,300ms,然后更改变量。我尝试了setTimeout但它不起作用,它只是让变量立即改变。
setTimeout(animationWait = 0, 300);
(我在文档中全局定义了animationWait)基本上我要做的就是等待点击结束,然后才能完成另一次点击。所以我想我会设置一个变量然后等待300毫秒,
$('#up-arrow').live('click', function(e) {
if(animationWait == 0) {
animationWait = 1;
.... /* Code */
}
}
因此我需要在延迟运行代码后再将animationWait更改回0。我已经尝试了很多东西,但它还没有用,有什么想法吗?
答案 0 :(得分:5)
您没有正确使用setTimeout。必须传递函数名或匿名函数。
//anonymous function
setTimeout( function() { animationWait = 0 }, 300);
//or give it a function name
function change() { animationWait = 0; }
setTimeout(change, 300);
答案 1 :(得分:0)
您传递的参数应该是评估声明。对我来说这很好用:
var animationWait = -1; //Initially set the value to -1
alert(animationWait); //alert to see the value
setTimeout("animationWait = 0", 300); //Setting the value to 0
setTimeout("alert(animationWait)", 400); //Alert after 400 ms
答案 2 :(得分:0)
您是否尝试过使用jQuery函数delay()
?
标准用例看起来像这样:
$('item').delay(300).delayedEffectFunction();
delayedEffectFunction()
是一个假装函数,你想要延迟。
答案 3 :(得分:0)
问题的答案是setTimeout()
期望第一个参数是函数引用 - 在别处声明的函数的名称或匿名函数。 (或者是字符串,但由于使用字符串的几个原因几乎总是错误的解决方案。)您的代码只是执行表达式animationWait = 0
并将该表达式(0)的结果传递给setTimeout()
。
因此,要通过setTimeout()
执行单行代码,我建议将其包装在匿名函数中并将该函数传递给setTimeout()
:
setTimeout(function(){ animationWait = 0; }, 300);
但是,如果你使用jQuery做动画,它的动画方法允许你传递一个回调函数,以便在动画结束时执行,所以你可以在那里进行这种类型的处理,而不是独立设置你自己的超时。例如,如果您的动画是这样的:
$("#someelement").animate({someproperty:"somevalue"},
300);
然后你可以添加一个在这个动画完成后调用的回调函数:
$("#someelement").animate(({someproperty:"somevalue"},
300,
function(){ animationWait = 0; });
在我看来,它比单独的setTimeout()
调用更整洁,但它也更容易维护,因为只需要在一个地方指定持续时间,而不是必须将自己的超时同步到动画。
类似的语法适用于其他jQuery方法,如.fadeIn()
,.hide()
等。有关详细信息和示例,请参阅.animate()
doco。