2009-03-20 7 views
0

ページが読み込まれたときに多くのJavaScript計算を使用するページがあります。これは、実行される計算の数に応じて、ページを数分間ロックすることができます。すべてのJavascriptの実行が終了した後にイベントが発生する

ページロード時にjqueryモーダルボックスを開くことができます。計算機能が起動したら、モーダルボックスを閉じる必要があります。

表示された直後に箱が閉じている問題。私が使用しているコードはここにあります:

// In page startup functions 
$(document).ready(function() { 
    // Initialise Modal 
    $('#dialog').jqm({ modal: true }); 
    // Show Modal box 
    $('#dialog').jqmShow(); 
    // Call all the startup functions and then hide the modal box 
    // once they have all completed. 
    StartUpCall((function() { $('#dialog').jqmHide(); })()) 
}); 

すべてのjavascriptが完了するとjQueryが発生するイベントはありますか?それが私にとって一番の賞です。

編集:私はjqModalを使用しています - http://dev.iceburg.net/jquery/jqModal/

答えて

0

を私はあなたの質問を理解し、タイトルも混乱していることを確認していません。計算が同期して実行されることを確かめますか? Ajaxコールを使用していますか? 「はい」の場合は、計算が終了する前に非表示呼び出しが実行されます。

とにかく、jQueryはカスタムイベントをサポートしています。カスタムイベントは、作成してプログラムでトリガーできます。たとえばlinkをご覧ください。これはあなたの状況のた​​めのエレガントな解決策になります。イベントとともにパラメータを送ることもできるので、モーダルダイアログのステータスを簡単に更新することもできます。

+0

タイトルを変更しました。私はそれがより明確であることを望む。私はajaxを使用していません。 –

1

グローバル変数とコールバック関数を使用します。グローバル変数は、カウンタまたは文字列の配列のいずれかです。各計算の始めに、カウンタをインクリメントするか、配列に一意の文字列を追加し、各計算の最後にカウンタを減らすか、一意の文字列を削除し、counter == 0またはarray.lengthをチェックする関数を呼び出します== 0、あなたはあなたのダイアログを隠します。

0

モーダルダイアログをポップアップした後、setTimeout()を使用してプロセッサを大量に使用するコードを呼び出します。非表示はそのコードの最後になければなりません(呼び出し元のコードではなく、プロセッサを大量に使用するコード)。 setTimeoutの遅延には0を使用できます。

「ブラウザが応答しない」アラートを表示する前に、スクリプトの実行時間を許容するブラウザの許容範囲がブラウザによって異なることに注意してください。あなたは、あなたの計算をsetTimeoutによって起動されたチャンクに分解しなければならないかもしれません。 IIRC、IE6(これは厄介な遅いJSを持ち、問題を複雑にする)は非常に迅速にタイムアウトします。

関連する問題