【问题标题】:TypeError: $ is undefined in jquery类型错误:$ 在 jquery 中未定义
【发布时间】:2014-02-09 14:32:05
【问题描述】:

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

“呼叫(这个)”位让我失望了?

有什么想法吗?

【问题讨论】:

  • 只要把你的 $ 改成 jQuery 就可以了,如果你已经加载了 jquery 就可以了
  • @AmitGarg:问题不在于 OP 的代码。这是tabcordian。

标签: javascript jquery wordpress


【解决方案1】:

除了包含 jQuery 之外,您无需为 jQuery 定义 $。该定义是 jQuery 脚本的一部分。

这个错误告诉你三件事之一。要么:

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

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

  3. 您正在调用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);

关于 tabcordian 对 .call(this) 的使用让您感到困惑:

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

如果你没有在函数中使用严格模式,那是完全没有意义的,而 tabcordian 不是。 (如果您正在使用严格模式,这是一种让this 继续引用函数中的全局对象的方法。)但是由于该源是从 CoffeeScript 生成的,这可能是样板的 CoffeeScript 内容它可能这样做是为了支持严格模式。

【讨论】:

  • 我正在使用一个名为“使用谷歌库”的插件。那是在运行后调用 jQuery.noConflict() 。有没有办法“撤消”这个,以便我将 $ 重新定义为 jQuery?我宁愿不编辑插件,因为任何更新都会重新引入问题。谢谢。
  • @JohnT:我已经更新了答案以解决您的评论以及您关于.call(this) 的原始问题末尾的问题。
  • @TJ - 感谢您的出色回复。我现在已经设法让它工作了。您提供的说明很有帮助。我对 Github 不够熟悉,无法尝试“分叉”一些东西。我可能最终只是把它分叉了;-)所以我会把它留给有更多经验的人。再次感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-10-31
  • 1970-01-01
  • 1970-01-01
  • 2016-08-07
  • 2019-01-07
  • 2020-01-28
  • 2021-10-24
相关资源
最近更新 更多