javascript - 在 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>
解决方案
为了阐明为什么删除该async
属性有效,它是一个布尔属性,并且根据规范:
许多属性是布尔属性。元素上存在布尔属性表示真值,不存在该属性表示假值。如果存在该属性,则其值必须是空字符串或与属性的规范名称匹配的不区分大小写的 ASCII 值,并且没有前导或尾随空格。
所以async=false
, whereasync
是一个布尔属性,仍然意味着布尔属性是真实的,因为该属性存在。属性中包含什么并不重要,但为了避免混淆,如果它有一个值,则该值应该是属性的名称或空字符串。
MDN在这方面的文档具有误导性。已修复,感谢 Andrew-Cotterell。实际使被认为是错误的唯一方法async
是确保脚本元素上根本不存在该属性。
推荐阅读
- c++ - 安装 Catch2 时出现错误 MSB3073
- html - 如何在页眉和页脚中向下移动内容?
- python - 在 Ubuntu 中重新启动崩溃的 Python 脚本?
- typescript - Retaining strong typing with an optional parameter
- angular - 按钮单击时的反应式表单验证
- docker - 启动容器进程导致:exec:“entrypoint.sh”:$PATH 中找不到可执行文件
- python - Extract any basic math expression from arbitrary text using Python
- winapi - CreateProcess from an impersonated thread
- python-3.x - How to add another URL to the base URLs in a list?
- jpql - How do you subqueries JPQL?