2012-05-31 138 views
2

我有一個jQuery的Ajax請求,我想調用文本輸入,所以我嵌入它內部keyup(function()。這工作正常。keyup(function())ajax請求延遲 - jQuery

$("#text_box").keyup(function() { 
//AJAX REQUEST 
}); 

但是,這有時會出現錯誤。當我輸入一些文本的速度非常快時,我得到輸入詞的結果,並省略了原始輸入詞的某些最後一個字母(可能是瀏覽器出現故障)。我希望在沒有任何輸入活動的情況下發送ajax請求,我的意思是,如果我輸入文本非常快並且休息一秒(意味着我輸入了輸入)。我怎樣才能做到這一點?

+0

幾乎相同的問題實際上已經被問已經_today_:http://stackoverflow.com/questions/10830972/user-idle-time-while-typing-in - 輸入 – lanzz

+0

你可以看到這個http://stackoverflow.com/questions/1909441/jquery-keyup-delay – Zernel

回答

6

聽起來好像你從以前的ajax調用得到結果。使用一個定時器setTimeoutclearTimeout

var timer = null; 

$("#text_box").keyup(function() { 
    if(timer) { 
    clearTimeout(timer); 
    } 

    timer = setTimeout(someFunction, someDelay); 
}); 

哪裏someFunction是超出你的Ajax調用和someDelay是你想要做呼叫前等待,在用戶輸入後,以毫秒的延遲功能。

2

由於您已經在使用jQuery,您可以使用Ben Aleman的debounce插件。從頁

// Bind the not-at-all debounced handler to the keyup event. 
    $('input.text').keyup(text_1); 

    // Bind the debounced handler to the keyup event. 
    $('input.text').keyup($.debounce(250, text_2)); // This is the line you want! 
1

OMG

實施例。對於有人誰將會在2014年搜索...

function sendAjax() { 
    setTimeout(
     function() { 
      $.ajax({ 
       url: "url.php", 
       type: "POST", 
       data: data, 
       success: function(data) { 
        $("#result").html(data); 
       } 
      }); 
     }, 2000); 
} 

<input onkeyup="function()"> 
+0

感謝您發佈一個答案兩年後,以保持線程uptodate ... – user3848987