执行具有滑动延迟的功能

时间:2010-11-21 14:59:41

标签: javascript jquery

假设我有一个html页面,其中列出了一些元素列表。有一个允许用户过滤元素的文本框。要更新显示的元素,我需要执行ajax调用以检索与过滤器值匹配的元素。我希望在过滤器文本框中输入最后一个字母两秒后执行ajax调用。我知道settimeout,但我希望第二个延迟是“滑动”,这意味着如果在两秒钟的延迟期内用户输入另一个字母,那么我想重置延迟。我该怎么办呢?

提前致谢。

1 个答案:

答案 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将导致我们尝试取消不再存在的计时器。我从来没有遇到过抱怨的浏览器,但是,我从来没有推过我的运气,或者......