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

Bootstrap 5模态框切换问题:关闭后页面无法滚动的解决方法

Bootstrap 5模态框切换后页面无法滚动的问题解决

问题背景

通过Ajax加载内容打开Bootstrap 5模态框,后续需替换模态框内容。简化示例未使用Ajax,功能可正常触发,但关闭第二个模态框后页面无法滚动,推测是前一个模态实例未被正确关闭。

解决代码

const open_modal = document.querySelector('.modal.show');
if (open_modal) bootstrap.Modal.getInstance(open_modal).hide();

相关参考逻辑

Bootstrap官方文档中有模态框切换的相关章节,核心逻辑是先关闭已打开的模态框再打开新的,在bootstrap.js中能找到对应代码片段:

const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR$1);

if (alreadyOpen) {
  Modal.getInstance(alreadyOpen).hide();
}

示例代码

HTML代码

<div id="div_modal_container"></div>

<button type="button" class="btn btn-secondary ms-2 btn-open-form">Feedback</button>

<div id="div_ajax_answer_html1">
  <div id="div_modal_default" class="modal" tabindex="-1" aria-hidden="true" data-bs-backdrop="false">
      <div class="modal-dialog">
          <div class="modal-content">
              <div class="modal-header bg-secondary text-light">
                  <h5 class="modal-title">Feedback</h5><button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
              </div>
              <div class="modal-body">
                    <h1>First modal</h1>
              </div>
              <div class="modal-footer">
                  <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Abort</button>
                  <button type="button" class="btn btn-primary btn-send-form"> Send</button>
              </div>
          </div>
      </div>
  </div>
</div>

<div id="div_ajax_answer_html2">
  <div id="div_modal_default" class="modal" tabindex="-1" aria-hidden="true" data-bs-backdrop="false">
      <div class="modal-dialog">
          <div class="modal-content">
              <div class="modal-header bg-secondary text-light">
                  <h5 class="modal-title">Confirmation</h5><button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
              </div>
              <div class="modal-body">
                    <h1>Second modal</h1>
              </div>
              <div class="modal-footer">
                  <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">okay</button>
              </div>
          </div>
      </div>
  </div>
</div>

JS代码

$(document).ready(function()
{
  $(document).on('click', '.btn-open-form', function()
  {
    let ajax_answer_html = $('#div_ajax_answer_html1').html();
    let $modal_container = $('#div_modal_container');
    $modal_container.html(ajax_answer_html);
    let modal = bootstrap.Modal.getOrCreateInstance(document.getElementById('div_modal_default'));
    modal.show();
  });

  $(document).on('click', '.btn-send-form', function()
  {
    let ajax_answer_html = $('#div_ajax_answer_html2').html();
    let $modal_container = $('#div_modal_container');
    $modal_container.html(ajax_answer_html);
    console.log($modal_container.html());
    let modal = bootstrap.Modal.getOrCreateInstance(document.getElementById('div_modal_default'));
    modal.show();
  });
});

内容的提问来源于stack exchange,提问作者Phantom

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 18:06:40