Uncaught TypeError:undefinedはjquery-min.jsをロードする際の関数ではありません


104

約5つのCSSファイルと10のJavaScriptファイルをロードする必要がある通常のWebページを構築しています。

  • それらをHTMLページに個別にロードすると、私のWebページは正常にロードされます。
  • 次に、本番用に、すべてのJavascriptを必要な順序で1つのファイルに連結し、すべてのCSSを別のファイルに連結しました。しかし、連結されたファイルでWebページを実行しようとすると、次のエラーがスローされます。

    Uncaught TypeError: undefined is not a function

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

これを軽減するにはどうすればよいですか?すべてのファイルを連結し、本番用に縮小したいと思います。助けてください。


編集: JavaScriptとCSSを、個別にロードされて正常に動作していた順序でマージしました。


5
undefined表示するコードがない場合、どうすればわかりますか?
ジョセフ

未定義は、im loadしているjquery-1.6.1.min.jsに含まれています。多分jqueryは正しく読み込まれていませんか?
ghostCoder

多分上位の回答を受け入れますか?
Allisone 2013年

回答:


179

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

個別のファイルとしてスクリプトは問題なく読み込まれますが、1つの個別のファイルとしてセミコロンが必要です。


18
+1。JavaScriptコードを連結するときは、常にセミコロンで結合する必要があります。それらの多くはまだ有効ですが、エラーは少なくなります。
Bergi

9
これはデバッグが非常に難しいです。本当に効果的な答えをありがとう!
ghayes

5
Bootstrapのjsはその一例です。これをありがとう!それは本物の麺スクラッチャーでした。
Kevin Beal 2013年

YouTube iframe APIをインポートしようとしていますが、セミコロンで終わっていません。このエラーが発生します。何も連結していません... jQuery.getScript()でロードしています。だから...これが私のエラーの原因ですか?それとも意味がありませんか?
ダニエル

1
ライブラリの操作中にこのエラーが発生した場合、どうすれば解決できますか?私は2.3.2 / JS / bootstrap.min.jsと/1.4.6/bootstrap-editable/js/bootstrap-editable.min.jsを使用しようとしています
codeObserver

28

ファイルをマージする順序を再確認する必要があるかもしれません、それは次のようなものでなければなりません:

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

このようなjson2.js、jquery-1.6.1.min.js、jqueryプラグイン、私のコードのみです。その順序で。
ghostCoder

json2.jsがjquery関数を使用している場合は、jquery.min.jsを最初にする必要があります。お勧めします。jquery.min.js、jqueryPlugins、json2.js、私のコード。
ビラルムルタザ


16

異なるバージョンの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>

7

最近、Squishitを使用したjQuery Validationプラグインでこの問題が発生し、jsエラーも発生しました。

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

jquery.validate.min.jsではなく、縮小されていない jquery.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またはバンドルしているものに任せます。


縮小化されたバージョンを使用することは、私にとって単なるチケットでした-ありがとう。
Paul Deen

私にとっては、問題を引き起こしていたのは、NuGetパッケージのバージョン1.0.2のjson2.min.jsファイルでした。それを非minファイルに切り替えたところ、Squishit結合ファイルは正常に機能しました。
Billoreid 2013年

6

まだこれを修正できない人のために、jQueryを使用するときに「this」を「$(this)」に変更することで修正しました。

例えば:

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

修繕:

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

5

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

したがって、この:

isLive = isLive(data);

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

これを修正するには、上記の行を次のように変更するだけです。

isItALive = isLive(data);

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


5

はい、私はまた、jsライブラリを変更して非縮小化に修正しました。

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

<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」を非縮小化として終了します。

アイデアをありがとう。


3

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

私のコードがスムーズに実行されると確信している場合がありました。それでもエラーが発生し、Google ChromeのJavascriptコンソールをチェックして、それが何であるかを確認しました。

私のエラーラインは

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

そして同じエラーメッセージを得ました:

Uncaught TypeError: undefined is not a function

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


2

私のようなモーロンがいる場合、私は簡単なことを忘れたので、このイライラする問題がありました

new

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


1

次のコード(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

何が本当に起こった私は、関数に(2つのパラメータで)1つのコールバック関数を渡そうとしましたということであったf事実設定していない、2つのパラメータを期待してcb内部のfコンパイラが正しくとして報告し、undefined is not a function

私が盲目的にコールバックスタイルのボイラープレートコードを貼り付けたため、間違いが起こりました。パラメータを渡すf必要がないerrため、次のようにする必要があります。

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

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

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


1

コメントをコメントアウトしていることを確認してください。コピーして貼り付けるときに、「/ *!」を省略してしまうことがあります。

また、コンソールに移動すると、エラーがリストされ、一度に1つずつ取得する必要があります。「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/ *生成されたファイル:Wed Oct 07 09:40:16 GMT 2009 * /


0

これは、誤って1つのコールバックパラメータしか予期しないjquery関数に渡したパラメータが多すぎるときに発生しました。

その他のトラブルシューティング:追加のパラメーターについて、すべてのjquery関数呼び出しを確認してください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.