我有以下带有setTimeout函数的jquery代码将变量设置为false但它永远不会工作且变量始终保持为真
for( var ff = 0; ; ff++)
{
if( dif == 0){
break;
}
if (locked){
// locked = false;
setTimeout( function(){ locked = false; },2000);
}
else{
LeftKeyPressed();
locked = true ;
setTimeout( function(){ locked = false; },3000);
dif--;
}
}
任何人都可以帮助我们在将锁定变量设置为true两秒后将其设置为false。
答案 0 :(得分:0)
Okey,因为他们的要求是我不知道你究竟想要什么,但这是我能做到的最接近的: http://jsfiddle.net/db6gJ/
它调用方法三次,并在锁定为false或true时进行更改以执行您想要执行的操作。此外,它不会阻止事件循环(具有无限循环),因此您的站点可以在timeOut调用正在运行时执行其他任务。
javascript代码也在这里:
var locked = true,
timesMax = 3,
timeCurrent = 0;
var inputLoop = function() {
var delay = 2000;
if(locked) {
// Do something when locked is true
console.log("locked is true!");
locked = false;
} else {
// Do something when locked is false
console.log("locked is false!");
locked = true;
delay = 3000;
}
timeCurrent++;
// call again after delay, but call only 3 times
if(timeCurrent < timesMax) {
setTimeout(inputLoop, delay);
}
};
// Launch it
inputLoop();
如果你查看你的javascript控制台(在chrome:右键单击 - &gt; inspect element - &gt;控制台),它应该打印:
locked is true!
locked is false!
locked is true!
另外需要注意的是:原始代码完成后会alert('out');
,但说实话,代码会在其他地方继续执行,而您的“inputLoop”代码没有执行任何其他操作等待回调运行,它应该是这样的。
如果您不想知道上次调用的时间,您可以修改上一行之一:
// call again after delay, but call only 3 times
if(timeCurrent < timesMax) {
setTimeout(inputLoop, delay);
} else {
// Last call in this method
console.log('done!');
}