jQuery-複数の$(document).ready…?


359

質問:

2つのJavaScriptファイルをリンクし、両方とも$(document).ready関数を使用するとどうなりますか?一方が他方を上書きしますか?または両方$(document).readyとも呼ばれますか?

例えば、

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.1/jquery.min.js"></script>

<script type="text/javascript" src="http://.../jquery1.js"></script>

<script type="text/javascript" src="http://.../jquery2.js"></script>

jquery1.js:

$(document).ready(function(){
    $("#page-title").html("Document-ready was called!");
});

jquery2.js:

$(document).ready(function(){
    $("#page-subtitle").html("Document-ready was called!");
});


両方の呼び出しを1つにまとめることがベストプラクティスであると確信して$(document).readyいますが、私の状況では不可能です。


回答:


351

すべてが実行され、最初に呼び出されたときに最初に実行されます!!

<div id="target"></div>

<script>
  $(document).ready(function(){
    jQuery('#target').append('target edit 1<br>');
  });
  $(document).ready(function(){
    jQuery('#target').append('target edit 2<br>');
  });
  $(document).ready(function(){
    jQuery('#target').append('target edit 3<br>');
  });
</script>

デモあなたは、彼らがお互いを置き換えるものではありません見ることができるように

また、私が言及したいことの1つ

これの代わりに

$(document).ready(function(){});

あなたはこのショートカットを使うことができます

jQuery(function(){
   //dom ready codes
});

66
またはさらに短い$(function(){// dom ready code}); api.jquery.com/ready
davehale23

217
$(function(){//何かを行う});を見たことを覚えておいてください 初めて、Googleの説明はどれほど難しかったですか。$(document).readyは、ほんの少しのためにはるかに多くのことを伝えます...
Matt Montag

56
簡潔で読みにくいコードへの投票は、テロへの投票です。
FreeAsInBeer 2015年

10
ショートカットは何のメリットもありませんが、難読化を引き起こします。コードの読み取り、理解、維持にかかる時間を短縮することが目標である場合、これらのショートカットを使用すると、長い道のりをたどることができます。
jononomo 2015

3
ショートカットの使用がjQuery(document).ready(function(){ });
悪けれ

76

jQuery()呼び出しは実際に戻る必要があることに注意してください。例外が1つスローされた場合、後続の(無関係の)呼び出しは実行されません。

これは構文に関係なく適用されます。あなたは使用することができjQuery()jQuery(function() {})$(document).ready()、あなたが好きな、動作は同じです。初期のブロックが失敗した場合、後続のブロックは実行されません。

これは、サードパーティのライブラリを使用しているときの問題でした。1つのライブラリが例外をスローし、後続のライブラリは何も初期化しませんでした。


2
この。この時点まで問題を絞り込むのにちょうど良い時間を費やしました。$(document).ready呼び出しの1つがエラーをスローしたため、別の$(document).ready関数が呼び出されませんでした。それは私を狂わせるものでした。
スクロールアップ2015年

10
これはもう当てはまりません。jQuery 3.0以降、jQueryは、1つのハンドラーで発生した例外によって、その後追加されたハンドラーの実行が妨げられないようにします。api.jquery.com/ready
Ravi Teja

32

$(document).ready(); 他の関数と同じです。ドキュメントが準備されると、つまりロードされたときに発生します。問題は、複数の$(document).ready()内で同じ関数を起動したときではなく、複数の$(document).ready()が起動したときに何が起こるかについてです。

//this
<div id="target"></div>

$(document).ready(function(){
   jQuery('#target').append('target edit 1<br>');
});
$(document).ready(function(){
   jQuery('#target').append('target edit 2<br>');
});
$(document).ready(function(){
   jQuery('#target').append('target edit 3<br>');
});

//is the same as
<div id="target"></div>

$(document).ready(function(){

    jQuery('#target').append('target edit 1<br>');

    jQuery('#target').append('target edit 2<br>');

    jQuery('#target').append('target edit 3<br>');

});

どちらもまったく同じように動作します。唯一の違いは、前者でも同じ結果が得られることです。後者は、ほんの一瞬で実行され、少ないタイピングを必要とします。:)

結論として、可能な限り1 $(document).ready();のみを使用します。

//古い答え

どちらも順番に呼び出されます。これらを組み合わせることがベストプラクティスです。それが不可能な場合でも心配しないでください。ページは爆発しません。


同じ関数を複数回実行したり、複数の$(document).ready'sで異なる関数を実行したりすると混乱するかもしれないと思った^^編集された鉱山。
Ed Fryed、2011年


9

両方とも呼ばれ、先着順です。見てくださいここに

$(document).ready(function(){
    $("#page-title").html("Document-ready was called!");
  });

$(document).ready(function(){
    $("#page-title").html("Document-ready 2 was called!");
  });

出力:

ドキュメント対応2が呼び出されました!


2

スレッドを壊滅させるのではなくjQuery、提案された構文の最新バージョンでは次のとおりです。

$( handler )

匿名関数を使用すると、これは次のようになります

$(function() { ... insert code here ... });

このリンクを参照してください:

https://api.jquery.com/ready/

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.