2016-11-11 21 views
2

我有下面的代碼,它可以檢測任何文本輸入到#search-box字段,然後立即運行搜索(如果大於2個字符):jQuery的 - 搜索的文本輸入 - 延遲,直到足月進入

$('#search-box').on('input', function() { 

    var term = $(this).val(); 
    if (term.length > 2) { 
     //execute search and display results 
    } 

}); 

雖然這看起來並不漂亮,例如,如果您輸入dollar,在「玩偶」之後會出現一大堆玩偶,然後一旦輸入dolla就會用美元代替。這可能會在瞬間發生。

我想要做的是確定用戶是否已完成搜索詞。在搜索之前是否可以等待一秒鐘或兩秒鐘?如果在等待期間用戶輸入另一個字母,它會重置時鐘?

+0

因此,基本上你需要如果用戶輸入dolla並且他想輸入美元,那麼我們將跳過所有請求,並且最終請求將是美元。當他完成鍵入美元,然後搜索請求將運行..? –

+0

是的!理想情況下,如果用戶停止輸入2秒鐘,請運行請求。否則,跳過請求。 – Lee

回答

2

您將不得不使用setTimeout()等待輸入。

var tim = ''; 
$('#search-box').on('input', function() { 
    clearTimeout(tim); 
    tim = setTimeout(my_func, 2000); //2000 means 2 seconds; 
}); 

function my_func() { 
    var term = $(this).val(); 
    if (term.length > 2) { 
     //execute search and display results 
    } 
} 

秒在ms,因此你也可以設置類似1500了一年半第二。

clearTimeout用於破壞tim中的值。在clearTimeout(tim)之後,tim變爲零,然後在#search-box的長度增加/減少之後開始。

+0

如果用戶鍵入「美元」,這個代碼是否會運行4次,只是延遲2秒?或者它會被打斷3次,只運行一次? – Lee

+0

您想要檢測輸入是否在字符串中包含'dollar'符號並且每次都運行您的自定義函數? –

+0

對不起,我選了一個可憐的字。想象一下,我輸入「HELLO」。代碼將運行3次:「HEL」,「HELL」和「HELLO」。我想避免這種情況,只有在等待2秒後才能運行。如果在擊鍵之間時間少於此時間,則重置時鐘。那有意義嗎? – Lee