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

Ruby on Rails应用中jQuery无法正常工作的问题求助

解决Rails新项目中jQuery无法正常工作的问题

核心问题分析

你当前代码同时混用了ES模块的import语法和Sprockets的//= require语法,导致模块系统冲突,出现Uncaught SyntaxError: Cannot use import statement outside a module错误;加上Turbo的页面加载机制影响事件绑定时机、jQuery未全局挂载,最终导致功能失效。

修复步骤

1. 重构application.js,统一使用ES模块语法

删除所有//= require语句,改用ES模块导入,并将jQuery挂载到全局:

import "@hotwired/turbo-rails"
import "controllers"
import $ from 'jquery'
import 'jquery_ujs'
import './menu.js'

// 将jQuery挂载到全局window对象,确保其他文件能直接使用$和jQuery
window.$ = $
window.jQuery = $

2. 调整menu.js的事件绑定逻辑,适配Turbo加载机制

由于Turbo会动态加载页面内容,直接绑定事件可能在DOM未渲染完成时执行,需监听Turbo的加载事件:

document.addEventListener('turbo:load', () => {
  $(".star").on('click', function () {
    $(".star").hide();
  });
});

或者使用jQuery的ready方法兼容传统加载:

$(document).ready(() => {
  $(".star").on('click', function () {
    $(".star").hide();
  });
});

3. 修正layout中的JavaScript引入标签

根据你的Rails配置选择正确的引入方式:

  • 若使用Importmap(Rails 7默认):
    <%= javascript_importmap_tags %>
    
  • 若使用jsbundling(如esbuild/webpack):
    <%= javascript_include_tag "application", "data-turbo-track": "reload" %>
    

注意不要同时混用两种引入方式。

4. 重启Rails服务器

所有配置修改完成后,必须重启服务器才能让变更生效。

其他错误说明

  • 预加载相关错误:属于浏览器资源加载的警告,核心功能修复后可忽略,若要解决可检查importmap的crossorigin配置。
  • 扩展程序的source map错误:是浏览器扩展的问题,与你的项目无关,无需处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 12:15:31