Bootstrap Card内部嵌套modal点击仅显示fade效果无法弹出如何解决
关于Bootstrap Card内嵌套Modal的问题解答
核心结论
可以在Bootstrap Card内部嵌套Modal,你遇到的弹出异常不是嵌套层级导致的,核心原因是ID重复冲突。
你的代码通过循环渲染多条预约记录,每一条预约对应的Modal都写死了id="myModal",触发按钮的data-bs-target也统一指向#myModal,当页面存在多个相同ID的元素时,Bootstrap的Modal触发逻辑就会异常,因此只会出现fade动画但无法正常弹出完整Modal。
可行实现方案
方案1:动态生成唯一Modal ID(你已验证可用)
借助每条预约记录的唯一ID生成对应的Modal ID和触发目标,避免ID重复,不需要调整Modal嵌套位置,也不用修改原有表单参数传递逻辑,修改示例如下:
<% if Date.current.strftime('%Y-%m-%d') == data.formatted_date_time_for_comparison %> <%= f.submit 'Cancel Booking', class: "btn btn-danger" %> <% else %> <!-- 用预约ID动态生成目标绑定值 --> <button type="button" class="btn btn-danger" data-bs-toggle="modal" data-bs-target="#cancelModal-<%= data.id %>">Cancel Booking</button> <!-- Modal ID同步用预约ID区分 --> <div class="modal fade text-dark" id="cancelModal-<%= data.id %>"> <div class="modal-dialog modal-sm"> <div class="modal-content"> <div class="modal-header"> <h3 class="modal-title">Confirm Cancellation</h3> <button type="button" class="btn-close" data-bs-dismiss="modal"></button> </div> <div class="modal-body"> Are you sure you want to cancel this booking? </div> <div class="modal-footer"> <%= f.submit 'Cancel Booking', class: "btn btn-danger" %> <button type="button" class="btn btn-primary" data-bs-dismiss="modal">Close</button> </div> </div> </div> </div> <% end %>
方案2:全局共用单个Modal动态传参
如果页面预约数据量较大,可以把单个Modal放在页面最外层,点击触发按钮时通过JS把当前预约的表单提交逻辑、提示内容等参数动态注入到Modal中,减少冗余DOM节点。
内容的提问来源于stack exchange,提问作者teduniq
相关产品推荐
相关产品推荐

