javascript - jquery 在依赖 jquery 的脚本之前加载,但后者仍然说“$ 未定义”
问题描述
在我的 HTML 页面上,我有以下加载 JS 文件的方式:
<script id="jjquery"></script>
<script id="jscookie"></script>
<script id="winx"></script>
<script>
(function(){
if(screen.width > 479)
document.querySelector("#jjquery").setAttribute("src", "/js/jquery-3.3.1.min.js");
document.querySelector("#jscookie").setAttribute("src", "/js/jscookie.js");
document.querySelector("#winx").setAttribute("src", "/js/winx.js");
}());
</script>
基本上,我使用此答案中描述的方式仅从特定屏幕分辨率开始加载某些脚本。但是依赖 jquery 的三个脚本中的第三个脚本不起作用并说$ is not defined
. 即使我进入$
控制台,它也会返回正常响应。当我在 HTML 输出中看到脚本的顺序时,很明显 jquery 是在其他两个脚本之前加载的。这里可能是什么问题?
PS如果我只是正常加载脚本而不进行分辨率检查,一切都可以正常工作。
解决方案
问题是脚本是异步加载的,因此代码的顺序不相关。
您可以查看MDN 示例,了解如何正确导入脚本。
在您的情况下,如果您的某些脚本依赖于 jquery,您可以创建一个onLoadJquery
函数并将其附加为onload
脚本的属性,该函数将在导入后执行。
<script>
(function(){
if(screen.width > 479) {
// add the callback that will be executed once jquery is loaded
document.querySelector("#jjquery").addEventListener("load", onLoadJquery);
document.querySelector("#jjquery").setAttribute("src", "/js/jquery-3.3.1.min.js");
document.querySelector("#jscookie").setAttribute("src", "/js/jscookie.js");
}
function onLoadJquery() {
// safely import the rest of the scripts
document.querySelector("#winx").setAttribute("src", "/js/winx.js");
}
}());
</script>
推荐阅读
- r - 我怎样才能有下拉“输入块”?
- javascript - 为什么匿名函数不能作为默认值的函数参数?
- push-notification - 使用 Firebase 为每个用户设备自定义推送通知设置
- windows - 使用 windows Installer 进行 Chrome 安装?
- nativescript - ios发布构建代码签名不起作用
- python - Django中的NoReverseMatch?
- java - JAVA get request with authorization header value
- tensorflow - 输入值范围与损失收敛之间的联系
- php - 如何使用 Symfony 3.4 组件更新实体
- kotlin - 无法返回 http 请求的正文