Rails 7.0.4中link_to的data-confirm功能失效求助
检查UJS加载状态
Rails 7默认移除了jquery-ujs,改用rails-ujs处理这类交互。若已移除turbo,需确保app/javascript/application.js中包含import "@rails/ujs",且布局文件通过javascript_importmap_tags或javascript_include_tag正确加载该文件。打开浏览器控制台执行Rails,若能输出对象则说明ujs加载正常。确认渲染与属性正确性
检查生成的HTML中data-confirm属性值是否正确,同时避免用#作为href(可能触发默认锚点行为干扰),可临时替换为javascript:void(0)或真实路径测试。排查事件冲突
检查页面内是否有其他JS代码通过event.preventDefault()或event.stopPropagation()拦截了链接点击事件。可在控制台执行以下代码监听事件:document.querySelector('a[data-confirm]').addEventListener('click', (e) => console.log(e))点击链接时查看控制台是否输出事件对象,判断是否被拦截。
清理缓存与依赖校验
用无痕模式测试或清除浏览器缓存,避免旧JS缓存影响。检查Gemfile.lock中rails-ujs版本与Rails 7.0.4兼容,执行bundle update rails-ujs更新依赖。若用importmap,确认config/importmap.rb中已添加pin "@rails/ujs", to: "rails-ujs.js"。原生JS兜底方案
若以上方法均无效,可直接用原生JS绑定确认逻辑:document.addEventListener('DOMContentLoaded', function() { document.querySelectorAll('a[data-confirm]').forEach(link => { link.addEventListener('click', function(e) { if (!confirm(this.dataset.confirm)) { e.preventDefault(); e.stopPropagation(); } }); }); });将这段代码添加到
app/javascript/application.js即可。
内容的提问来源于stack exchange,提问作者Wordica

