Rails 7用--css bootstrap创建应用后Turbo按钮确认弹窗失效如何修复?
修复Rails 7中Turbo确认框不弹出的问题
问题原因
你将turbo_confirm属性绑定到了form元素上,但Turbo的确认逻辑更适配绑定在触发提交的按钮/链接元素上;同时Bootstrap的JS可能会拦截按钮点击事件,干扰Turbo的默认行为。
解决方案
方案1:直接给button元素添加turbo_confirm
修改button_to的参数,将data: { turbo_confirm: ... }直接作为按钮的HTML属性,而非嵌套在form选项中:
= button_to "Sign out", edit_post_path, method: :delete, data: { turbo_confirm: "Are you sure?" }
此写法会将data-turbo-confirm直接渲染到按钮标签上,Turbo能正确识别并触发确认弹窗。
方案2:改用link_to模拟DELETE请求
如果button_to的方式仍有问题,可改用link_to,通过data-turbo-method模拟DELETE方法,同时添加确认属性:
= link_to "Sign out", edit_post_path, data: { turbo_method: :delete, turbo_confirm: "Are you sure?" }, class: "btn btn-danger"
这种方式更简洁,Turbo对链接的属性支持也更稳定。
方案3:确保Turbo正确加载
检查app/javascript/application.js中是否已正确引入Turbo:
import "@hotwired/turbo-rails"
如果存在Turbo.session.drive = false这类禁用代码,需移除或调整,确保Turbo驱动模式正常启用。
方案4:处理Bootstrap与Turbo的冲突
若Bootstrap JS拦截了事件,可尝试给按钮添加data-bs-toggle="button",或在Turbo加载后重新初始化Bootstrap组件:
// 在application.js中添加 document.addEventListener('turbo:load', () => { const buttons = document.querySelectorAll('[data-bs-toggle="button"]'); buttons.forEach(button => new bootstrap.Button(button)); });
内容的提问来源于stack exchange,提问作者Honker
相关产品推荐
相关产品推荐

