2012-05-05 33 views
4

所以我呼籲一個文本框,在jQuery的每keyuppaste事件AJAX請求:油門AJAX請求對KEYUP和粘貼活動

$("#server-label").bind("keyup paste", function() { 
    $.ajax()... 
}); 

問題是這樣的是,如果用戶太多的AJAX請求迅速按下鍵。在調用AJAX請求之前,等待用戶停止輸入一些內容(比如說500毫秒)的最佳方式是什麼?基本上不會發出AJAX請求,直到沒有按鍵或粘貼事件觸發500ms。

謝謝。

回答

11

嘗試使用setTimeout()timer VAR來跟蹤它:

var t; 
$("#server-label").on("keyup paste", function() { 
    clearTimeout(t); 
    t = setTimeout(function() { 
     $.ajax({/*[...]*/}); 
     //... 
    }, 500); 
}); 

您也可以使用油門或debounce但我不認爲,如果你換一個函數內部代碼它會是必要的對象或字符串傳遞給setTimeout()函數。

+0

@Anon downvoter,如果您對我的解決方案有問題,請隨時發表評論什麼不起作用,因此可以改進。 –

+0

這是一個好的開始,但是這個解決方案意味着500ms的延遲;-(你也應該比較事件是什麼時候「最後」被觸發 –

+1

@ThomasDecaux是的,這將執行一個ajax請求在500ms怠速時按照OP 。你可以根據你的需要調整這個計時器,比如說200-300ms。不知道我是否按照你最後一次被觸發部分的意思行事 - 「clearTimeout」會清除最後一次排隊的超時,以防尚未處理,否則無副作用。 –