2012-03-25 38 views
0

我有一個通過AJAX調用自動保存其內容的元素。目前,每當內容改變自動保存功能被調用時。但是,我想限制這一點以減少服務器請求的數量。編輯下面的代碼的最佳方法是什麼,所以save()每n秒鐘被調用一次?如何在JQuery中防止過多的函數調用

$("#editorInstance").contentChange(function() { 
    save(); 
}); 

回答

3

如果你不介意的另一個庫,強調有throttle method可以處理這個問題:

油門_.throttle(function, wait)

創建並返回一個新的,節流的通過的版本函數,即反覆調用時,實際上只會實際調用原始函數,最多每等待毫秒。對速度限制事件有用,速度限制事件的發生速度比您可以跟上的要快。

var throttled = _.throttle(updatePosition, 100); 
$(window).scroll(throttled); 
2

可以延遲功能的執行,使用的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'); 
}); 
+1

也許你應該添加一個'clearTimeout()'你添加一個新的'之前的setTimeout()'。 https://developer.mozilla.org/en/DOM/window.clearTimeout#Example – sissonb 2012-03-25 16:35:09

+0

@sissonb,好的,我已經更新了答案。 :) – Starx 2012-03-25 16:41:12

1

這是我會怎麼解決呢,

$("#editorInstance").contentChange(function() { 
    if(!window.saveTimeout) 
     window.saveTimeout = setTimeOut(save(), 60000); 
    else 
     clearTimeout(window.saveTimeout); 
     window.saveTimeout = setTimeOut(save(), 60000); 
}); 
相關問題