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');
});
「clearTimeout(timeoutId);」で自動保存を無効にしたようですか、間違っていますか?送信ハンドラ内で自動保存を無効にしようとしますか? – David
XHRリクエストが提出された後に処理中である可能性があります。あなたの '$。post 'をグローバル変数に設定し、' deleted = true'と同じ場所で 'myVar.abort()'を呼び出して保留中のドラフト保存要求をキャンセルしてみてください。 – sheng
@David 'deleted' varがこれを処理します – sheng