2017-03-23 56 views
0

通过使用定时器自动保存更改的电子邮件形式,这工作正常。但是表单提交后似乎会出现一场竞赛,尤其是IE11。提交后,我们希望在提交之前关闭自动保存。我们有生产实例,我们可以同时调用服务器来保存草稿以及提交表单。在提交时关闭表格自动保存

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'); 
}); 
+0

它看起来像你用'clearTimeout(timeoutId);'禁用自动保存,或者我误会了吗?你在提交处理程序中的哪个位置尝试禁用自动保存? – David

+1

提交后可能正在等待XHR请求。尝试将'$ .post'设置为全局变量,然后在与'deleted = true'相同的位置调用'myVar.abort()'来取消任何待处理的草稿保存请求。 – sheng

+0

@David'deleted' var处理这个 – sheng

回答

2

当您提交表单时停止计时器。

$('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); 
}); 
+0

啊,错过了。 +1用于注意计时器。因此,最佳解决方案将是清除超时以及取消任何挂起的XHR。 – sheng