如何强制 jQuery 先加载?

How do I force jQuery to load first?

我正在尝试将 bootstrap-select 添加到我的 Flask 应用程序中,但我将 运行 保留在错误 "TypeError: $(...).selectpicker is not a function" 中。我读过的所有内容都说只有在加载 bootstrap-select.js 后再次加载 jQuery 时才会发生这种情况,所以我检查并清理了我的脚本,确保 jQuery 是在我所有其他 JS 脚本之前加载,如下所示:

<script src="http://code.jquery.com/jquery-1.12.4.min.js" integrity="sha256-ZosEbRLbNQzLpnKIkEdrPv7lOy9C27hHQ+Xp8a4MxAQ=" crossorigin="anonymous"> </script>
...
<script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-select/1.13.1/js/bootstrap-select.min.js"></script>

但是,我仍然遇到同样的问题。我决定查看 chrome 开发人员工具 window 中的加载顺序,现在我认为我的问题是:jQuery 正在 排队 用于在 bootstrap-select 之前加载,但实际上 开始 下载直到 bootstrap-select 已经完成完成的。我怀疑这是因为两者之间的大小不同。

有什么方法可以强制我的其他脚本延迟加载,直到 jQuery 已经加载?或者,如果我弄清楚如何在我的静态目录中缓存 jQuery 的副本,那会有帮助吗?

编辑:哇,好的,我收到了很多评论!为了尽可能多地澄清,我只是做一些笔记:

尽管如此,我仍然会遇到同样的错误,所以如果有人有其他建议,我将不胜感激。在这一点上我完全没有想法。

尝试将 bootstrap select 库的 URL 更改为:

https://cdnjs.cloudflare.com/ajax/libs/bootstrap-select/1.13.1/js/bootstrap-select.min.js

你应该把 defer 放在两个脚本标签的末尾,这样无论如何它们都会按顺序加载,就像这样:

<script src="http://code.jquery.com/jquery-1.12.4.min.js" integrity="sha256-ZosEbRLbNQzLpnKIkEdrPv7lOy9C27hHQ+Xp8a4MxAQ=" crossorigin="anonymous" defer></script>
...
<script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrapselect/1.13.1/js/bootstrap-select.min.js" defer></script>

我有解决方案,但它非常愚蠢。

我将我的脚本添加到以前的开发人员添加他们的脚本的相同位置,在我所有其他模板扩展的基本模板中。问题是,他们在 body 标签关闭后将其添加到页面末尾(大概是为了加快页面加载速度)。使用 selectpicker 的 jQuery 的一小部分是 正文中,因此试图过早地加载函数。

感谢您的所有回答!