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);
。
作为单独的文件脚本将加载得很好,但作为一个单独的文件,你需要分号。
您可能需要重新检查合并文件的顺序,它应该是这样的:
- jquery.min.js
- jQuery的ui.js
- 您加载的任何第三方插件
- 你的自定义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
之后太多了
我最近用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函数调用额外的参数。