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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 04:35:52