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

gho*_*der 103 javascript jquery minify

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

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

    Uncaught TypeError: undefined is not a function

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

我该怎么做才能缓解这种情况?我想连接所有文件并缩小它们以进行生产.请帮忙.


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

小智 175

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

作为单独的文件,脚本将加载正常,但作为一个单独的文件,您需要分号.

  • +1.连接JavaScript代码时,总是应该以分号连接它们.其中太多仍然有效,而不会导致错误. (18认同)
  • 调试非常棘手.谢谢你真正有效的答案! (9认同)
  • Bootstrap的js显然是一个这样的例子.谢谢你!那是一个真正的面条刮痕. (5认同)

小智 27

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

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


小智 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中找到了上述解决方案

榨了太多之后


scw*_*scw 15

我对两个不同版本的jQuery的引用有同样的错误.

在我的母版页面中:

<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js"></script>
Run Code Online (Sandbox Code Playgroud)

还在页面上:

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"> </script>
Run Code Online (Sandbox Code Playgroud)


Ral*_*lle 6

我最近使用jqu Validation插件遇到了这个问题,使用Squishit,也得到了js错误:

"undefined不是一个函数"

我通过更改对未分析的 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
Run Code Online (Sandbox Code Playgroud)

我认为某些文件的缩小版本,例如,当使用Squishit进一步压缩时,可能在某些情况下不会处理丢失的分号等,正如@Dustin建议的那样,所以你可能不得不尝试使用哪些文件双重压缩,你只需要留给Squishit或任何你捆绑的东西.


tre*_*der 5

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

所以这:

isLive = isLive(data);
Run Code Online (Sandbox Code Playgroud)

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

解决这个问题就像将上面的行更改为:

isItALive = isLive(data);
Run Code Online (Sandbox Code Playgroud)

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


小智 5

是的,我也修复了它在 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>
Run Code Online (Sandbox Code Playgroud)

为了:

<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>
Run Code Online (Sandbox Code Playgroud)

退出 'min' 为 unminified。

谢谢你的想法。


Jac*_*son 5

对于那些仍然无法解决这个问题的人,我在使用jQuery时将'this'更改为'$(this)'.

例如:

$('.icon').click(function() {
    this.fadeOut();
});
Run Code Online (Sandbox Code Playgroud)

固定:

$('.icon').click(function() {
    $(this).fadeOut();
});
Run Code Online (Sandbox Code Playgroud)