说我有一个html页面,其中显示了一些元素的列表。有一个文本框,允许用户过滤元素。要更新显示的元素,我需要执行ajax调用来检索与过滤器值匹配的元素。我希望在过滤器文本框中键入最后一个字母后两秒钟执行ajax调用。我知道settimeout
,但是我希望两秒延迟是“滑动”的,这意味着如果在两秒延迟时间内用户键入另一个字母,那么我想重置延迟。我将如何处理?
提前致谢。
最佳答案
setTimeout
返回一个句柄(一个数字),可用于通过clearTimeout
取消计时器,因此您的keydown事件处理函数可以执行以下操作:
var timerHandle = 0;
function handler() {
// Clear the previous timer if it hasn't already happened
if (timerHandle != 0) {
clearTimeout(timerHandle);
}
// Call `tick` in 2 seconds or so
timerHandle = setTimeout(tick, 2000);
}
function tick() {
// The timer has gone off, clear the handle
timerHandle = 0;
}
请注意,当运行计时器功能时,我们正在清除
timerHandle
。否则,下次按下键盘将导致我们尝试取消不再存在的计时器。我从来没有遇到过抱怨的浏览器,但是后来,我也从来没有碰过运气。关于javascript - 执行具有滑动延迟的功能,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4238495/