我的页面上有一个计时器,间隔为10秒。它是使用setTimeout(“myWork()”,10000)创建的。它完美地运作。在某些基于某些条件的时间点,我清除此间隔并创建一个必须以1s间隔打勾的新间隔。
var tenSecTimer = 0;
if (myCondition)
{
clearTimeout(tenSecTimer);
tenSecTimer = setTimeout("myWork()", 1000);
}
整个过程适用于所有版本的IE和FireFox。当我在Chrome(6.0)中打开此页面时,在调用clearTimeout后,自动收报机停止工作。它永远不会识别1s计时器。
我最近缺少什么铬?
由于
答案 0 :(得分:1)
为什么不使用它?
var tenSecTimer = 0;
if (myCondition) {
clearTimeout(tenSecTimer);
tenSecTimer = setTimeout(function () {
myWork();
}, 1000);
}
注意:它传入一个函数,然后执行myWork函数。使用setTimeout或setInterval的字符串是不好的,因为它然后调用eval(这很慢,并且有其他问题)。
答案 1 :(得分:0)
我怀疑这会解决它但是你试过传递引用而不是要评估的字符串吗?
setTimeout( myWork, 1000)
答案 2 :(得分:0)
我不确定您的其余代码是什么样的,但最好不要使用setInterval()
代替setTimeout()
。签名模式是相同的,但setInterval会自动处理重复。
答案 3 :(得分:0)
不是答案,而是表现出相同行为的完整代码:
(function () {
var counter = 0;
function testCounter() {
if (counter === 2) {
clearInterval (timer);
timer = setInterval (myWork, 1000);
}
else if (counter === 5)
clearInterval (timer);
}
function myWork () {
document.body.innerHTML += ++counter + ' ' + Date () +'<br/>';
}
document.body.innerHTML += 'Starting ' + Date () +'<br/>';
var timer = setInterval (myWork, 10000);
setInterval (testCounter, 500);
}) ();
此代码显示:
Starting Thu Sep 30 2010 16:15:09 GMT+0200 (CEST)
1 Thu Sep 30 2010 16:15:19 GMT+0200 (CEST)
2 Thu Sep 30 2010 16:15:29 GMT+0200 (CEST)
并且没有了,如果我删除testCounter上的setInterval并在myWork中调用它,我得到以下内容:
Starting Thu Sep 30 2010 16:20:50 GMT+0200 (CEST)
1 Thu Sep 30 2010 16:21:00 GMT+0200 (CEST)
2 Thu Sep 30 2010 16:21:10 GMT+0200 (CEST)
3 Thu Sep 30 2010 16:21:11 GMT+0200 (CEST)
4 Thu Sep 30 2010 16:21:12 GMT+0200 (CEST)
5 Thu Sep 30 2010 16:21:13 GMT+0200 (CEST)
非常好奇......
答案 4 :(得分:0)
我想我已经解开了问题的奥秘。从韩的评论中得到提示,我意识到实际代码在做什么。我有一个1s时钟计时器,它产生清除10s计时器的条件,然后为“myWork”启动1s计时器。在回拨1s定时器被召唤之前,又发生了另一个时钟节拍。现在清除了等待“myWork”被调用的计时器。所以它几乎陷入了永无止境的循环。似乎Chrome的计时器变得太有效了:-)解决这个问题的关键是我将“myWork”的计时器设置为小于1秒,或者有一个状态机来确保计时器在它之前没有被清除已被执行。