28


3

なぜ$(document).readyが起動しないのですか?

PHPファイルでは、「include」を使用して次のjs.phpファイルをインクルードし、その前にjqueryファイルをインクルードしました。

$(document).ready(function(){
     alert("hello");
});

しかし、うまくいきません。 Why? $(document).ready関数をスキップすると機能します。

しかし、私はjqueryコードが必要です。 なにが問題ですか?

12 Answer


30


あなたが言ったことに基づく最も可能性の高い答えは、コアjQueryファイルが実際にページに正しく含まれていないということです。 次のようなものが必要です。


おそらく、これは欠落しているか、誤って入力されています。


24


静かに失敗し、残りのすべてのコールバックが呼び出されない別の原因:

$(document).ready(null);

そのため、nullを返す変数または構文エラーがあるかどうかを確認してください。 このように:

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

上記の関数が即座に呼び出され、undefinedが返されることに注意してください。


4


  1. jQueryが正しくロードされているかどうかを確認してください。

  2. ブラウザのプログレスバーを見てください:いくつかのカウンタをロードしている可能性があります そして、ドキュメントはロードされるまで準備ができていません。これは、外部リソースが遅いときによく起こります。

  3. 念のため、 `$(function(){alert(…​);});`を試してください…​

  4. このオンロードバインディングの前にJSエラーがあるかどうかを確認します。 Use FirefoxのFireBugプラグインで確認してください。


3


jquery includeタグの定義方法も確認してください。 何らかの理由で、2つの別々のタグでタグを開いたり閉じたりする必要があるようです。 閉じて1つのタグを使用すると動作しないようです:

作品:


動作しません:



1


私も同様の問題に直面し、これは私がやったことです。

javascriptファイルでコールバック関数が定義された* document.ready *が*後*に配置されていることを確認してください。

ここでは、document.readyが解析されているとき、initはまだ定義されていません。

//won't work
$(document).ready(init);
var init = function() {
   console.log('init not called');
}

正しい方法:

//Works
var init = function() {
   console.log('document is ready');
}
$(document).ready(init);

$(document).ready(init)が最後に配置されていることに注意してください。


1


はい、私は時々それが問題であることに気付きました、私はこの問題を解決する安全な解決策を書きました。

// jquery plugin 'jquery.ready.fix.js'
// @author Szymon Działowski
;(function ($) {
    $.fn.ready.old || $(function (r) {
        r = $.fn.ready;
        $.fn.ready = function (fn) {    $.isReady ? fn() : r(fn);    };
        $.fn.ready.old = r;
    });
})(jQuery);

その後、コードを実行できます:

$(function () {alert('go')})

そして、それは常に警告を発します。

PS:これは、「ダックパンチ」と呼ばれる手法です。詳細については、http://www.paulirish.com/2010/duck-punching-with-jquery/


1


Zakasのhttps://www.nczonline.net/blog/2009/03/03/the-art-of-throwing-javascript-errors/[JavaScriptエラーをスローする技術]に従って、私は自分のエラーをスローし始めました。 JSの問題を見つけるためのアプローチとしてのJavaScript。

しかし、残念ながら、このアプローチにより、サイトの無関係な部分でjQuery ready()関数が静かに失敗し始めました。 :(

以下が異なることを学びました。

throw new Error()

とは違う

console.error()

だから、私はconsole.error()を使い始めましたが、まだコンソールに赤いハイライトが表示されていました。


1


確認すべきもう1つのポイント:プログラムにPHPエラーがある可能性があります。 PHPの致命的なエラーはスクリプトを終了し、 `$(document).ready`は実行されません。

サーバーの設定またはCSSによっては、*致命的なエラー*メッセージが表示されない場合があります。


0


私の場合、AjaxリクエストによってHTMLフォームがサーバーに送信され、ドキュメントの一部のみが受信されたため、* document.readyは呼び出されませんでした。

その結果、リロードされたその部分にあったいくつかのボタンは、イベント.click()atc。にバインドされませんでした。 これらのボタンは新しく、これらのイベントのバインドはドキュメントの準備中に初めて呼び出されるだけで、AJAX用ではないためです。


0


この問題が発生しただけで、スクリプトタグのスペルミスであることがわかりました。

``

</ code> </ p> <p> javascriptに「a」がないことに注意してください。 単純に変更します。</ p> <p> <code> <script> </ code> </ p> <p>問題を修正しました。</ p>