说我有一个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/

10-11 13:37