2012-10-30 191 views
0

我建立一個自定義搜索引擎的網站和搜索是通過AJAX做了keyup事件,所以,當你開始輸入(如果你輸入兩個以上的字符和字符串修剪後)完成對服務器的AJAX調用。停止傳播

它完美,但有一個場景我在想,當你開始連續鍵入四個或者只要你想盡可能多的字符,會有儘可能多地調用您鍵入的字符。那麼,如果你輸入10個字符的話,那麼這將會產生很多請求。

在這種情況下,我在想,如果有停止一切的簡單方法是什麼時,會發生這樣的行爲之前開始,拿起搜索大功告成瘋狂打字後(:

+2

爲什麼不能簡單地通過Ajax延遲呼叫,直到他們沒有鍵入了0.5 anythning到1秒?然後,你可以簡單地取消'setTimeout'等 – Tejs

+0

您還可以看看'Autocomplete'插件jQuery的.. http://jqueryui.com/autocomplete/#remote –

回答

1

可以使用Underscore debounce爲THA噸。 使鍵調出事件調用不足的函數,這種方式下劃線將知道來調用你的函數。

+0

這個插件??? –

+1

@roasted好吧.. 。如果你想使用Underscore * only *,那麼你可以使用你的小startTimeout-wait-cancelTimeout邏輯,但是你做了兩件事:a)你正在編寫durty代碼(是的,啓動並取消超時不是*那*乾淨。) d b)你在浪費你的時間。下劃線可以幫助你在JS中的很多東西。看看這些文檔,你會看到你需要編寫的代碼少得多。 – alexandernst

+0

這種方法聽起來不錯,但我必須包括另一個庫只是爲了添加此功能(: – Roland

1

簡單地推遲。通過Ajax調用,直到他們沒有爲 0.5至1秒錄入任何然後,你可以簡單地取消的setTimeout等

- @Tejs

+0

這是我第一次,雖然太(:但是我希望確保沒有任何可以讓事情變得更容易和更好的奇特方法(: – Roland

+0

不是真的......在請求消失後你不能取消請求,所以你將不得不等待一段時間可以設想發送第一個請求,但是如果快速按下第二個按鍵,等到最後一個按鍵被按下0.5秒後發送下一個請求。 –

0

正如我們前面所講,這裏是某一個指定的延遲後執行功能相關的例子,如果方法被調用時,再次延遲尚未通過原來的超時被清零,一個新的重新設置。

這是一個乾淨的解決方案,它不需要jQuery的,只是改變用途。

How to delay the .keyup() handler until the user stops typing?