假设我有一个html页面,其中列出了一些元素列表。有一个允许用户过滤元素的文本框。要更新显示的元素,我需要执行ajax调用以检索与过滤器值匹配的元素。我希望在过滤器文本框中输入最后一个字母两秒后执行ajax调用。我知道settimeout
,但我希望第二个延迟是“滑动”,这意味着如果在两秒钟的延迟期内用户输入另一个字母,那么我想重置延迟。我该怎么办呢?
提前致谢。
答案 0 :(得分:3)
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
;否则,下一个keydown将导致我们尝试取消不再存在的计时器。我从来没有遇到过抱怨的浏览器,但是,我从来没有推过我的运气,或者......