TypeError: 'undefined'は関数ではありません( '$(document)'を評価しています)


139
  1. WordPressサイトを利用しています。
  2. このスクリプトはヘッダーに含めています。

スクリプトが読み込まれると、次のエラーが発生します。

TypeError: 'undefined'は関数ではありません( '$(document)'を評価しています)

何が原因なのか、それが何を意味しているのか、私にはわかりません。

Firebugでは、次のようになります。

$は関数ではありません


4
カスタムスクリプトの前に jQueryライブラリを含め、NetFirebug のタブにエラーがないことを確認してください(jQueryが実際に読み込まれることを確認してください)。
wsanville

...はい、もちろんjQueryは事前に読み込まれています。私はそれがWordPress enqueの問題だと確信しています。
dcolumbus

回答:


239

WordpressはデフォルトでjQueryをnoConflictモードで使用します。jQuery変数名として使用し、ではなく参照する必要があります$。たとえば、

jQuery(document);

の代わりに

$(document);

これ$をjQueryを再び参照するように自己実行関数で簡単にラップできます(グローバルネームスペースの汚染も回避します)。たとえば、

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

5
スクリプトは必要ありません。どこにいてもjQuery(document)代わりに呼び出すことが$(document)できます。$代わりに使用したい場合は、上記のスクリプトは単に引数を取る関数を作成し、$それを渡して実行しjQueryます。つまり、関数内では、$予想どおりjQueryを指します。
El Yobo

2
実際、私がしたことは$(document).ready(function() { // code });、あなたの代わりに私の普通を置くことでした$(document);...それは魅力のように機能しました。
dcolumbus

1
はい、それは私が提案していたことです-「関数内では、$は予想通りjQueryを指しています」。
El Yobo

まあ、それはあなたにその方法でいくつかの文字を節約します:) 自己実行ステートメントの!function(){}()形式の詳細。
El Yobo 2013

古い@ElYoboであることはわかっていますが、投稿を編集して、最初のコメントの例を2番目の例として応答に追加できます。時間を節約していただきありがとうございます=)
Manatax '29年

25

jQueryを使用しnoConflictます。それは私にとって不思議でした

var example=jQuery.noConflict();
example(function(){
example('div#rift_connect').click(function(){
    example('span#resultado').text("Hello, dude!");
    });
});

つまり、HTMLにjQueryが含まれていると仮定します

<script language="javascript" type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>


11

このスニペットを試してください:

jQuery(function($) {
  // Your code.
})

それは私のために働いた、たぶんそれもあなたを助けるでしょう。


11

この問題はChromeでのみ発生しました。

追加してみました

var $ =jQuery.noConflict();

電話する直前

$(document).ready(function () {

出来た。

どうもありがとう


これをありがとう。「$」の代わりに「jQuery」を使用して問題を解決できることはわかっていましたが、私の問題は、そのように記述されたときにコモド編集が失敗するため、$でコードヒント/補完を取得するか、JavaScriptを実際に機能させるかを選択する必要があったことです。この方法では、両方を使用できます。
ジョージケンドロス2015年

6

また、jQueryを含め、いくつかのコンポーネント/他のライブラリ(jQuery UIなど)が含まれていることを確認し、誤ってjQueryを再度含めます。これにより、jQueryが再定義され、コンポーネントヘルパー(.datepickerなど)がインスタンスから削除されます。



4

私はこれを使います

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

2

私はまた、web開発キャリアでそのような問題に何度も直面しました。実際にはJSの競合ではありません。htmlWebサイトをブラウザーにロードしても、このようなエラーは発生しませんが、localhostを介してこれらのタイプのWebサイトをロードすると、このような問題が発生します。これはlocalhostが原因です。ローカルホストを介してスクリプトをロードすると、スクリプトがスキャンされ、出力がレンダリングされます。しかし、localhostを使用しなかった場合。出力をスキャンするだけです。例、ローカルホストのそばにphpコードを記述してホストなしで実行すると、エラーが発生します。しかし、コードが正しく、ホストを通じて実行される場合、実際の出力が得られます。また、inspect要素を使用すると、出力コードがHTMl形式で取得されますが、PHP形式ではありません。これは、コードのレンダリングが原因です。

これはレンダリングエラーです。したがって、これらのjqueryコードエラーを修正するには、この方法を使用することがソリューションの1つである可能性があります。

jQuery(document).ready(function($){
/******** Body of Jquery Code*****/
});

このコードが行うことは、jqueryを適用して、関数の変数として「$」を登録することです。それ以外の場合、デフォルトでは.jsファイルはjavascriptとしてのみ読み取られます。


1

ホストにjQueryが自動的に含まれていることをホストが認識していないことに気づかなかったため、ページヘッダーにjQueryを含めた場合にも、この問題に遭遇しました。したがって、ページをライブでロードし、ソースをチェックして、jQueryがリンクされているかどうかを確認してください。



1

この間にすべてのスクリプトをラップします...

<script>
    $.noConflict();
    jQuery( document ).ready(function( $ ) {
      // Code that uses jQuery's $ can follow here.
    });
</script>

多くのJavaScriptライブラリは、jQueryと同じように、$を関数または変数名として使用します。jQueryの場合、$はjQueryの単なるエイリアスなので、$を使用しなくてもすべての機能を使用できます。jQueryと一緒に別のJavaScriptライブラリを使用する必要がある場合は、$ .noConflict()を呼び出して、$の制御を他のライブラリに戻します。$の古い参照はjQueryの初期化中に保存されます。noConflict()は単にそれらを復元します。


1

以下のスニペットでは、jQueryと$の両方を使用できます。それは私のために働いた

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

1

$をfunction()に渡すことができます

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

// jQuery code is in here

});

または$(document);これで置き換えることができますjQuery(document);

またはあなたが使うことができます jQuery.noConflict()

var jq=jQuery.noConflict();
jq(document).ready(function(){  
  jq('selector').show();
});
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.