You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Bootstrap菜单无法展开求助:引入JQuery后仍无效

Bootstrap 菜单无法展开的问题排查与修复

问题根源分析

你的代码里存在几个关键问题,直接导致菜单无法正常展开:

  • 重复引入jQuery且版本混乱:同时加载了jQuery 2.1.3、jQuery 3.2.1 slim版,slim版移除了Bootstrap依赖的$.fn.modal、$.fn.dropdown等核心方法,即便控制台没提示jQuery缺失,功能也会异常。
  • Bootstrap版本冲突:同时加载了Bootstrap 3.3.5和Bootstrap 4.0.0的JS文件,两个版本的组件逻辑冲突,导致菜单初始化失败。
  • 脚本加载顺序错误:Popper.js是Bootstrap 4必需的依赖,但你把它放在了Bootstrap 3 JS之后、Bootstrap 4 JS之前,顺序完全不对;且自定义的application.js用了defer,可能导致DOM加载完成后脚本初始化时机异常。

修复后的代码示例

application.html.erb

<!DOCTYPE html>
<html>
  <head>
    <title>Peachux</title>
    <meta name="viewport" content="width=device-width,initial-scale=1">
    <%= csrf_meta_tags %>
    <%= csp_meta_tag %>

    <%= stylesheet_link_tag "application", "data-turbo-track": "reload" %>
    <link href="https://assets.calendly.com/assets/external/widget.css" rel="stylesheet">
    <script src="https://kit.fontawesome.com/b43f353bd3.js" crossorigin="anonymous"></script>
  </head>

  <body>
    <%= render "shared/navbar" %>
    <%= render "shared/flashes" %>
    <%= yield %>
    <%= render "shared/footer" %>

    <!-- 脚本移到body末尾,避免阻塞渲染,保证加载顺序正确 -->
    <%= javascript_include_tag "application", "data-turbo-track": "reload" %>
    <script src="https://code.jquery.com/jquery-3.4.1.min.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/popper.js@1.12.9/dist/umd/popper.min.js" integrity="sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q" crossorigin="anonymous"></script>
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@4.0.0/dist/js/bootstrap.min.js" integrity="sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl" crossorigin="anonymous"></script>
    <script src="https://assets.calendly.com/assets/external/widget.js" type="text/javascript" async></script>
  </body>
</html>

额外说明

  1. 移除了所有重复的jQuery和Bootstrap 3 JS,只保留与你scss中Bootstrap版本匹配的Bootstrap 4 JS。
  2. 把所有脚本移到</body>标签前,保证DOM完全加载后再执行脚本,避免菜单元素未渲染就初始化的问题。
  3. 保留了Calendly和Font Awesome的资源,调整位置以优化加载顺序。
  4. 如果你的application.js里有自定义Bootstrap初始化代码,确保不要重复调用组件初始化方法,Bootstrap 4会自动初始化带有data-toggle等属性的元素。

内容的提问来源于stack exchange,提问作者PeachSandwich

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 13:35:12