我有一個通過AJAX調用自動保存其內容的元素。目前,每當內容改變自動保存功能被調用時。但是,我想限制這一點以減少服務器請求的數量。編輯下面的代碼的最佳方法是什麼,所以save()
每n秒鐘被調用一次?如何在JQuery中防止過多的函數調用
$("#editorInstance").contentChange(function() {
save();
});
我有一個通過AJAX調用自動保存其內容的元素。目前,每當內容改變自動保存功能被調用時。但是,我想限制這一點以減少服務器請求的數量。編輯下面的代碼的最佳方法是什麼,所以save()
每n秒鐘被調用一次?如何在JQuery中防止過多的函數調用
$("#editorInstance").contentChange(function() {
save();
});
如果你不介意的另一個庫,強調有throttle
method可以處理這個問題:
油門
_.throttle(function, wait)
創建並返回一個新的,節流的通過的版本函數,即反覆調用時,實際上只會實際調用原始函數,最多每等待毫秒。對速度限制事件有用,速度限制事件的發生速度比您可以跟上的要快。
var throttled = _.throttle(updatePosition, 100); $(window).scroll(throttled);
可以延遲功能的執行,使用的setTimeout()
var init;
$("#editorInstance").contentChange(function() {
init = setTimeOut(save, 60000); //After a minutes
});
//Do you forget to clear the timeout too
function save() {
clearTimeOut(init);
//Remaining function
}
或者,您可能希望禁用的編輯,正在保存時。
$("#editorInstance").contentChange(function() {
$(this).attr('disabled', true);
save();
$(this).removeAttr('disabled');
});
這是我會怎麼解決呢,
$("#editorInstance").contentChange(function() {
if(!window.saveTimeout)
window.saveTimeout = setTimeOut(save(), 60000);
else
clearTimeout(window.saveTimeout);
window.saveTimeout = setTimeOut(save(), 60000);
});
也許你應該添加一個'clearTimeout()'你添加一個新的'之前的setTimeout()'。 https://developer.mozilla.org/en/DOM/window.clearTimeout#Example – sissonb 2012-03-25 16:35:09
@sissonb,好的,我已經更新了答案。 :) – Starx 2012-03-25 16:41:12