【问题标题】:Uncaught SyntaxError: Identifier '$' has already been declared未捕获的 SyntaxError:标识符“$”已被声明
【发布时间】:2021-10-25 23:56:19
【问题描述】:

我在 WordPress 网站上的 JQuery 代码中收到以下错误。

Uncaught SyntaxError: Identifier '$' has already been declared

背景

在 WordPress 中,有时$ 标识符未定义为 jQuery。因此,您必须手动将 $ 设置为 jQuery,这样您就可以在代码中使用 $ 作为简写。

我在脚本顶部添加了简单的代码var $ = jQuery;,最初解决了这个问题。但是,最近我收到了上面显示的has already been declared 错误。基于一些谷歌搜索,我尝试了很多东西,并想出了以下代码来尝试解决这个问题。但我仍然得到同样的错误。 try...catch 根本没有帮助,if typeof... 也没有帮助

try {
  if (typeof $ !== 'undefined') {
    console.log("$ is already defined");
  } else {
    console.log("$ is not defined");
    var $ = jQuery;
  }
}
catch(err) {
  console.log("Error caught: " +  err.message);
}

免责声明

我知道这个问题的原因。一些先前的脚本已经在全局 window 上下文中声明了变量 $。很可能是一个插件正在这样做。但是,我不能保证它总是被正确声明,所以我不能只删除我的声明。另外,由于这是语法错误,我猜我的try...catch 和我的if typeof... 基本上没用。

我需要什么

我正在寻找一种方法来检查$ 是否已声明,然后仅在尚未声明时声明它。 我知道,这是一种糟糕的编码风格,但不幸的是,这是 WordPress,我无法控制整个代码库。另一个插件可能已经或可能没有声明它,这就是我所处的情况。如果有人知道,我会很高兴回答!

【问题讨论】:

  • 美元通常被其他 JavaScript 库使用。如果您必须使用它(而不是其他别名,或者只是jQuery),请将您的代码包装在jQuery(function($){} 中。这会将别名仅应用于该函数包装器的范围。

标签: jquery wordpress


【解决方案1】:

“很遗憾,这是 WordPress,我无法控制整个代码库。”

嗯,这是一个大胆的主张,我认为这不一定是真的!

话虽如此,您在问题的“我需要什么”部分提出的要求会让您的生活更加艰难,因此不建议这样做。如果您认为 jquery 中的 $ 与其他 javascript 库中的 $ 冲突,请在您的 wordpress 项目中使用以下工作流程:

  1. 确保jquery 确实被加载到您的页面上(代码进入您活动主题的functions.php 文件):
add_action('wp_enqueue_scripts', 'your_theme_files');

function your_theme_files()
{
  wp_enqueue_script('jquery');
}
  1. 正如 @isherwood 在 cmets 中建议的那样,将您的 jquery 代码包装成以下语法,以确保使用的 $ 实际上是来自 jquery$
jQuery(document).ready( $ => {

  // WRITE YOUR JQUERY CODE HERE!

});

通过使用我刚才提到的工作流程:

  1. 您的代码将更易于阅读和维护。
  2. 来自不同库的$ 标志之间不会有任何冲突。

【讨论】:

    【解决方案2】:

    如果try...catch 指令没有返回要求的值(无论是错误还是赋值),这意味着您期望在进程停止后调用它。

    您必须将脚本放在节中的脚本之上。
    我相信最快捷的方法是使用Theme Editor 插件。

    您检查$ 的方式没问题。您可以使用 instanceof 运算符来确保它是函数的实例。我强烈建议在所有事情上都这样做。

    【讨论】:

      猜你喜欢
      • 2021-09-29
      • 2018-07-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-26
      • 2021-03-28
      • 1970-01-01
      相关资源
      最近更新 更多