我正在使用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;
}
}
答案 0 :(得分:1)
是的,您可以使用clearTimeout取消超时。
此外,您需要设置一个时间戳变量,因此您的autoSaveForm
将检查自该时间戳以来是否还没有超过30分钟,并且可以继续保存表单。如果时间过去,只需使用return
停止执行,就不会设置下一个setTimeout
。
更好的方法是更改您的方法,只有在对表单进行任何更改后才能保存数据。您可以通过在表单输入上收听keyup
和change
事件来执行此操作。如果您担心自动保存功能会被频繁触发,您应该使其运行频率不超过至少几秒钟。这是通过节流函数完成的,其示例位于下划线库中:_.throttle
。
这里有一些代码:http://jsfiddle.net/yuraji/4pnbr4bd/ - 它仅根据用户输入进行更新,而且通常不会更新1秒。