2012-05-13 84 views
1
$(function(){ 
    $("input[type=text]").keypress(function(){ 
     $("#loader").load("saveinputtodatabase.php", {...}); 
    }); 
}); 

這對我的代碼正常工作。每次用戶在輸入上鍵入內容時,它都會將數據保存在數據庫中。但我知道這對服務器來說不公平,因爲它會多次加載許多相同的文件,從而導致帶寬使用超過它應該的數量。JQuery:無需按提交按鈕即可提交數據?

只有當用戶按下某個鍵後過了10秒鐘,我如何才能使它加載「saveinputtodatabase.php」?

回答

2

您可以使用setTimeoutclearTimeout

$(function(){ 
    var timeout = 10000; // 10 seconds 
    var tmt = null; 
    $("input[type=text]").keypress(function() { 
    if (tmt) clearTimeout(tmt); 
    tmt = setTimeout(function() { 
     $("#loader").load("saveinputtodatabase.php", {...}); 
    }, timeout); 
    }); 
}); 
0
$(function(){ 
    $("input[type=text]").keypress(function(){ 
     var t=setTimeout(function(){ 
      $("#loader").load("saveinputtodatabase.php", {...}) 
     },10000); 
    }); 
}); 
+0

它不會執行問題。請求的數量保持不變,所有這些都只是延遲。 –

1
var timeout; 
$('input[type=text]').keypress(function() { 
    if(timeout) { 
     clearTimeout(timeout); 
     timeout = null; 
    }  
    timeout = setTimeout(somefunc, 10000) 
}); 
function somefunc() { 
    $("#loader").load("saveinputtodatabase.php", {...}); 
} 
0

試試這個

$(function(){ 
    $("input[type=text]").keypress(function(){ 
    save();   
}); 
}); 
function save(){ 
setTimeout($("#loader").load("saveinputtodatabase.php", {...}),10000) 
} 
+0

它沒有做什麼被問到。請求的數量保持不變,所有這些都只是延遲。 –

0

查閱這些underscore.js功能:

http://documentcloud.github.com/underscore/#throttle

創建並返回傳遞函數 的一個新的限制版本,該函數在重複調用時,實際上只會在每等待幾毫秒時最多調用一次原始的 函數。適用於速度限制事件發生得比您能夠保持的速度更快的 。

http://documentcloud.github.com/underscore/#debounce

創建並返回傳遞函數 將推遲執行,直到後等待的毫秒,因爲它被調用最後一次已 過去的一個新的版本去抖。用於執行 行爲,只有在輸入停止後纔會發生。 例如:渲染Markdown註釋的預覽,在窗口停止調整大小後重新計算 佈局,等等。

0
$('textarea').on('keyup', _.throttle(_.debounce(function() { 
$.ajax(...); 
}, 2000), 60000)); 

爲用戶停止輸入至少2秒這會盡快救你的數據,但不超過每分鐘一次。結帳underscore.js以獲取更多信息