2012-05-03 197 views
102

我在構建一個正常的網頁,需要我加載大約五個CSS文件和十個Javascript文件。Uncaught TypeError:undefined不是加載函數jquery-min.js

  • 當在HTML頁面中分別加載它們時,我的網頁加載正常。
  • 現在爲了生產,我把所有的Javascript連接成一個文件,按照需要的順序,並把所有的CSS連接到另一個文件中。但是,當我嘗試與連接起來的文件運行網頁,它拋出一個錯誤說:

    Uncaught TypeError: undefined is not a function

在哪裏jquery.min.js在串聯的Javascript文件中加載行。

我能做些什麼來緩解這種情況?我想連接所有文件並將它們縮小以供生產。請幫忙。


編輯:我合併了Javascript和CSS中,當他們被單獨加載並工作正常,他們的順序。

+5

如果你沒有代碼顯示,我們怎麼知道'undefined'? – Joseph

+0

未定義是在即時加載的jquery-1.6.1.min.js中。 也許jquery沒有正確加載或什麼? – ghostCoder

+0

接受高排名的答案也許? – Allisone

回答

172

仍然假設這個問題的任何第三方插件還沒有得到解決,很多的個別文件不會以分號結尾。大多數jQuery腳本以(jQuery)結尾,你需要有(jQuery);

作爲單獨的文件,腳本將加載得很好,但作爲一個單獨的文件,您需要分號。

+18

+1。在連接JavaScript代碼時,您應始終以分號結合它們。其中很多仍然有效,但更少導致錯誤。 – Bergi

+9

這非常棘手的調試。感謝您提供真正有效的答案! – ghayes

+5

Bootstrap的js就是這樣一個例子,顯然。感謝你!那是一個真正的麪條刮刀。 –

25

您可能必須重新檢查,其中要合併文件的順序, 它應該是這樣的:

  1. jquery.min.js
  2. jQuery的ui.js
  3. 您加載
  4. 您的自定義JS
+0

它只有這樣的 json2。js,jquery-1.6.1.min.js,jquery插件,我的代碼 。 它按此順序。 – ghostCoder

+0

如果json2.js使用任何jquery函數,則應該比jquery.min.js應該優先。 我會建議。 jquery.min.js,jqueryPlugins,json2.js,我的代碼。 –

6

最近我有這個問題與jQuery Validation plug-in,使用Squishit,也得到JS錯誤:

"undefined is not a function"

我通過改變參考unminified jquery.validate.js文件固定它,而不是jquery.validate.min.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或捆綁的任何文件。

+0

使用unminified版本只是我的門票 - 謝謝。 –

+0

對我來說,它是導致問題的NuGet包的版本1.0.2中的json2.min.js文件。我將它切換到非最小文件並且Squishit組合文件現在工作正常。 – billoreid

1

我不得不用下面的代碼(在IcedCoffeeScript)相同的消息:

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

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

這在我看來,像普通ICS代碼。我展開了的await-延遲構建到正規的CoffeeScript:

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

真正happend是,我試圖通過1個回調函數(含2個參數)的功能f期待兩個參數,有效地沒有設置cbf,其中編譯器正確報告爲undefined is not a function

發生錯誤是因爲我一味地粘貼了回調式樣的樣板代碼。 f並不需要一個err參數傳遞到它,因此應該僅僅是:

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

在一般情況下,我建議你要仔細檢查函數簽名和調用匹配arities。錯誤消息中的調用堆棧應該能夠提供有用的提示。

在您的特殊情況下,我建議您查找合併文件中出現兩次的函數定義,其中包含不同的簽名或賦值給全局變量的函數。

4

我遇到了同樣的問題,當錯誤地命名與函數名稱相同的變量。

所以這個:

isLive = isLive(data); 

失敗,生成OP的提到的錯誤消息。

修復這個是如上線轉換爲簡單:

isItALive = isLive(data); 

我不知道,多少它有助於在這種情況下,我決定把這個答案爲他人尋找解決類似問題。

4

是的,我也修正了它在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> 

GRUB.EXE返回的 '分鐘' 作爲unminified。

感謝您的想法。

15

我有兩個引用不同版本的jQuery的同樣的錯誤。

在我的母版頁:

<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> 
1

確保註釋掉任何評論。有時在複製和粘貼時,您會忽略「/ *!」

另外,當你進入控制檯時,他們會列出你的錯誤,你應該一次一個。如果您看到「Uncaught SyntaxError:Unexpected token *」,那可能意味着它正在讀取您的js文件,並且它不會越過第一行。

/*! * jquery.tools 1.1.2 - 缺少的Web用戶界面庫 * * [tools.tabs-1.0.4,tools.tooltip-1.1.2,tools.scrollable-1.1.2,tools.overlay-1.1 0.2,tools.expose-1.0.5] * *(C)2009特羅Piirainen * http://flowplayer.org/tools/ *文件生成版權:星期三07年10月9時40分16秒GMT 2009 */

5

對於那些出還有誰不能解決這個問題,我通過在使用jQuery時將'this'更改爲'$(this)'。

EG:

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

修正:

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

如果有任何低能兒那裏像我這樣的,我有這個令人沮喪的問題,因爲我忘了一個簡單的

new

實例化新對象之前的關鍵字。

2
記住:Javascript函數是CASE SENSITIVE。

我有一個案例,我很確定我的代碼能夠順利運行。但仍然出現錯誤,我檢查了谷歌瀏覽器的Javascript控制檯以檢查它是什麼。

我的錯誤行是

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

,並得到了同樣的錯誤信息:

Uncaught TypeError: undefined is not a function 

似乎沒有什麼錯與上面的代碼,但它沒有運行。我解決了將近一個小時的問題,然後將其與其他正在運行的代碼進行比較。我的錯誤是它被設置爲SetAttribute,應該是setAttribute

0

當我不小心將太多的參數傳入一個僅僅期望一個回調參數的jquery函數時,我得到了這個。

對於其他故障排除:確保您檢查所有的jquery函數調用額外的參數。

相關問題