清除已激活的超时

时间:2018-01-31 14:39:34

标签: javascript jquery

我有一个jQuery ajax,我使用setTimeout()。有时,用户会在setTimeout()启动之前多次触发ajax。

因此可以通过添加setTimeout()来清除以前触发的clearTimeout()的有效版本:

clearTimeout(time);

var time = setTimeout(function() {
   $('#hello').fadeOut();
},2600);

或许我需要添加某种形式的全局变量?

2 个答案:

答案 0 :(得分:1)

根据您正在做的事情,您可能希望在第一次点击时执行操作并忽略后续点击,直到第一次点击完成,或者您希望重置计时器并且仅在最后一次点击后2.6秒执行操作。 ..我举两个例子,让我知道是否需要澄清......



(function() {
  let time, btn = document.getElementById('btn1');
  btn.onclick = function() {
    if (time) clearTimeout(time);
    time = setTimeout(function() {
      alert("what the stink?!");
    }, 2600);
  }
})();

(function() {
  let time, btn = document.getElementById('btn2');
  btn.onclick = function() {
    if (time) return;
    time = setTimeout(function() {
      alert("what the butts?!");
      time = null;
    }, 2600);
  };
})();

<button id=btn1>Only reacts to last press</button>
<button id=btn2>Only reacts to first press</button>
&#13;
&#13;
&#13;

答案 1 :(得分:0)

这是一个简单的例子,它回答了你的问题并说明了关闭的奇迹。

document.getElementById('inputBox').addEventListener('keyup', Delay());

function MyFunction(){
  console.log(this.value);
}

function Delay(){
    var timer = 0;
    return function(){
    clearTimeout(timer);
    timer = setTimeout(MyFunction.bind(this), 1000);
  }
}

https://jsfiddle.net/tlynch001/7y3vnfjn/