web-dev-qa-db-ja.com

不明なTypeError:undefinedはjquery-min.jsのロード時には関数ではありません

私は約5つのCSSファイルと10のJavascriptファイルをロードすることを要求する通常のWebページを構築しています。

  • それらをHTMLページに別々にロードすると、私のWebページは正常にロードされます。
  • さて、制作のために、すべてのJavascriptを必要な順序で1つのファイルに連結し、すべてのCSSを別のファイルに連結しました。しかし、連結ファイルを使ってWebページを実行しようとすると、次のようなエラーメッセージが表示されます。

    Uncaught TypeError: undefined is not a function

連結Javascriptファイルのjquery.min.jsがロードされている行。

これを軽減するために私は何ができますか?すべてのファイルを連結し、それらを本番用に縮小したいです。助けてください。


編集:私はJavascriptとCSSを、それらが個別にロードされて正常に機能していたときの順序でマージしました。

103
ghostCoder

この問題がまだ解決されていないと仮定すると、多くの個々のファイルはセミコロンでコードを終了しません。ほとんどのjQueryスクリプトは(jQuery)で終わり、(jQuery);が必要です。

スクリプトは別々のファイルとしても問題なくロードできますが、1つのファイルとしてセミコロンが必要です。

175
Dustin

ファイルをマージする順番を再確認する必要があるかもしれません。それは次のようになるはずです。

  1. jquery.min.js
  2. jquery-ui.js
  3. ロードしているサードパーティ製プラグイン
  4. あなたのカスタムJS
27
Bilal Murtaza

この解決策は私のために働いた

 
;(function($){
 //あなたのコード
})(jQuery); 
 

コードをクロージャ内に移動し、jQueryの代わりに$を使用してください。

私は https://magento.stackexchange.com/questions/33348/uncaught-typeerror-undefined-is-not-a-function-when-using-a-jqueryで上記の解決策を見つけました-plugin-in-ma

検索しすぎた後

17
Bikram Shrestha

異なるバージョンのjQueryへの2つの参照からも同じエラーが発生しました。

私のマスターページで:

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

そしてまたページ上:

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

私は最近 jQuery検証プラグイン で、 Squishit を使ってこの問題を抱えていました)、またjsエラーを取得:

「未定義は関数ではありません」

Jquery.validate.min.jsではなく、unminifiedjquery.validate.jsファイルへの参照を変更して修正しました。

