未捕获的TypeError:undefined不是加载jquery-min.js的函数

时间:2012-05-03 10:48:49

标签: javascript jquery minify

我正在构建一个普通网页,要求我加载大约五个CSS文件和十个Javascript文件。

  • 在HTML页面中单独加载时,我的网页加载正常。
  • 现在进行制作,我将所有Javascript连接到一个文件中,按所需顺序连接,将所有CSS连接到另一个文件中。但是当我尝试使用连接文件运行网页时,它会抛出错误说:

    Uncaught TypeError: undefined is not a function

在连接的Javascript文件中加载jquery.min.js的行。

我可以做些什么来缓解这种情况?我想连接所有文件并缩小它们以进行生产。请帮忙。


编辑:我按照他们单独加载时的顺序合并了Javascript和CSS,并且工作正常。

13 个答案:

答案 0 :(得分:175)

假设此问题仍未解决,许多单个文件不会以分号结束其代码。大多数jQuery脚本以(jQuery)结尾,您需要(jQuery);

作为单独的文件,脚本将加载得很好,但作为一个单独的文件,您需要分号。

答案 1 :(得分:27)

您可能需要重新检查合并文件的顺序, 它应该是这样的:

  1. jquery.min.js
  2. 的jquery-ui.js
  3. 您加载的任何第三方插件
  4. 您的自定义JS

答案 2 :(得分:17)

此解决方案适合我


    ;(function($){
        // your code
    })(jQuery);

将代码移到闭包中并使用$而不是jQuery

我在https://magento.stackexchange.com/questions/33348/uncaught-typeerror-undefined-is-not-a-function-when-using-a-jquery-plugin-in-ma

中找到了上述解决方案

过度拣选后

答案 3 :(得分: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>

答案 4 :(得分:6)

我最近使用jQuery Validation plug-in使用Squishit遇到了此问题,同时也收到了js错误:

  

“undefined不是函数”

我通过更改对 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或你捆绑的任何东西。

答案 5 :(得分:5)

对于那些仍然无法解决这个问题的人,我是通过改变我的这个&#39;来做到这一点的。到&#39; $(this)&#39;使用jQuery时。

E.G:

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

修正:

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

答案 6 :(得分:4)

我遇到了同样的问题,当错误地将名称相同的变量命名为函数时。

所以这个:

isLive = isLive(data);

失败,生成OP提到的错误消息。

修复此问题就像将上一行更改为:

一样简单
isItALive = isLive(data);

我不知道,在这种情况下它有多大帮助,但我决定把这个答案给别人寻找解决类似问题的方法。

答案 7 :(得分:4)

是的,我还修改了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>

退出&#39; min&#39;毫无根据。

感谢您的想法。

答案 8 :(得分:2)

请记住:Javascript函数是CASE SENSITIVE。

我有一个案例,我很确定我的代码会顺利运行。但仍然出现错误,我检查了谷歌浏览器的 Javascript控制台以检查它是什么。

我的错误行是

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

并收到相同的错误消息:

Uncaught TypeError: undefined is not a function

上面的代码似乎没有错,但它没有运行。我排除了近一个小时的故障,然后将其与我的其他运行代码进行比较。我的错误是它设置为SetAttribute,应为setAttribute

答案 9 :(得分: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

真正发生的是我尝试将1个回调函数(带有2个参数)传递给函数f,期望两个参数,实际上没有在cb内设置f,编译器正确报告为undefined is not a function

错误发生是因为我盲目地粘贴了回调式样板代码。 f不需要传递err参数,因此应该只是:

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

在一般情况下,我建议仔细检查功能签名和匹配arities的调用。错误消息中的调用堆栈应该能够提供有用的提示。

在您的特殊情况下,我建议在合并文件中查找两次出现的函数定义,使用不同的签名,或者对包含函数的全局变量赋值。

答案 10 :(得分: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]  *  *版权所有(c)2009 Tero Piirainen  * http://flowplayer.org/tools/  *文件生成:2009年10月7日星期三09:40:16 GMT 2009  * /

答案 11 :(得分:1)

如果有像我这样的白痴,我有这个令人沮丧的问题,因为我忘记了一个简单的

new

实例化新对象之前的

关键字。

答案 12 :(得分:0)

当我意外地将太多参数传递给只需要一个回调参数的jquery函数时,我得到了这个。

对于其他疑难解答:请确保检查所有jquery函数调用以获取额外参数。