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を、個別に読み込まれて正常に機能していたときの順序でマージしました。

4

13 に答える 13

180

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

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

于 2012-06-04T15:42:27.117 に答える
28

ファイルをマージする順序を再確認する必要がある場合があります。次のようになります。

  1. jquery.min.js
  2. jquery-ui.js
  3. ロードするサードパーティのプラグイン
  4. カスタムJS
于 2012-05-03T10:53:23.463 に答える
20

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

    ;(function($){
        //コード
    })(jQuery);

コードをクロージャー内に移動し、jQueryの代わりに$を使用します

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

説教しすぎた後

于 2014-11-08T18:02:58.350 に答える
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>
于 2014-06-02T18:30:31.177 に答える
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またはバンドルしているものに任せます。

于 2012-11-08T00:47:25.313 に答える
6

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

例えば:

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

修理済み:

$('.icon').click(function() {
    $(this).fadeOut();
});
于 2014-07-05T22:25:42.773 に答える
5

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

したがって、この:

isLive = isLive(data);

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

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

isItALive = isLive(data);

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

于 2013-08-30T07:58:12.787 に答える
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'を縮小されていないものとして終了します。

アイデアをありがとう。

于 2014-04-21T23:31:23.773 に答える
3

注意:Javascript関数は大文字と小文字を区別します。

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

私のエラーラインは

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

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

Uncaught TypeError: undefined is not a function

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

于 2015-03-05T09:00:18.917 に答える
2

私のようなモロンがそこにいる場合、私は単純なことを忘れたので、このイライラする問題を抱えていました

new

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

于 2014-07-07T13:45:54.700 に答える
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

f実際に起こったことは、1つのコールバック関数(2つのパラメーターを持つ)を2つのパラメーターを期待する関数に渡そうとしたことで、コンパイラーが正しく報告したcb内部に設定されていませんでした。fundefined is not a function

コールバックスタイルの定型コードを盲目的に貼り付けたため、間違いが発生しました。fパラメータを渡す必要がないため、次のerrようになります。

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

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

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

于 2013-02-03T22:19:24.410 に答える
1

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

また、コンソールに入ると、エラーが一覧表示されるので、一度に1つずつ取得する必要があります。「UncaughtSyntaxError:Unexpected token *」が表示された場合は、jsファイルを読み取っていて、最初の行を超えていない可能性があります。

/ *!*jquery.tools1.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 * /

于 2014-06-13T19:29:49.350 に答える
0

これは、1つのコールバックパラメーターのみを期待するjquery関数に誤って多くのパラメーターを渡したときに発生しました。

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

于 2015-08-20T19:59:52.397 に答える