TypeError:$在jquery中未定义

Joh*_*n T 1 javascript wordpress jquery

我正试图在基于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 ....
Run Code Online (Sandbox Code Playgroud)

当我加载我的页面时,我在Firebug中收到错误"TypeError:$ is undefined"

经过一番谷歌搜索,我改变了所有的$.进入jQuery.

这解决了一些问题,但我得到关于该行的错误:

 $this = $(this);
Run Code Online (Sandbox Code Playgroud)

我假设我没有为jquery定义$.我尝试在函数顶部添加一行:

$ = jQuery;
Run Code Online (Sandbox Code Playgroud)

但那没用.

任何想法如何让我的行为?

我有另一个脚本,包含在:

(function($){ jQuery(document).ready(function($){
    // code in here
}); })(jQuery);
Run Code Online (Sandbox Code Playgroud)

但是tabcordion的结尾有:

(function($) {
  // tabcordion code....
}).call(this);
Run Code Online (Sandbox Code Playgroud)

而"召唤(这个)"有点让我失望?

有任何想法吗?

T.J*_*der 6

$除了包含jQuery之外,您不必为jQuery定义任何内容.该定义是jQuery脚本的一部分.

此错误告诉您三件事之一.或者:

  1. 在包含插件之前你没有包含jQuery(或者你尝试失败,例如404),或者

  2. 在加载$符号的jQuery之后加载其他东西,或者

  3. 你正在打电话jQuery.noConflict(),释放$符号.

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


评论后更新:

我正在使用一个名为"使用谷歌库"的插件.这是在运行后调用jQuery.noConflict().

首先,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);
Run Code Online (Sandbox Code Playgroud)

Re tabcordian的使用.call(this)困惑了你:

(function() {
    // ...tabcordian source...
}).call(this);
Run Code Online (Sandbox Code Playgroud)

如果你没有在函数中使用严格模式,这是完全没有意义的,而tabcordian则不是.(如果您正在使用严格模式,这是一种方法,使this继续引用全局对象函数内).但作为源从CoffeeScript的产生,这可能是样板CoffeeScript的东西,它可能这样做,以支持严格模式.

  • @TJ - 谢谢你的出色回复.我已经设法让它现在正常运作.您提供的说明非常有帮助.我对Github不够熟悉,试图"分叉"一些东西.我可能最终会把它分开;-)所以我会把它留给有经验的人.再次感谢. (2认同)