我正在尝试在基于Wordpress的网站上使用jquery中的“tabcordion”库。 tabcordion javascript文件正在“排队”并出现在jquery文件之后(因此该位看起来没问题)。
jquery代码的开头是:
(function($) {
var Tabcordion;
$.fn.tabcordion = function(option) {
return this.each(function() {
var $this, data, options;
$this = $(this);
// rest of code ....
当我加载页面时,我在Firebug中收到错误“TypeError:$ is undefined”
经过一段谷歌搜索后,我改变了所有的$。进入jQuery。
对某些问题进行了排序,但我得到了关于该行的错误:
$this = $(this);
我假设我没有为jquery定义$。我尝试在函数顶部添加一行:
$ = jQuery;
但这没效果。
我有什么想法可以让$表现出来?
我有另一个脚本包含在:
(function($){ jQuery(document).ready(function($){
// code in here
}); })(jQuery);
但是tabcordion的结尾有:
(function($) {
// tabcordion code....
}).call(this);
“打电话(这个)”有点让我失望?
有什么想法吗?
答案 0 :(得分:6)
除了包含jQuery之外,您不必为jQuery定义$
做任何事情。该定义是jQuery脚本的一部分。
此错误告诉您三件事之一。之一:
在包含插件之前你没有包含jQuery(或者你尝试失败,例如404),或者
在加载接管$
符号的jQuery后,您正在加载其他内容,或者
您正在呼叫jQuery.noConflict()
,这会释放$
符号。
根据你的$ = jQuery;
尝试没有效果,我会说它是#1。因此,请确保脚本标记位于正确的位置,并确保您没有收到404错误(或类似信息)。
更新:
我正在使用名为“使用谷歌库”的插件。这是在运行后调用jQuery.noConflict()。
首先,调用noConflict
的Wordpress插件对我来说似乎不太好。同样,tabcordian不应该完全依赖$
符号; jQuery插件不能依赖$
,因为人们可以使用noConflict
!然而,快速查看tabcordian来源显示它正是这样做的:依靠$
。
我建议分拣tabcordian并进行纠正。在插件中执行此操作的常用方法是使用(function($){
打开并以})(jQuery);
结尾,如下所示:
(function($) {
// plugin code here, can use $ because it refers to our argument,
// not the global symbol that may not be there
})(jQuery);
Re tabcordian使用混淆了你的.call(this)
:
(function() {
// ...tabcordian source...
}).call(this);
如果你没有在函数中使用严格模式,那就完全没有意义了,而tabcordian则没有。 (如果 使用严格模式,那么这是让this
继续引用函数中的全局对象的一种方法。)但是因为该源是从CoffeeScript生成的,所以这可能是样板文件CoffeeScript的东西,这可能是为了支持严格模式。