2010-12-27 16 views
2

jqueryをロードするには、外部jsファイルを使用する必要があります。私のjsファイルのコードは以下の通りです:FirefoxのFirebugのコンソールでjQueryが定義されていないというエラーが表示されるのはなぜですか?

document.write('<script language="javascript" type="text/javascript" src="http://code.jquery.com/jquery-1.4.4.min.js"></script>'); 

    (function($) { 
     $(document).ready(function() { 
      alert('it works!!'); 
     }); 
    })(jQuery); 

私はこのエラーを参照してください。「jQueryのが定義されていない」と私はjQueryのライブラリは私のjsから$関数の後にロードされているので、それだと思いますファイル。

私はこれをどのように修正できますか? Firebugコンソールからスクリプトを実行すると、すべて正常に動作します。

答えて

2

jqueryが呼び出されたときにロードされていないことが正しいです。 jQueryライブラリをロードし、後でコードを呼び出す関数を書く必要があります。あるいは、コードの実行を遅らせることもできますが、これは100%完全な証明ではありません。

更新。 Link to check if jQuery has been loadedコールバックコールに便利です。

+0

私はjqueryの後にコードをロードするjs関数を書くつもりだと思う。なぜなら私はそういうアプローチをSOのどこかで見たと思うからだ。 TY – dole

+1

2つの関数を書くことができます:1はjqueryをロードし、2はコードを実行するコールバックで1を実行します。 jQueryがロードされているかどうかを確認することもできます。いくつかの方法があります。http://jquery-howto.blogspot.com/2009/03/check-if-jqueryjs-is-loaded.html –

5

生成<script>要素が後に現在のスクリプト要素を表示され、その中のコードは、現在の<script>要素のコードが終了した後まで実行されません。

<script>を使用しようとする前に、ライブラリをロードする必要があります。

変更するには:

<script type="text/javascript" src="http://code.jquery.com/jquery-1.4.4.min.js"></script> 
<script type="text/javascript"> 
    (function($) { 
     $(document).ready(function() { 
      alert('it works!!'); 
     }); 
    })(jQuery); 
</script> 
+0

このソリューションは機能しますが、外部のjsファイルからjQueryをロードする必要はありません。このアイデアでdocument.write()を使うと、私の人生は悪夢になります。私はすべてをエスケープしなければならず、関数を1行で記述する必要があります。より良いアプローチを提供できますか? – dole

1

は、なぜあなたはjQueryので引っ張ってdocument.writeを使用していますか?ちょうど<script>タグを直接HTMLに入れてください。

+0

bc私は、HTMLページの外に読み込まれるスクリプトが必要です。 – dole

1

Loading scripts dynamicallyが役に立ちます。しかし、をロードしようとしていますが、ページがロードされています。これは、ページがロードされたときにロードするロードとは少し異なります。

私の提案は、ハッキングの一種である:

document.write('<script language="javascript" type="text/javascript" src="http://code.jquery.com/jquery-1.4.4.min.js" onload="loaded()" onreadystatechange="loadedIE()"></script>'); 

function loadedIE() { //for ie 
    if(this.readyState == 4){loaded();} 
}; 

function loaded() { 
    $(document).ready(function() { 
     alert('it works!!'); 
    }); 
}; 

私はreadystatechangeリスナーが(そのIEがハック)動作するはずだと思います。

関連する問題