2014-01-17 66 views
1

的HTML代碼:<input id="goTOxQuestion">
JS代碼:發送XHR當用戶「完成」的輸入,而不是KEYUP

$("#goTOxQuestion").keyup(function(){ 
    // send a XHR 
}) 

如果輸入爲12345,它會發送XHR五倍。
實際上,我只想在完成輸入時執行XHR。我的意思是,在500毫秒沒有輸入(無keydown事件),而不是它失去faocus
我的不完整的解決方案:

var isOver = false; 
$("#goTOxQuestion").keyup(function(){ 
    //... 
    setTimeout(function(){ 
     if(isOver){ 
      //send a XHR 
     } 
    },500); 
}) 
$("#goTOxQuestion").keydown(function(){ 
    isOver = false; 
}) 
+0

你可以使用的onblur –

+0

如果從其他網頁彈出顯示則有可能是輸入的模糊事件會觸發哪些不是預期的行爲。如果你想讓你的用戶對你的網站有很好的體驗,你需要使用一個按鈕。 –

+0

@阿倫我不這樣做,對不起。 – ZhouMengkang

回答

1

您可以使用setTimeout和clearTimeout的組合是這樣的:

var hTimeout; 
$("#goTOxQuestion").keyup(function() { 
    if (hTimeout) { 
     clearTimeout(hTimeout); 
    } 
    hTimeout = setTimeout(function() { 
     // ajax code here 
    }, 500); 
}); 

Demo here

注意的順序AJAX請求完全不能保證,你將最終獲得「比賽條件」 。


關於你的評論,這裏是從我的腦海頂部的解決方案:

// initialize global counter 
var xhrCount = 0; 
// increment counter when you create an XHR 
xhrCount++; 
// pass the current value of this 
// variable to the success function 
// http://stackoverflow.com/q/1552941/87015 
$.ajax("/url/", (function (myStamp) { 
    console.log("creating success callback #" + myStamp); 
    return function() { 
     if (myStamp === xhrCount) { 
      console.log("firing success handler"); 
     } else { 
      console.log("suppressing success handler"); 
     } 
    } 
})(xhrCount)); 
+0

請注意,AJAX請求完成的順序不能保證....我需要最後request.thanks – ZhouMengkang

+0

檢測請求是否是最後一個請求成爲皮塔餅。您可以嘗試(i)聲明全局計數器(ii)在創建AJAX時遞增計數器(iii)在成功函數中,將當前請求的編號與全局計數器進行比較。 –

0
$(document).on('blur',"#goTOxQuestion",function(){ 
    // send a XHR 
}); 
1

使用的setTimeout則:

$("#goTOxQuestion").keyup(function(){ 
    setTimeout(function(){ 
     // send a XHR 
    }, 1000); 
}) 
+0

這裏是相應的小提琴http://jsfiddle.net/m4ABn/8/它的工作原理,但最後幾次提醒戒備:S –

+0

@DanielFath薩爾曼已經是一個完美的答案。 – Jai

1

change event看起來非常適合您的需求:

$("#goTOxQuestion").change(function(){ 
    // send a XHR 
}) 

輸入失去焦點時會被觸發輸入值被實際修改。

+0

事件被推遲到元素失去焦點。我希望當我完成輸入時發送請求,而不是失去焦點。 – ZhouMengkang

+0

你能解釋一下'我什麼時候完成了輸入'嗎? – LeGEC

+0

哦,對不起,沒有輸入(keydown事件)在500毫秒 – ZhouMengkang