2017-03-23 44 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