Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/404.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript设置超时重置不为';行不通_Javascript_Settimeout_Reset_Cleartimeout - Fatal编程技术网

javascript设置超时重置不为';行不通

javascript设置超时重置不为';行不通,javascript,settimeout,reset,cleartimeout,Javascript,Settimeout,Reset,Cleartimeout,我试图在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)

我试图在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);
这段代码直接来自应用程序,正如我所解释的,它不会停止timout,但会启动另一个timout

有人能帮忙吗?
thnx prevance

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

  • 保存计时器的变量不是全局变量(或在持续的闭包中),因此无法从一个调用保存到下一个调用,因此当您执行
    clearTimeout(refresh)
    时,
    refresh
    变量不保存正确的值。在执行
    clearTimeout()
    之前,可以通过执行
    console.log(刷新)
    来检查这一点。如果这是您的问题,则
    刷新
    可能是
    未定义

  • 您意外地启动了多个计时器,因此您覆盖了
    刷新
    变量,而
    清除超时(刷新)
    仅停止最后一个计时器集,而不是较早的计时器集。在某些形式的代码中,最安全的做法是在启动新计时器之前,始终对之前的任何计时器执行
    clearTimeout()
    ,以确保尚未运行一个计时器,或者如果已经运行了一个计时器,则使用
    if
    语句检查可能更有意义


  • 如果您需要更具体的帮助,您将需要披露实际代码的更多细节,因为您上面的四行代码都在同一个范围内,没有您遇到的问题-因此,显然实际代码的内容比您披露的更多。

    如何清除settimeout的示例

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

    你怎么知道第一个计时器没有重置?A显示它应该可以工作。你这里的四行代码没有问题,所以我猜这实际上不是你的代码看起来的样子。如果您需要帮助,您必须向我们展示更多的实际代码。如果按照所示的顺序,直接从代码中复制(中间没有其他代码),则两者都不太可能。我猜OP是错的。你的答案是有用的(但只是猜测),但也要记住结束投票;-)这两种情况似乎都有可能,谢谢,我会设法解决的that@JaredFarrish-问题中的四行代码不可能完全有序,没有中间代码,因为最后两行代码是多余的。OP只需删除最后两行代码,即使保留了它们,也不会出现问题。我认为它们是从程序的不同部分复制而来。@JanDvorak-我宁愿在投票结束前要求进一步澄清。如果OP没有参与并澄清事情,我将投票结束。