我有一个jQuery ajax,我使用setTimeout()
。有时,用户会在setTimeout()
启动之前多次触发ajax。
因此可以通过添加setTimeout()
来清除以前触发的clearTimeout()
的有效版本:
clearTimeout(time);
var time = setTimeout(function() {
$('#hello').fadeOut();
},2600);
或许我需要添加某种形式的全局变量?
答案 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;
答案 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);
}
}