如何在30分钟后停止自动保存?

时间:2015-10-21 20:56:04

标签: javascript jquery ruby-on-rails kill-process autosave

我正在使用jQuery自动保存表单。此表单将每1分钟保存一次数据。但是,如果用户将该浏览器打开一天,我不想垃圾邮件数据库。所以如果没有变化或浏览器已打开30分钟,我想杀死自动保存选项。

无论如何我可以杀死这个自动保存功能?

$("form input").on("input propertychange change", function() {

  var start = $.now();

  setTimeout(autoSaveForm(start), 10000);
});

function autoSaveForm(start) {
  var uuid = $("#uuid").html();
  $.ajax({
    type: "POST",
    url: "trailers/" + uuid + "/save-draft",
    data: $("form").serialize(),
    success: function() {
    }
  });

  if ($.now() - start <= 600000) {
    setTimeout(autoSaveForm(start), 60000);
  }
  else {
    return;
  }
}

1 个答案:

答案 0 :(得分:1)

是的,您可以使用clearTimeout取消超时。

此外,您需要设置一个时间戳变量,因此您的autoSaveForm将检查自该时间戳以来是否还没有超过30分钟,并且可以继续保存表单。如果时间过去,只需使用return停止执行,就不会设置下一个setTimeout

更好的方法是更改​​您的方法,只有在对表单进行任何更改后才能保存数据。您可以通过在表单输入上收听keyupchange事件来执行此操作。如果您担心自动保存功能会被频繁触发,您应该使其运行频率不超过至少几秒钟。这是通过节流函数完成的,其示例位于下划线库中:_.throttle

这里有一些代码:http://jsfiddle.net/yuraji/4pnbr4bd/ - 它仅根据用户输入进行更新,而且通常不会更新1秒。