@MvcHtmlString.Create(
    @SquishIt.Framework.Bundle.JavaScript()
        .Add("~/Scripts/Libraries/jquery-1.8.2.min.js")
        .Add("~/Scripts/Libraries/jquery-ui-1.9.1.custom.min.js")
        .Add("~/Scripts/Libraries/jquery.unobtrusive-ajax.min.js")
        .Add("~/Scripts/Libraries/jquery.validate.js")
        .Add("~/Scripts/Libraries/jquery.validate.unobtrusive.js")
         ... more files

たとえば、Squishitを使用してさらに圧縮した場合、特定のファイルの縮小版では、@ Dustinが示すように、欠けているセミコロンなどを処理できない場合があるため、どのファイルを使用できるかを試してみる必要があります。二重に圧縮して、あなたはそれをSquishitまたはあなたがバンドルしているものに任せてください。

6
Ralph Lavelle

それでも解決できない人のために、私はjQueryを使うときに 'this'を '$(this)'に変更することで解決しました。

例えば:

$('.icon').click(function() {
    this.fadeOut();
});

一定:

$('.icon').click(function() {
    $(this).fadeOut();
});
5
Jack Nicholson

関数と同じ名前の変数に誤って名前を付けた場合、まったく同じ問題に遭遇しました。

したがって、この:

isLive = isLive(data);

失敗しました、OPの言及されたエラーメッセージを生成しました。

これを修正するには、上記の行を次のように変更するのと同じくらい簡単でした。

isItALive = isLive(data);

私は知りません、それがこの状況でどれだけ役立つかわかりません、しかし、私は同様の問題の解決策を探している他の人のためにこの答えを出すことにしました。

4
trejder

はい、私はまたjsライブラリでunminifiedに変更することを修正しました。

たとえば、タグ内で次のように変更します。

<script type="text/javascript" src="js/jquery.ui.core.min.js"></script>
<script type="text/javascript" src="js/jquery.ui.widget.min.js"></script>
<script type="text/javascript" src="js/jquery.ui.rcarousel.min.js"></script>

にとって:

<script type="text/javascript" src="js/jquery.ui.core.js"></script>
<script type="text/javascript" src="js/jquery.ui.widget.js"></script>
<script type="text/javascript" src="js/jquery.ui.rcarousel.js"></script>

無制限として 'min'を終了します。

アイデアをありがとう。

4

覚えておいてください:JavaScript関数は大文字と小文字を区別します。

私は自分のコードがスムーズに実行されると確信できる場合がありました。それでも、エラーが発生したので、Google ChromeのJavascriptコンソールで確認しました。

私のエラー行は

opt.SetAttribute("value",values[a]);

そして同じエラーメッセージが表示されます。

Uncaught TypeError: undefined is not a function

上記のコードに問題はないようですが、実行されていませんでした。私はほぼ1時間トラブルシューティングしてから、それを他の実行中のコードと比較しました。私のエラーは、それがSetAttributeに設定されているはずのsetAttributeに設定されていることです。

2
Logan Wayne

私のように他にバカがある場合、私は簡単なことを忘れていたので、私はこのイライラする問題を抱えていました

new

新しいオブジェクトをインスタンス化する前のキーワード。

1
CodyBugstein

コメントがある場合はコメントアウトしてください。コピーして貼り付けるときに、 "/ *!"を省略することがあります。

また、あなたがコンソールに入ったとき、彼らはあなたのエラーをリストするでしょう、そしてあなたはそれを一度に一つずつ取るべきです。 「Uncaught SyntaxError:Unexpected token *」と表示された場合は、jsファイルを読み込んでいて、最初の行を過ぎていないことを意味している可能性があります。

/ *! * jquery.tools 1.1.2 - Webに欠けているUIライブラリ* * [tools.tabs-1.0.4、tools.tooltip-1.1.2、tools.scrollable-1.1.2、tools.overlay-1.1.2、 tools.expose-1.0.5] * * Copyright(c)2009 Tero Piirainen * http://flowplayer.org/tools/ *生成されたファイル: 2009年10月7日水曜日9時40分16秒* /

1
Tasha

次のコード(IcedCoffeeScript)で同じメッセージが表示されました。

f = (err,cb) ->
  cb null, true

await f defer err, res
console.log err if err  

これは通常のICSコードのように思えました。 await-deferコンストラクトを通常のCoffeeScriptに展開しました。

f (err,res) ->
  console.log err if err

実際に起こったのは、コンパイラがundefined is not a functionとして正しく報告したf内のcbを事実上設定せずに、2つのパラメータを期待する関数fに1つのコールバック関数( 。

コールバックスタイルのボイラープレートコードを盲目的に貼り付けたため、ミスが発生しました。 fは、それに渡されるerrパラメーターを必要としないため、次のようにする必要があります。

f = (cb) ->
  cb null, true
f (err,res) ->
  console.log err if err

一般的な場合、一致するアリティの関数シグネチャと呼び出しを再確認することをお勧めします。エラーメッセージの呼び出しスタックは、役立つヒントを提供できるはずです。

特別な場合には、マージされたファイルに異なるシグネチャを持つ2回現れる関数定義、または関数を保持するグローバル変数への割り当てを探すことをお勧めします。

1
Jens Jensen

誤って1つのコールバックパラメータしか期待しないjquery関数にあまりにも多くのパラメータを渡したときに、私はこれを得ました。

他のトラブルシューティングのために:あなたがすべてのあなたのjquery関数呼び出しが追加のパラメータをチェックすることを確認するようにしてください。

0
JSideris