在 jQuery 之后加载的脚本中获取"$ is not defined"



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

引用错误: $ 未定义

首先,我以为这是因为脚本标签上的异步属性设置为异步,但这并没有区别。

目录

<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,其中async是一个布尔属性,仍然意味着布尔属性是真实的,因为该属性存在。属性中包含的任何内容并不重要,但为了避免混淆,如果它有值,则该值应该是属性的名称或空字符串。

MDN关于这一点的文档具有误导性。固定,谢谢安德鲁-科特雷尔。实际使async被视为 false 的唯一方法是确保脚本元素上根本不存在该属性。

删除脚本标签上的异步属性对我有用。

编辑:是的,无论分配给异步属性的值如何,一旦它存在,脚本将被异步调用。

$(document).ready(function(){
alert("Hello World!");
});
<script crossorigin="anonymous" integrity="sha256-WpOohJOqMqqyKL9FccASB9O0KwACQJpFTUBLTYOVvVU=" src="https://code.jquery.com/jquery-3.4.1.js" type="application/JAVASCRIPT"></script>

相关内容

最新更新