Javascript 在提交时关闭表单自动保存
通过一个用于撰写电子邮件的表单,我们可以使用计时器自动保存更改。这个很好用。但提交表单时似乎存在竞争,尤其是IE11。在提交时,我们希望在提交之前关闭自动保存。在生产环境中,我们会同时调用服务器来保存草稿和提交表单Javascript 在提交时关闭表单自动保存,javascript,jquery,Javascript,Jquery,通过一个用于撰写电子邮件的表单,我们可以使用计时器自动保存更改。这个很好用。但提交表单时似乎存在竞争,尤其是IE11。在提交时,我们希望在提交之前关闭自动保存。在生产环境中,我们会同时调用服务器来保存草稿和提交表单 var timeoutId; var deleted = false; // setup a call to onFormChange when a change happens $('form input, form textarea').on('input propertych
var timeoutId;
var deleted = false;
// setup a call to onFormChange when a change happens
$('form input, form textarea').on('input propertychange change', function() {
onFormChange();
});
function onFormChange() {
// call saveDraft 1 second after changes happen
clearTimeout(timeoutId);
timeoutId = setTimeout(function() {saveDraft();}, 1000);
}
// saveDraft saves the current form state in the draft.
function saveDraft() {
if (deleted == true) {
// don't save because we're done
return;
}
var fromval = $("#from").val();
var subject = $("#subject").val();
var body = $("#body").val();
//
// upload is done here using $.post()
//
}
$('form').submit(function(e){
// stop saving drafts when we do a submit
deleted = true;
if( $(this).hasClass('form-submitted') ){
e.preventDefault();
return;
}
$(this).addClass('form-submitted');
});
$('form').submit(function(e){
// stop saving drafts when we do a submit
deleted = true;
if( $(this).hasClass('form-submitted') ){
e.preventDefault();
return;
}
$(this).addClass('form-submitted');
clearTimeout(timeoutId);
});
提交表单时停止计时器
var timeoutId;
var deleted = false;
// setup a call to onFormChange when a change happens
$('form input, form textarea').on('input propertychange change', function() {
onFormChange();
});
function onFormChange() {
// call saveDraft 1 second after changes happen
clearTimeout(timeoutId);
timeoutId = setTimeout(function() {saveDraft();}, 1000);
}
// saveDraft saves the current form state in the draft.
function saveDraft() {
if (deleted == true) {
// don't save because we're done
return;
}
var fromval = $("#from").val();
var subject = $("#subject").val();
var body = $("#body").val();
//
// upload is done here using $.post()
//
}
$('form').submit(function(e){
// stop saving drafts when we do a submit
deleted = true;
if( $(this).hasClass('form-submitted') ){
e.preventDefault();
return;
}
$(this).addClass('form-submitted');
});
$('form').submit(function(e){
// stop saving drafts when we do a submit
deleted = true;
if( $(this).hasClass('form-submitted') ){
e.preventDefault();
return;
}
$(this).addClass('form-submitted');
clearTimeout(timeoutId);
});
提交表单时停止计时器
var timeoutId;
var deleted = false;
// setup a call to onFormChange when a change happens
$('form input, form textarea').on('input propertychange change', function() {
onFormChange();
});
function onFormChange() {
// call saveDraft 1 second after changes happen
clearTimeout(timeoutId);
timeoutId = setTimeout(function() {saveDraft();}, 1000);
}
// saveDraft saves the current form state in the draft.
function saveDraft() {
if (deleted == true) {
// don't save because we're done
return;
}
var fromval = $("#from").val();
var subject = $("#subject").val();
var body = $("#body").val();
//
// upload is done here using $.post()
//
}
$('form').submit(function(e){
// stop saving drafts when we do a submit
deleted = true;
if( $(this).hasClass('form-submitted') ){
e.preventDefault();
return;
}
$(this).addClass('form-submitted');
});
$('form').submit(function(e){
// stop saving drafts when we do a submit
deleted = true;
if( $(this).hasClass('form-submitted') ){
e.preventDefault();
return;
}
$(this).addClass('form-submitted');
clearTimeout(timeoutId);
});
看起来您使用
clearTimeout(timeoutId)禁用了自动保存代码>,还是我弄错了?您在提交处理程序中的什么位置尝试禁用自动保存?提交后可能会处理挂起的XHR请求。尝试将$.post
设置为全局变量,然后在deleted=true
的同一位置调用myVar.abort()
以取消任何挂起的草稿保存请求。@David thedeleted
var处理此问题。看起来您使用clearTimeout(timeoutId)禁用了自动保存功能代码>,还是我弄错了?您在提交处理程序中的什么位置尝试禁用自动保存?提交后可能会处理挂起的XHR请求。尝试将$.post
设置为全局变量,然后在deleted=true
的同一位置调用myVar.abort()
,以取消任何挂起的草稿保存请求。@David thedeleted
var处理此问题,错过了此问题+1用于通知计时器。因此,最佳的解决方案是清除超时并取消任何挂起的XHR。啊,错过了+1用于通知计时器。因此,最佳解决方案是清除超时并取消任何挂起的XHR。