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

Rails 7中jQuery无法正常工作,控制台提示$未定义

Rails 7 + Bootstrap 5 全局jQuery未定义问题排查方案
  • 检查Importmap的jQuery配置
    确认config/importmap.rb里正确导入并全局暴露jQuery:

    pin "jquery", to: "https://ga.jspm.io/npm:jquery@3.7.1/dist/jquery.js"
    # 关键:暴露全局变量$和jQuery
    pin "jquery", to: "jquery", preload: true
    

    用jquery-rails gem的话,要确保gem已安装且pin路径正确,不过Rails 7用Importmap更推荐直接通过jspm导入。

  • 调整application.js的加载顺序
    在app/javascript/application.js里,必须先完成jQuery的全局暴露,再加载Bootstrap和自定义脚本:

    // 先导入jQuery
    import jquery from "jquery"
    // 挂载到全局window对象,让$和jQuery随处可用
    window.jQuery = jquery
    window.$ = jquery
    
    // 再导入Bootstrap
    import "bootstrap"
    
    // 最后加载你的画廊脚本
    import "./gallery"
    
  • 验证jQuery是否全局挂载
    打开Chrome控制台,直接输入$或jQuery,如果返回函数说明全局可用;如果还是undefined,去Network标签看jQuery文件的请求状态,确认是否加载成功、有没有404或者加载延迟。

  • 避免重复导入冲突
    不要同时用gem和CDN导入jQuery,二选一:

    • 选CDN的话,就在application.html.erb里把jQuery的script标签放在所有脚本之前:
      <script src="https://code.jquery.com/jquery-3.7.1.min.js"></script>
      <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
      <%= javascript_importmap_tags %>
      
      同时删掉Importmap里的jQuery配置,防止重复加载。
  • 确保自定义脚本执行时机正确
    画廊脚本要等DOM加载完成再执行,不然不仅找不到元素,还可能因为jQuery未挂载报错:

    // app/javascript/gallery.js
    $(document).ready(function() {
      $('.gallery-item').click(function() {
        $(this).addClass('active');
      });
    });
    

    或者用原生DOM事件:

    document.addEventListener('DOMContentLoaded', function() {
      $('.gallery-item').click(function() {
        $(this).addClass('active');
      });
    });
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 08:45:36