Javascript 如何等待一段时间,然后更改变量?

Javascript 如何等待一段时间,然后更改变量?,javascript,jquery,Javascript,Jquery,我有一个使用jquery的小代码,我想等待300毫秒,然后更改一个变量。我尝试设置超时,但它不起作用,它只是使变量立即发生更改 setTimeout(animationWait = 0, 300); (我在文档前面全局定义了animationWait)基本上,我要做的是等待一次单击结束,然后再进行另一次单击。所以我想我应该设置一个变量,然后等待300毫秒 $('#up-arrow').live('click', function(e) { if(animationWait ==

我有一个使用jquery的小代码,我想等待300毫秒,然后更改一个变量。我尝试设置超时,但它不起作用,它只是使变量立即发生更改

setTimeout(animationWait = 0, 300);
(我在文档前面全局定义了animationWait)基本上,我要做的是等待一次单击结束,然后再进行另一次单击。所以我想我应该设置一个变量,然后等待300毫秒

$('#up-arrow').live('click', function(e) {  

    if(animationWait == 0) {
        animationWait = 1;
        .... /* Code */
    }
}

因此,我需要在延迟运行代码后将animationWait再次更改为0。我尝试了很多东西,但仍然不起作用,有什么想法吗?

您使用setTimeout的方式不太正确。必须向其传递函数名或匿名函数

//anonymous function
setTimeout( function() { animationWait = 0 }, 300);

//or give it a function name
function change() { animationWait = 0; }
setTimeout(change, 300);

您使用setTimeout的方式不太正确。必须向其传递函数名或匿名函数

//anonymous function
setTimeout( function() { animationWait = 0 }, 300);

//or give it a function name
function change() { animationWait = 0; }
setTimeout(change, 300);

传递的参数应该是求值语句。对我来说,这很好:

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

传递的参数应该是求值语句。对我来说,这很好:

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

您是否尝试过使用jQuery函数

标准用例如下所示:

$('item').delay(300).delayedEffectFunction();
$("#someelement").animate({someproperty:"somevalue"},
                          300);

其中,
delayedEffectFunction()
是您想要延迟的虚构函数。

您尝试过使用jQuery函数吗

标准用例如下所示:

$('item').delay(300).delayedEffectFunction();
$("#someelement").animate({someproperty:"somevalue"},
                          300);

其中,
delayedEffectFunction()
是您想要延迟的虚构函数。

问题的答案是,
setTimeout()
希望第一个参数是函数引用—在别处声明的函数名或匿名函数。(或者一个字符串,但出于几个原因,使用字符串几乎总是错误的解决方案。)您的原样代码只是执行表达式
animationWait=0
,并将该表达式的结果(0)传递给
setTimeout()

因此,要通过
setTimeout()
执行单行代码,我建议将其包装在匿名函数中,并将该函数传递给
setTimeout()

但是,如果您使用jQuery制作动画,则其动画方法允许您在动画结束时传递要执行的回调函数,因此您可以在那里执行此类处理,而不是单独设置自己的超时。例如,如果动画是这样的:

$('item').delay(300).delayedEffectFunction();
$("#someelement").animate({someproperty:"somevalue"},
                          300);
然后,您可以添加一个回调函数,该函数将在该动画完成后调用:

$("#someelement").animate(({someproperty:"somevalue"},
                          300,
                          function(){ animationWait = 0; });
在我看来,这比单独的
setTimeout()
调用更简洁,但也更易于维护,因为只需在一个位置指定持续时间,而不必将自己的超时同步到动画


类似的语法也适用于其他jQuery方法,如
.fadeIn()
.hide()
,等等。有关更多信息和示例,请参阅。

您所问问题的答案是
设置超时()
要求第一个参数是函数引用—在别处声明的函数名或匿名函数。(或者一个字符串,但出于几个原因,使用字符串几乎总是错误的解决方案。)您的原样代码只是执行表达式
animationWait=0
,并将该表达式的结果(0)传递给
setTimeout()

因此,要通过
setTimeout()
执行单行代码,我建议将其包装在匿名函数中,并将该函数传递给
setTimeout()

但是,如果您使用jQuery制作动画,则其动画方法允许您在动画结束时传递要执行的回调函数,因此您可以在那里执行此类处理,而不是单独设置自己的超时。例如,如果动画是这样的:

$('item').delay(300).delayedEffectFunction();
$("#someelement").animate({someproperty:"somevalue"},
                          300);
然后,您可以添加一个回调函数,该函数将在该动画完成后调用:

$("#someelement").animate(({someproperty:"somevalue"},
                          300,
                          function(){ animationWait = 0; });
在我看来,这比单独的
setTimeout()
调用更简洁,但也更易于维护,因为只需在一个位置指定持续时间,而不必将自己的超时同步到动画


类似的语法也适用于其他jQuery方法,如
.fadeIn()
.hide()
,等等。有关更多信息和示例,请参阅@高兴-你为什么不发帖子作为回答?如果你这样做,我一定会投赞成票@mrtsherman我很懒,不在乎信誉点),但无论如何还是要感谢你)setTimeout(function(){animationWait=0;},300)@高兴-你为什么不发帖子作为回答?如果你这样做,我一定会投赞成票@Herman先生,我很懒,不在乎声誉积分),但无论如何,谢谢你)…或者传递了一个字符串。(我提到它只是为了完整性,因为它几乎总是错误的选择。)哦,上帝。我真不敢相信我没有加入一个函数。我真傻!谢谢……或者传了一条线。(我提到它只是为了完整性,因为它几乎总是错误的选择。)哦,上帝。我真不敢相信我没有加入一个函数。我真傻!谢谢