2

場合によっては、ダウンロード速度やその他の非同期の問題のために$(document).ready()、jquery.js をインクルードした後に置いても、時々 is について苦情が寄せられ$ますundefined。何とか何とか何とか。

私はそれをしたくありません:

setTimeout(function() {$(document).ready()... }, 1000);

それは非常に不自由に思えます。

それで、document.readyが本当に呼び出される準備ができていることを確認するためのスマートな方法、適切な方法、または良い方法はありますか? :)

4

3 に答える 3

4

それは実際には不可能だと思います (事実)$undefined、ドキュメント ヘッドは同期的に読み込まれます。つまり、各行は次の行の前に完全に読み込まれます。

この正確なテストがテストされたビデオがここにあり、私が正しかったようです

ビデオ: http://www.bennadel.com/blog/1915-How-Javascript-Loading-And-Blocking-Works-By-Default.htm

次のようなファイルを正しくロードしていますか

<!DOCTYPE html>
<html>
    <head>
        <title>...</title>
        <script type="text/javascript" src="...."></script>
        <script type="text/javascript" src="...."></script>
        <script type="text/javascript" src="...."></script>
        <script type="text/javascript" src="...."></script>
        <script type="text/javascript">
            jQuery.ready(function(){
               //This is executed once all 4 above have been loaded
            });
        </script>
        <script type="text/javascript" src="...."></script>
        <script type="text/javascript" src="...."></script>
        <!-- The above to scripts are loaded in order after the jquery function has run. -->
    </head>
</html>

readyjQueryのメソッド、通常、DOM が最後の終了タグを確認するまで、ホール ドキュメントが読み込まれると起動されます</html>[要出典]

IE8以下では可能かもしれませんが、IEはこれまでに作られた中で最悪のブラウザかもしれませんが、IE9は完全にオーバーホールされており、Googleのようなものに満足するべきだと彼らは言っています.アップル、モジラなど

複数のライブラリを使用している場合、または$変数を上書きしている場合は、次のようにロックされたスコープ内で取得できます。

(function($){
    $.ready(function(){
        //Do your jQuery here !
    });
})(jQuery)
于 2011-03-22T18:35:50.557 に答える
2

Denis は、適切な解決策へのリンクを提供しています。私は今それを使用しています。

JavaScript - jQuery がロードされていることを確認するにはどうすればよいですか?

リンクの答えと説明を参照してください。

解決策は次のとおりです。

<script type='text/javascript'>
runScript();

function runScript() {
    // Script that does something and depends on jQuery being there.
    if( window.$ ) {
        // do your action that depends on jQuery.
    } else {
        // wait 50 milliseconds and try again.
        window.setTimeout( runScript, 50 );
    }
}
</script>
于 2011-04-05T16:24:04.713 に答える
2

実行することで、jQuery がロードされているかどうかを確認できます。

if (typeof jQuery !== 'undefined') {
  //do whatever here
}

これを行う必要はありません。すべての JavaScript を HTML の最後で の前に含めることをお勧めします</body>。jQuery が最初です。ヤフー推奨の方法です。詳しくはhttp://developer.yahoo.com/performance/rules.htmlをご覧ください。これにより、ページの読み込みが遅くなったり、未定義の jQuery の問題が発生したりすることはありません。

于 2011-03-22T18:29:50.203 に答える