2017-03-12 5 views
1

を提出提出します。jQueryのフォームは、デフォルトのアクションを阻止し、その後、私は、HTMLのは、jQueryのを使用してイベントを提出するフォームをオーバーライドしています

$('#contact-form').submit(function(event) { 
    event.preventDefault(); 

    asyncValidationHere(function(valid) { 
     if(!valid) { return; } 

     // Turn off the custom form submit event handler now since valid 
     $('#contact-form').off('submit'); 

     // Submit (do the actual form post) 
     $('#contact-form').submit(); 
    }); 
}); 

を、私は、フォームが今まで投稿を見ていないですHowerver:私はいくつかの非同期検証を行った後Howerver私は再びフォームを送信ポストを強制したいです。それは$('#contact-form').off('submit')を呼び出しているようだし、$('#contact-form').submit()を送信しようとすると動作しません。

アイデア?

+0

'asyncValidationHere'コールバックが呼び出されていますか?もしそうなら、 'valid'はfalse-yかtruth-yですか? – Adam

答えて

1
$('#contact-form').on("submit", function(event) { 
    event.preventDefault(); 

    var that = this; // that is the form 

    asyncValidationHere(function(valid) { 
     if(!valid) { return; } 

     $(that).off("submit"); // to guarante the function won't be invoked 

     that.submit(); // submit the form 
    }); 
}); 

注:that.submit();は(jQuery.submitと混同しないように)ノード(フォーム)で呼び出され、それは(ここでMDN上のドキュメントである)フォームを送信します。

+0

'submit()'を呼び出すと、自分が望むものではないカスタムハンドラ関数の先頭に戻ることになります。この時点で、サブミット関数ハンドラに戻らずにサブミットしたいだけです。 – Justin

+0

@Justin No!サブミットは、jQueryオブジェクト上にないNode要素で呼び出されます。実際にはイベントをトリガーしていません。 –

+0

@brahimmahrir - 間違っています。ノード上で 'submit'を呼び出すと、jQueryを使ってアタッチされたイベントハンドラが起動します。それはなぜでしょうか? – Adam

0

async関数の中からsubmitイベントをトリガーして、それにいくつかの成功フラグを渡すことができます。次に、サブミットイベントのハンドラー内で、そのフラグが存在するかどうかに基づいてpreventDefaultを呼び出すことができます。次のようなものがあります:

関連する問題