2014-02-09 117 views
1

我试图在基于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 .... 

当我打开我的网页出现错误“类型错误:$未定义”萤火虫

有点谷歌搜索我改变了所有的后$。到jQuery中。

进行排序的一些问题,但是现在我则获得有关行错误:

$this = $(this); 

我假设我没有jQuery的定义$。我试图在功能的顶部添加一行:

$ = jQuery; 

但这并不奏效。

任何想法,我可以得到美元的行为?

我有工作的另一个脚本由封闭:

(function($){ jQuery(document).ready(function($){ 
    // code in here 
}); })(jQuery); 

但tabcordion年底有:

(function($) { 
    // tabcordion code.... 
}).call(this); 

与 “呼叫(本)” 位被扔我吗?

任何想法?

+0

只是把你的$改为jQuery,如果你已经加载了jquery,它就会工作 –

+0

@AmitGarg:这不是问题所在的OP代码。它是tabcordian。 –

回答

6

除了包含jQuery,您无需为使jQuery定义$做任何事情。该定义是jQuery脚本的一部分。

这个错误告诉你三件事情之一。或者:

  1. 您还没有包括的jQuery插件(或者你的尝试已经失败,例如404),或

  2. 你加载的jQuery后装其他东西在此之前,正在接管$符号,或者

  3. 您正在调用jQuery.noConflict(),它会释放$符号。

根据您的$ = jQuery;尝试没有工作,我会说它是#1。因此,请确保脚本标记位置正确,并确保您没有收到404错误(或类似错误)。


更新您的评论后:

I'm using a plugin called "use google libraries". That is calling jQuery.noConflict() after it has run.

首先,一个WordPress插件调用noConflict似乎是一个坏主意给我。同样,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); 

再tabcordian的使用.call(this)那让你感到困惑:

(function() { 
    // ...tabcordian source... 
}).call(this); 

这是毫无意义的,如果你在函数内不使用严格模式,而tabcordian不是。 (如果使用严格模式,这是一种使this继续引用函数中的全局对象的方法。)但是,由于该源代码是从CoffeeScript生成的,所以这可能是样板CoffeeScript的东西,它可能是为了支持严格模式。

+0

我正在使用名为“使用谷歌库”的插件。这是运行后调用jQuery.noConflict()。有没有'撤消'这种方式,以便我重新定义$为jQuery?我宁愿不编辑插件,因为任何更新都会重新引入问题。谢谢。 –

+0

@JohnT:我已经更新了答案,以解决您的评论以及关于'.call(this)'的原始问题末尾的问题。 –

+2

@TJ - 感谢您的优秀回复。我已经设法让它现在工作。您提供的说明非常有帮助。我对Github不够熟悉,为的是尝试“分岔”某些东西。我可能最终只是把它分开;-)所以我会把它留给有更多经验的人。再次感谢。 –

相关问题