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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 02:45:05