我正在构建一个普通网页,要求我加载大约五个CSS文件和十个Javascript文件。
现在进行制作,我将所有Javascript连接到一个文件中,按所需顺序连接,将所有CSS连接到另一个文件中。但是当我尝试使用连接文件运行网页时,它会抛出错误说:
Uncaught TypeError: undefined is not a function
在连接的Javascript文件中加载jquery.min.js的行。
我可以做些什么来缓解这种情况?我想连接所有文件并缩小它们以进行生产。请帮忙。
编辑:我按照他们单独加载时的顺序合并了Javascript和CSS,并且工作正常。
答案 0 :(得分:175)
假设此问题仍未解决,许多单个文件不会以分号结束其代码。大多数jQuery脚本以(jQuery)
结尾,您需要(jQuery);
。
作为单独的文件,脚本将加载得很好,但作为一个单独的文件,您需要分号。
答案 1 :(得分:27)
您可能需要重新检查合并文件的顺序, 它应该是这样的:
答案 2 :(得分:17)
此解决方案适合我
;(function($){ // your code })(jQuery);
将代码移到闭包中并使用$而不是jQuery
中找到了上述解决方案过度拣选后
答案 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控制台以检查它是什么。
我的错误行是
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函数调用以获取额外参数。