Uncaught TypeError:undefined不是加载jquery-min.js的函数

我build立一个正常的网页,要求我加载大约五个CSS文件和十个JavaScript文件。

  • 当在HTML页面中分别加载它们时,我的网页加载正常。
  • 现在为了生产,我把所有的Javascript连接成一个文件,按照需要的顺序,把所有的CSS连接到另一个文件中。 但是,当我尝试运行连接文件的网页时,它会抛出一个错误:

    Uncaught TypeError: undefined is not a function

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

我可以做些什么来减轻这一点? 我想连接所有文件并将其缩小以供生产。 请帮忙。

编辑:我合并的Javascript和CSS的顺序,当他们被单独加载,并正常工作。

假设这个问题仍然没有得到解决,许多单独的文件不会用分号结束它们的代码。 大多数jQuery脚本以(jQuery)结尾,你需要有(jQuery);

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

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

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

我有两个引用不同版本的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> 

这个解决scheme为我工作


     (函数($){
         //你的代码
     })(jQuery的);

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

我在https://magento.stackexchange.com/questions/33348/uncaught-typeerror-undefined-is-not-a-function-when-using-a-jquery-plugin-in-mafind上述解决scheme

之后太多了

我最近用jQueryvalidation插件 ,使用Squishit ,也得到了js错误:

“未定义不是一个函数”

我通过更改引用到未定义的 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或任何你捆绑。

对于那些仍然无法解决这个问题的人来说,当我使用jQuery时,将“this”改为“$(this)”。

例如:

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

固定:

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

我遇到了同样的问题,当错误地命名variables与同名,作为函数。

所以这:

 isLive = isLive(data); 

失败,产生OP的提到的错误信息。

解决这个问题就像上面的改变一样简单:

 isItALive = isLive(data); 

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

是的,我也修正了它在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”是没有根据的。

感谢您的想法。

记住:Javascript函数是CASE SENSITIVE。

我有一个我很确定我的代码能够顺利运行的情况。 但是,仍然出现错误,我检查了Google Chrome浏览器的Javascript控制台 ,看看它是什么。

我的错误行是

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

并得到相同的错误信息:

 Uncaught TypeError: undefined is not a function 

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

我只是有与下面的代码(在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 

真正发生的事情是,我试图传递1callback函数(带2个参数)函数f期望两个参数,有效地不设置f cb ,编译器正确报告为undefined is not a function

这个错误发生是因为我一味地粘贴了callback式的样板代码。 f不需要传递给它的err参数,因此应该简单地是:

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

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

在你的特殊情况下,我build议寻找在合并文件中出现两次的函数定义,它们具有不同的签名或赋值给全局variables的函数。

确保你已经评论了任何评论。 有时候复制和粘贴时,你会忽略“/ *!”

另外当你进入控制台时,他们会列出你的错误,你应该一次一个。 如果您看到“Uncaught SyntaxError:Unexpected token *”,那可能意味着它正在读取您的js文件,并且没有越过第一行。

/ *! * jquery.tools 1.1.2 – 缺less的用于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/ *文件生成:Wed Oct 07 09:40:16 GMT 2009 * /

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

new

关键字在实例化一个新的对象之前。

当我不小心将太多的parameter passing给只有预期一个callback参数的jquery函数时,我得到了这个。

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