【问题标题】:I somehow can't stop my setTimeout() loop我不知何故无法停止我的 setTimeout() 循环
【发布时间】:2017-10-01 23:49:22
【问题描述】:

所以我有一个主要的function,它每 2 到 17 秒触发另一个function,但是当我尝试用clearTimeout() 停止它时,它会继续并完全忽略clearTimeout()

所以这是我的主要功能:

var itemTimer;
var stopTimeout;

function major (){
    var itemTime = Math.floor(Math.random() * 15000) + 2000;
    itemTimer = setTimeout('items()', itemTime);    
    stopTimeout = setTimeout('major()',itemTime);
}

这是我的停止超时功能:

function stopTimer() {
    clearTimeout(itemTimer);
    clearTimeout(stopTimeout);
}

感谢您的帮助

【问题讨论】:

  • 您在哪里以及如何拨打stopTimer

标签: javascript function settimeout cleartimeout


【解决方案1】:

您的setTimeout() 被错误调用;您正在调用 items()major()。相反,您需要将它们作为要调用的函数传递。

不要将括号传递给参数,也不要将参数括在引号中。

代替:

itemTimer = setTimeout('items()', itemTime);    
stopTimeout = setTimeout('major()',itemTime);

您正在寻找:

itemTimer = setTimeout(items, itemTime);
stopTimeout = setTimeout(major, itemTime);

希望这会有所帮助! :)

【讨论】:

  • 虽然setTimeout(items, itemTime) 是首选语法,但这两种设置超时的方法或多或少是等效的。这不是问题。
  • @NichtEric -- 太棒了!一旦您确认这可以解决您的问题,请不要忘记点击投票按钮下方的灰色复选标记mark it as accepted - 这会将其从“未回答的问题”队列中删除,并为这两个问题授予声誉提问者和问题回答者。在提出任何问题后 15 分钟,您就可以做到这一点。当然,这么说,您没有义务将我(或其他任何人)的答案标记为正确,尽管将问题标记为已解决有助于保持事情顺利进行:)
  • 好的,谢谢你不知道,因为我对这个网站比较陌生:D
【解决方案2】:

我认为您的超时正在累积。只要major 被调用一次,变量itemTimerstopTimeout 就会重新分配一个新的超时引用。因此将无法清除之前设置的超时。如果是这种情况,它应该很容易解决。只需调用stopTimer 作为major 中的第一条语句:

function major (){
    stopTimer();
    var itemTime = Math.floor(Math.random() * 15000) + 2000;
    itemTimer = setTimeout('items()', itemTime);    
    stopTimeout = setTimeout('major()',itemTime);
}

【讨论】:

    猜你喜欢
    • 2012-01-16
    • 1970-01-01
    • 2019-01-25
    • 2017-12-23
    • 2022-01-20
    • 1970-01-01
    • 1970-01-01
    • 2022-08-18
    • 1970-01-01
    相关资源
    最近更新 更多