如何在JQuery中防止过多的函数调用

如何在JQuery中防止过多的函数调用,jquery,ajax,Jquery,Ajax,我有一个元素,它通过AJAX调用自动保存其内容。当前,只要内容发生更改,就会调用autosave函数。但是,我想限制一下,以减少服务器请求的数量。编辑以下代码的最佳方法是什么,这样save()每n秒调用一次 $("#editorInstance").contentChange(function() { save(); }); 可以使用setTimeOut()延迟函数的执行 或者,您可能希望在保存编辑器时禁用它 $("#editorInstance").contentChange(fun

我有一个元素,它通过AJAX调用自动保存其内容。当前,只要内容发生更改,就会调用autosave函数。但是,我想限制一下,以减少服务器请求的数量。编辑以下代码的最佳方法是什么,这样
save()
每n秒调用一次

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

可以使用setTimeOut()延迟函数的执行

或者,您可能希望在保存编辑器时禁用它

$("#editorInstance").contentChange(function() {
    $(this).attr('disabled', true);
    save();
    $(this).removeAttr('disabled');
});

可以使用setTimeOut()延迟函数的执行

或者,您可能希望在保存编辑器时禁用它

$("#editorInstance").contentChange(function() {
    $(this).attr('disabled', true);
    save();
    $(this).removeAttr('disabled');
});

如果您不介意另一个库,下划线有一个可以处理此问题的:

油门
\油门(功能,等待)

创建并返回传递函数的新的限制版本,该版本在重复调用时,每等待毫秒最多只调用一次原始函数。用于限制发生速度快于您所能跟上的事件的速率

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

如果您不介意另一个库,下划线有一个可以处理此问题的:

油门
\油门(功能,等待)

创建并返回传递函数的新的限制版本,该版本在重复调用时,每等待毫秒最多只调用一次原始函数。用于限制发生速度快于您所能跟上的事件的速率

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

我就是这样解决的

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

我就是这样解决的

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

在添加新的
setTimeout()
之前,您可能应该添加一个
cleartimout()
。在添加新的
setTimeout()
之前,您可能应该添加一个
cleartimout()