首页 > 解决方案 > 在 jQuery 之后加载的脚本中获取“$ 未定义”

问题描述

我有一个简单的代码,它首先加载 jQuery,然后是一个使用 $ 语法的脚本。但我总是得到

ReferenceError: $ 未定义

首先我以为是因为 script 标签上的 async 属性被设置为 async,但这并没有什么不同。

网页

<script async="false" crossorigin="anonymous" integrity="sha256-WpOohJOqMqqyKL9FccASB9O0KwACQJpFTUBLTYOVvVU=" src="https://code.jquery.com/jquery-3.4.1.js" type="application/JAVASCRIPT"></script>

<script async="async" src="/SCRIPT/Creator/Creator.js" type="application/JAVASCRIPT"></script>

创造者.js

$(document).ready(() => {
  function CloseModalBackground() {
    ....
  }
});

//# sourceMappingURL=Creator.js.map

演示问题的实时片段:

<script async="false" crossorigin="anonymous" integrity="sha256-WpOohJOqMqqyKL9FccASB9O0KwACQJpFTUBLTYOVvVU=" src="https://code.jquery.com/jquery-3.4.1.js" type="application/JAVASCRIPT"></script>

<script>
// jQuery *should* be defined by now, right But no:
console.log(typeof $);
</script>

标签: javascriptjqueryhtml

解决方案


为了阐明为什么删除该async属性有效,它是一个布尔属性,并且根据规范

许多属性是布尔属性。元素上存在布尔属性表示真值,不存在该属性表示假值。如果存在该属性,则其值必须是空字符串或与属性的规范名称匹配的不区分大小写的 ASCII 值,并且没有前导或尾随空格。

所以async=false, whereasync是一个布尔属性,仍然意味着布尔属性是真实的,因为该属性存在。属性中包含什么并不重要,但为了避免混淆,如果它有一个值,则该值应该是属性的名称或空字符串。

MDN在这方面的文档具有误导性。已修复,感谢 Andrew-Cotterell。实际使被认为是错误的唯一方法async是确保脚本元素上根本不存在该属性。


推荐阅读