JavaScript関数は、上記の行の関数を待つことなく実行しますか?
-
19-09-2019 - |
質問
機能をフォーム送信ボタンにバインドしました。この関数をIFRAMEダイアログボックスをポップアップして、ユーザーインタラクションを待ち、次にフォームを(Ajax Postを介して)送信します。
しかし、私が見ている動作は、ダイアログがポップしますが、機能が実行され続け、ダイアログボックスの呼び出しがまだ返されていない場合でも、Ajax投稿を実行します。ダイアログ関数が戻るまで、コードの実行を停止する方法が必要です。
私は次のようなものを持っています:
submitForm: function () {
<call a function that pops up a dialog, doesn't return until user interacts>
new Ajax.Updater('dialogContainer', url, {
...........
}
});
return false;
}
これはJavaScriptの予想される動作だと思いますが、それを回避する方法がわかりません...
解決
ブラウザ内のJavaScriptが順次実行されるため、明らかにiframeダイアログボックスを起動するための呼び出し そうではありません ユーザーインタラクションを待ち、すぐに返します。私の推測では、ダイアログボックスをポップアップするために使用しているライブラリには、代わりにユーザーアクションに基づいて実行される何らかのコールバック関数があります。だからあなたはあなたを動かすだけです new Ajax.Updater(....);
コールバック関数へのコード。
他のヒント
JavaScriptの基本的な知識に基づいて、ダイアログボックスがコードとは独立して実行されている限り、それは通常の動作だと思います(コードと呼ばれるコード)。
ダイアログボックスにはJavaScriptが実行されていますか?ある場合は、パラメーター(必要なコードを実行するコールバック)として関数を渡すことができると思います。
Ajaxを介して最初の関数を呼び出すべきだと思います。そして、あなたはプロトタイプを使用していると思います。
ajax.requestおよびajax.updaterオブジェクトにoncompleteコールバック関数があります。 oncomplete機能では、2番目の関数を実行できます。
お気に入り
oncomplete:function(){new ajax.updater( 'dialogContainer'、url、{..........}}); }
ターゲットWebクライアントがInternet Explorerのみである場合、window.showmodaldialogを使用できます。親ウィンドウにJavaScriptスレッドをブロックする素晴らしい特性があります。
ShowModaldialogはFirefoxで実装されていますが、Firefoxで機能がブロックしているかどうかはわかりません。