你在做什麼叫做「去抖」。當用戶開始輸入時,當計時器開始倒計時時,會發生去抖動。如果他們在定時器完成之前輸入更多輸入,則定時器復位並再次開始倒計時。只有當定時器完成後,AJAX調用纔會生效。在這種情況下,200毫秒的延遲是研究表明大多數人認爲仍然感覺反應迅速。
但是,如果您確實希望在用戶輸入時輸入結果,您需要的卻是所謂的「節流」。節氣門類似於去抖動,除了它定期觸發,而不是等待輸入停止。要構建一個你仍然有計時器,但是,每當用戶輸入更多的輸入時,你都不會重置它。相反,您將使用布爾值來跟蹤是否輸入了新輸入。當計時器結束時,它會檢查布爾值是否爲真,如果是,則將其設置爲false並重新啓動計時器倒計時。
通過跟蹤AJAX調用是否已經發生,您可以改進任一方法。在這兩種情況下,如果定時器用完並且布爾跟蹤(如果正在進行調用)爲真,則重新啓動計時器。
debounce和throttle都已在幾個實用程序庫(如lodash)中可用。您可以使用它們來包裝現有的事件處理程序。
var myInputChangeHandler = function() {
// do ajax call
};
// throttled handler will only be called every 200 ms...
var throttled = _.throttle(myInputChangeHandler, 200);
// ...no matter how many times this event fires
jQuery('input[type=text]').on('change', throttled);
不要忘記,以紀念這個答案正確 – Soviut
我能做到這一點的明天 – LunielleDev