在它发生之前取消/杀死window.setTimeout()

Tor*_*ups 181 javascript jquery

例如,我有几个地方使用下面的行来清除状态.我有一些停留10秒或更长时间,如果用户点击动作,可能会以不正确的时间间隔发生.

window.setTimeout(function() { removeStatusIndicator(); }, statusTimeout);
Run Code Online (Sandbox Code Playgroud)

是否可以通过一些jQuery或JavaScript代码取消或终止它,所以我没有这个过程?

Dio*_*ane 348

var timer1 = setTimeout(function() { removeStatusIndicator(); }, statusTimeout);

clearTimeout(timer1)
Run Code Online (Sandbox Code Playgroud)

  • window只是全局命名空间的名称,因此它不是必需的(对于setTimeout或clearTimeout). (101认同)
  • 由于setTimeout的第一个参数是一个函数而'removeStatusIndicator()'是一个函数,因此你可以通过以下方式获得性能(并且输入更少):var timer1 = setTimeout(removeStatusIndicator,statusTimeout); 这避免了嵌套函数调用. (5认同)
  • 和`window.clearTimeout(timer1)`在Node.js中不起作用.要么只使用`clearTimeout(timer1)`或`global.clearTimeout(timer1)` (5认同)
  • 请忽略@user1944491所说的——这是错误的。传递给 setTimeout 的函数不会被调用两次。Chrome 没有改变它的行为,更有可能的是你通过调用函数 `setTimeout( func(), 0 )` 而不是 `setTimeout( func, 0 )` 搞砸了 (4认同)
  • @user1944491 不会有双重调用:注意@HarleyDave写了`setTimeout(removeStatusIndicator, ...)`,即函数`removeStatusIndicator`没有被调用。 (3认同)