多个 bootstrap 模式的滚动问题

Scrolling issues with multiple bootstrap modals

我有一个包含大量信息的模态页面,因此您需要滚动。此模态包含 link 到第二个模态。

当我

modal 1 松动滚动(仍然有一个滚动条,但它什么都不做)。相反,模态保持在打开模态 2 时的位置。

我试过先用 js 关闭背景模态(但这会弄乱第二个模态上的滚动)。似乎每次我尝试 open/close 多个模式时,我总是遇到滚动问题。

关于如何处理这个问题有什么建议吗?

添加

.modal { overflow: auto !important; }

给你的 CCS.

在没有你的代码的情况下,我继续创建了这个 jsFiddle 来重现你的问题,或者至少是一个非常相似的问题。添加您的代码,我会测试这是否有效。

将该行添加到 CSS 解决了这个问题 jsFiddle

解决方案取自 github 上的 this thread,它也提供了其他解决方案。

这是解决方案:

<script>
    $('#id_ofyou_secondary_modal').on('hidden.bs.modal', function (e) {

      $('body').addClass('modal-open');

    });
</script>

注意“#idofyousecondarymodal”是二级或三级或无限模式的 ID。但永远不要写第一个模态的 ID。

示例我有 2 个模态:

<div id="mymodal1" class="modal fade in" style="display:none;">
.
.
.
.
</div>
<div id="mymodal2" class="modal fade in" style="display:none;">
.
.
.
.
</div>   

那么脚本将是:

<script>
    $('#mymodal2').on('hidden.bs.modal', function (e) {

      $('body').addClass('modal-open');

    });
</script>

只需添加此代码即可正常工作。

对我有用的解决方案是:

$('.modal').on("hidden.bs.modal", function (e) { 
    if ($('.modal:visible').length) { 
        $('body').addClass('modal-open');
    }
});

将以下内容添加到您的 CSS :

.modal
{
  overflow: scroll !important;
}
   $(document).on('hidden.bs.modal', '.modal', function () {
        $('.modal:visible').length && $(document.body).addClass('modal-open');
   });

我尝试了以前的解决方案,但不适用于我的用例:

  1. 只需添加 css .modal { overflow: auto !important; } 这将导致模态下方的内容变得可滚动。当你想保持以前的内容位置时不好。特别是在移动浏览器中。
  2. 使用 javascript 跟踪打开的模式并使用此 jQuery 选择器 $('.modal:可见').length.当快速打开和关闭多个模式时,这不起作用。我为我的 ajax 微调器使用 BS 模态,因此 $('.modal:visible') 不准确。

这是适合我的工作:

  1. 使用JS全局变量保持track/count打开的模态;而不是仅仅使用 :visible 选择器
  2. 我还添加了 css 样式,这样我就不必重新计算背景 z-index

var bootstrapModalCounter = 0; //counter is better then using visible selector

    $(document).ready(function () {  
      $('.modal').on("hidden.bs.modal", function (e) {
        --bootstrapModalCounter;
        if (bootstrapModalCounter > 0) {
          //don't need to recalculate backdrop z-index; already handled by css
          //$('.modal-backdrop').first().css('z-index', parseInt($('.modal:visible').last().css('z-index')) - 10);
          $('body').addClass('modal-open');
        }
      }).on("show.bs.modal", function (e) {
        ++bootstrapModalCounter;
        //don't need to recalculate backdrop z-index; already handled by css
      });
    });
.modal { 
/*simple fix for multiple bootstrap modal backdrop issue: 
don't need to recalculate backdrop z-index;
 */
  background: rgba(0, 0, 0, 0.5);
}

这是从 @Keeleon 修改 fiddle 以修复 https://jsfiddle.net/4m68uys7/

这是github期https://github.com/nakupanda/bootstrap3-dialog/issues/70