私は約5つのCSSファイルと10のJavascriptファイルをロードすることを要求する通常のWebページを構築しています。
さて、制作のために、すべてのJavascriptを必要な順序で1つのファイルに連結し、すべてのCSSを別のファイルに連結しました。しかし、連結ファイルを使ってWebページを実行しようとすると、次のようなエラーメッセージが表示されます。
Uncaught TypeError: undefined is not a function
連結Javascriptファイルのjquery.min.jsがロードされている行。
これを軽減するために私は何ができますか?すべてのファイルを連結し、それらを本番用に縮小したいです。助けてください。
編集:私はJavascriptとCSSを、それらが個別にロードされて正常に機能していたときの順序でマージしました。
この問題がまだ解決されていないと仮定すると、多くの個々のファイルはセミコロンでコードを終了しません。ほとんどのjQueryスクリプトは(jQuery)
で終わり、(jQuery);
が必要です。
スクリプトは別々のファイルとしても問題なくロードできますが、1つのファイルとしてセミコロンが必要です。
ファイルをマージする順番を再確認する必要があるかもしれません。それは次のようになるはずです。
この解決策は私のために働いた
;(function($){ //あなたのコード })(jQuery);
コードをクロージャ内に移動し、jQueryの代わりに$を使用してください。
検索しすぎた後
異なるバージョンの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>
私は最近 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またはあなたがバンドルしているものに任せてください。
それでも解決できない人のために、私はjQueryを使うときに 'this'を '$(this)'に変更することで解決しました。
例えば:
$('.icon').click(function() {
this.fadeOut();
});
一定:
$('.icon').click(function() {
$(this).fadeOut();
});
関数と同じ名前の変数に誤って名前を付けた場合、まったく同じ問題に遭遇しました。
したがって、この:
isLive = isLive(data);
失敗しました、OPの言及されたエラーメッセージを生成しました。
これを修正するには、上記の行を次のように変更するのと同じくらい簡単でした。
isItALive = isLive(data);
私は知りません、それがこの状況でどれだけ役立つかわかりません、しかし、私は同様の問題の解決策を探している他の人のためにこの答えを出すことにしました。
はい、私はまた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'を終了します。
アイデアをありがとう。
私は自分のコードがスムーズに実行されると確信できる場合がありました。それでも、エラーが発生したので、Google ChromeのJavascriptコンソールで確認しました。
私のエラー行は
opt.SetAttribute("value",values[a]);
そして同じエラーメッセージが表示されます。
Uncaught TypeError: undefined is not a function
上記のコードに問題はないようですが、実行されていませんでした。私はほぼ1時間トラブルシューティングしてから、それを他の実行中のコードと比較しました。私のエラーは、それがSetAttribute
に設定されているはずのsetAttribute
に設定されていることです。
私のように他にバカがある場合、私は簡単なことを忘れていたので、私はこのイライラする問題を抱えていました
new
新しいオブジェクトをインスタンス化する前のキーワード。
コメントがある場合はコメントアウトしてください。コピーして貼り付けるときに、 "/ *!"を省略することがあります。
また、あなたがコンソールに入ったとき、彼らはあなたのエラーをリストするでしょう、そしてあなたはそれを一度に一つずつ取るべきです。 「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秒* /
次のコード(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つのコールバックパラメータしか期待しないjquery関数にあまりにも多くのパラメータを渡したときに、私はこれを得ました。
他のトラブルシューティングのために:あなたがすべてのあなたのjquery関数呼び出しが追加のパラメータをチェックすることを確認するようにしてください。