フォーム送信ボタンをクリックすると、いくつかの関数を順番に呼び出す必要があります-
func1()-> func2()-> func3()...-> func7()->..。
これらの機能はすべて、ある種の検証/チェックを実行し、検証が失敗した場合は、ユーザーに確認ダイアログを表示します。ユーザーが確認すると、キュー内の次の関数が実行されます。
これらの関数のいずれかが、Ajaxリクエストの送信や、結果に応じてユーザーに確認ダイアログを表示するなどの非同期タスクを実行している可能性があります。
詳細
私は次の構造の非同期関数を持っています-
function preValidateUrls(evt)
{
evt.preventDefault();
$.ajax({
type: "POST",
url: posturl+"?"+params,
dataType: "json",
success: function(res)
{
//display some confirmation dialog
if(confirm(msg))
{
$("form#frmBanners").submit();
}
}
});
}
どうすればよいですか?
まず、このように定義された2つの同期関数がありました-
<form onsubmit="return func3()">
...
...
<input type="submit" onclick="return func1()"/>
</form>
func1()が最初に呼び出され、確認ダイアログが表示され、次にfunc2()..が表示されていました。
次に、非同期関数func2()(上記と同じ構造)を定義し、次のように呼び出しました-
$( "input#formsubmitbutton")。click(func2);
しかし、予想通り、これはfunc1()の確認を待ちません。
私が次のことが好きなら、関数
func2
は何度も呼び出されます-$('form#frmBanners')。submit(function(){return func2(); //これはpreValidateUrls()の後に呼び出されます});
これをクリーンな方法で行うにはどうすればよいので、明日、同期/非同期関数を間に追加する必要がある場合は、1か所で編集する必要があります。
func1() -> func2() -> func3() ... -> func7()
PS-JavaScriptでコールバック関数を使用する方法を知っています。