web-dev-qa-db-ja.com

同じHTMLページで使用される2つのJavaScriptファイルで2つのjQuery $(document).ready呼び出しがあるとどうなりますか?

JQueryについて質問があります$(document).ready

2つのJavaScriptファイルを含むHTMLページがあるとします。

_<script language="javascript" src="script1.js" ></script>
<script language="javascript" src="script2.js" ></script>
_

これらのスクリプトファイルの両方で、次のように$(document)があるとします。

内部script1.js

_$(document).ready(function(){
    globalVar = 1;
})
_

内部script2.js

_$(document).ready(function(){
    globalVar = 2;
})
_

今私の質問は:

  1. これらの準備ができたイベント関数の両方が発生しますか?
  2. はいの場合、両方のドキュメントが同時に準備されるため、それらが起動される順序はどうなりますか?
  3. このアプローチはお勧めですかOR理想的には$(document).readyは1つだけにする必要がありますか?
  4. すべてのブラウザー(IE、FFなど)で実行順序は同じですか?

ありがとうございました。

35
testndtv
  1. これらの準備ができたイベント関数の両方が発生しますか?

はい、どちらも解雇されます。

  1. 両方のドキュメントが同時に準備されるので、それらが起動される順序は何ですか?

それらが表示される方法(上から下)。これは、準備完了イベントが1回発生し、すべてのイベントリスナーが次々に通知されるためです。

  1. このアプローチはお勧めですかOR理想的には$(document).readyは1つだけにする必要がありますか?

そのようにしても大丈夫です。それらを同じブロックコードに含めることができれば、管理が容易になりますが、それだけです。 更新:言うのを忘れていたようですが、これを複数のファイルで実行すると、JavaScriptコードのサイズが大きくなります。

  1. すべてのブラウザー(IE、FFなど)で実行順序は同じですか?

はい、jQueryはブラウザー間で正規化を行うためです。

34
Shef

ここを参照してください: jQuery-複数の$(document).ready(function(){}); を使用するのは悪いことであり、ここ: Tutorials:Multiple $(document).ready()

  1. はい
  2. アタッチの順序。 jQuery内部readyListオブジェクトDeferredを維持します。
  3. それは部分的には好みの問題です。 oneレディハンドラーを使用すると、multiple(つまり、インクルードされたファイルごとに1つ)により、コードがはるかにモジュール化されます(つまり、.jsファイルをインクルードまたは削除して、独自のレディハンドラーを提供およびバインドすることができます)。
  4. はい-アタッチの順序。
9
jensgram

現在の任意のブラウザーで、スクリプトが含まれる順に実行される両方のハンドラーと、2番目のスクリプト参照の後にglobalVar2になることを期待できます。

2
Dave Ward