TypeError:$在jquery中未定义

时间:2014-02-09 14:32:06

标签: javascript jquery wordpress

我正在尝试在基于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);

“打电话(这个)”有点让我失望?

有什么想法吗?

1 个答案:

答案 0 :(得分:6)

除了包含jQuery之外,您不必为jQuery定义$做任何事情。该定义是jQuery脚本的一部分。

此错误告诉您三件事之一。之一:

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

  2. 在加载接管$符号的jQuery后,您正在加载其他内容,或者

  3. 您正在呼叫jQuery.noConflict(),这会释放$符号。

  4. 根据你的$ = 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的东西,这可能是为了支持严格模式。