2010-11-21 70 views
2

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

在此先感谢。

回答

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将导致我们尝试取消一个不存在的计时器。我从来没有见过一个抱怨的浏览器,但后来,我从来没有推动我的运气,要么...

+0

+1,非常感谢:-) – 2010-11-21 15:04:04

+0

只要它让我接受。 – 2010-11-21 15:05:22

+0

@Klaus :-)不用担心,很高兴帮助。 – 2010-11-21 15:08:34