2010-11-21 68 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