我有一个简单的代码,首先加载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>