-2

我正在尝试在javascript中重置计时器但拒绝工作,它只是启动另一个功能而不停止前一个功能。

time = ((A[Qused].length)*5000) + 10000
refresh = window.setTimeout(function(){timeup(tc,chosen);}, time);
window.clearTimeout(refresh)
refresh = window.setTimeout(function(){timeup(tc,chosen);}, time);

这段代码直接来自应用程序,正如我解释的那样,它不会停止超时,但它会启动另一个。

有人可以帮忙吗?提前谢谢

4

2 回答 2

1

您没有在真实上下文中向我们展示您的大部分代码,但未成功清除前一个计时器的一些常见原因是:

  1. 保存计时器的变量不是全局变量(或在持续存在的闭包中),因此无法从一次调用到下一次调用,因此当您执行时clearTimeout(refresh),该refresh变量不会保持正确的值。您可以通过在执行console.log(refresh)之前执行 a 来检查这一点clearTimeout()。如果这是您的问题,那么refresh可能是undefined.

  2. 您不小心启动了多个计时器,因此您正在覆盖您的refresh变量,并且您clearTimeout(refresh)只会停止最后一个计时器集,而不是之前的计时器。在某些形式的代码中,最安全的做法是clearTimeout()在启动新计时器之前始终对任何先前的计时器执行操作,以确保您还没有运行一个计时器,或者if如果您已经有一个正在运行,则只检查一个语句可能更有意义.

如果您需要更具体的帮助,您将需要披露您的实际代码的更多详细信息,因为您上面的四行代码按照确切的顺序并且都在同一范围内没有您遇到的问题 - 所以显然还有更多比您披露的实际代码。

于 2014-03-30T15:55:34.620 回答
0

如何清除 settimeout 的示例

var myVar;

function myFunction()
{
  myVar = setTimeout(function(){alert("Hello")},3000);
}

function myStopFunction()
{
  clearTimeout(myVar);
}
于 2014-03-30T15:56:47.157 回答