javascript - 取消为一个 ID 设置的多个超时

标签 javascript timeout settimeout

我不太确定这个问题的机制,但我正在尝试将单个 setTimeout 设置为一个变量 ID,我可以使用 clearTimeout 轻松取消它。但是,如果 setTimeout 在 clearTimeout 之前被触发两次,事情就会变得古怪。

例子: http://www.w3schools.com/js/tryit.asp?filename=tryjs_settimeout2

点击“Try It”两次,然后点击“Stop the Alert”两次,设置超时的函数仍然被调用。同样,考虑到事件已保存到正在被覆盖的变量中,我不确定为什么 Try It 会触发该函数两次。

知道这里发生了什么吗?

最佳答案

正如 MCL 所解释的那样,您正在丢失对先前超时的引用,因为新的分配将覆盖它。

你可以做的是把超时值放到一个数组中:

var myTimer = [];

function myFunction () {
    myTimer.push(setTimeout(function(){alert("Hello")},3000));
}

function myStopFunction () {
    clearTimeout(myTimer.pop());
}

通过这种方式,您可以在单击Stop the alert 按钮时取消上次设置的超时。

现场演示 jsFiddle .

关于javascript - 取消为一个 ID 设置的多个超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17199498/

相关文章:

jquery验证插件远程查询-错误/失败处理

javascript - 在输入字段字母中延迟显示字母的文本

image - 加载图像并等待 image.complete 后再处理数据

javascript - 使用带有动画的 jquery 将 css 背景更改为随机背景

javascript - 如何向 cookie 添加事件监听器,以便在 cookie 更新或过期时发出通知

javascript - 处理错误时如何在 ember-data 中设置自定义响应 json

javascript - 两个脚本不能一起工作

git - Jenkins Git 全局超时更改

java - MYSQL超时

javascript - 是否有充分的理由将字符串传递给 setTimeout?