2
说我有一个html页面,其中显示了一些元素的列表。有一个文本框允许用户过滤元素。要更新显示的元素,我需要执行ajax调用以检索与过滤器值匹配的元素。我想要在过滤器文本框中键入最后一个字母两秒钟后执行ajax调用。我知道settimeout
,但我希望两秒延迟是“滑动”,这意味着如果在两秒延迟期内用户键入另一个字母,那么我想重置延迟。我会怎么做呢?执行滑动延迟的功能
在此先感谢。
说我有一个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
当定时器功能运行;否则,下一个keydown将导致我们尝试取消一个不存在的计时器。我从来没有见过一个抱怨的浏览器,但后来,我从来没有推动我的运气,要么...
+1,非常感谢:-) – 2010-11-21 15:04:04
只要它让我接受。 – 2010-11-21 15:05:22
@Klaus :-)不用担心,很高兴帮助。 – 2010-11-21 15:08:34