Bootstrap:在 Modal 中打开另一个 Modal

IT技术 javascript jquery twitter-bootstrap modal-dialog twitter-bootstrap-3
2021-01-29 23:47:56

因此,我使用此代码在当前打开的模态窗口中打开另一个模态窗口:

<a onclick=\"$('#login').modal('hide');$('#lost').modal('show');\" href='#'>Click</a>

发生的情况是,滚动条将重复大约 500 毫秒。我猜是因为当前的模态仍在淡出。然而,它看起来非常不流畅和口吃。

我将不胜感激任何解决此问题的建议。

另外,在点击事件中构建它的方式是否不专业?

我正在使用引导程序版本 3.0。

编辑:我想减少淡出模态的时间是必要的。这怎么可能?

6个回答

data-dismiss 使当前模态窗口强制关闭

data-toggle打开一个包含href内容的新模式

<a data-dismiss="modal" data-toggle="modal" href="#lost">Click</a>

或者

<a data-dismiss="modal" onclick="call the new div here">Click</a>

请让我们知道它是否有效。

此处与 bootstrap v4 相同。当我点击第一个 mondal 上的按钮时,它会打开另一个模式,第二个模式显示身体滚动。问题出在 .modal-open for body 类中。当我们单击时它会删除并且不再添加。
2021-03-15 23:47:56
.modal { overflow-y: auto } 解决了 BS4 滚动问题。
2021-03-19 23:47:56
谢谢,它有效并避免使用“onclick”。但是动画仍然使滚动条翻倍。
2021-03-21 23:47:56
@ user2829128 就是data-dismiss这样。它关闭当前窗口并打开一个新窗口。您可以在bootply或 中发布您的代码jsfiddle吗?
2021-03-31 23:47:56
如果高度很长,滚动将不适用于第二个模式。
2021-04-03 23:47:56

我的解决方案不会关闭较低的模态,而是真正堆叠在它之上。它正确地保留了滚动行为。在 Bootstrap 3 中测试。要使模态按预期堆叠,您需要在 Html 标记中将它们从最低到最高排序。

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

更新:当您堆叠模态时,所有背景都出现在最低模态下方。您可以通过添加以下 CSS 来解决此问题:

.modal-backdrop {
    visibility: hidden !important;
}
.modal.in {
    background-color: rgba(0,0,0,0.5);
}

这将在最顶部可见模态下方显示模态背景。这样它就会使下方的较低模态变灰。

真的是传奇!!每当有人建议为此使用插件时,我就会翻转……只是想为一个简单的问题提供一个简单的解决方案,然后就可以了……干杯!
2021-03-19 23:47:56
非常感谢您的帮助。当我同时使用两个模态时,您的解决方案解决了我的问题!!!!
2021-03-24 23:47:56
Javascript 适用于 Bootstrap 4,但是 CSS 没有。相反,我隐藏了背景,然后添加了 .modal:after { content: ""; 显示:块;背景:rgba(0,0,0, .5); 位置:固定;顶部:0;底部:0;宽度:100%;z-索引:-1;}
2021-03-26 23:47:56
页面标记中较晚的项目自然具有更高的 z-index,并将堆叠在标记中较早出现的项目之上。除非您设置了明确的 z-index。
2021-03-29 23:47:56
@H Dog:正是我所需要的:) 完美无缺。谢谢!
2021-04-03 23:47:56

Bootstrap 5(测试版)- 2021 年更新

模态的默认 z-index 已更改为 1060。因此,要覆盖模态和背景,请使用..

.modal:nth-of-type(even) {
    z-index: 1062 !important;
}
.modal-backdrop.show:nth-of-type(even) {
    z-index: 1061 !important;
}

Bootstrap 5 多模态


Bootstrap 4 - 2019 年更新

我发现大多数答案似乎都有很多不必要的 jQuery。只需使用 Bootstrap 提供的事件(例如show.bs.modal. 您可能还需要一些 CSS 来处理背景叠加。这里有 3 个“多模态”场景......

从另一个模态打开模态(保持第一个模态打开)

<a data-toggle="modal" href="#myModal" class="btn btn-primary">Launch modal</a>

<div class="modal" id="myModal">
        <div class="modal-dialog">
          <div class="modal-content">
            <div class="modal-header">
              <h4 class="modal-title">Modal title</h4>    
              <button type="button" class="close" data-dismiss="modal">×</button>
            </div><div class="container"></div>
            <div class="modal-body">
              ...
              <a data-toggle="modal" href="#myModal2" class="btn btn-primary">Open modal2</a>
            </div>
            <div class="modal-footer">
              <a href="#" data-dismiss="modal" class="btn">Close</a>
            </div>
          </div>
        </div>
</div>
<div class="modal" id="myModal2" data-backdrop="static">
        <div class="modal-dialog">
          <div class="modal-content">
            <div class="modal-header">
              <h4 class="modal-title">2nd Modal title</h4>
              <button type="button" class="close" data-dismiss="modal">×</button>
            </div><div class="container"></div>
            <div class="modal-body">
              ..
            </div>
            <div class="modal-footer">
              <a href="#" data-dismiss="modal" class="btn">Close</a>
              <a href="#" class="btn btn-primary">Save changes</a>
            </div>
          </div>
        </div>
</div>

这种情况下的一个潜在问题是第二个模态的背景隐藏了第一个模态。为了防止这种情况,制作第二个 modal data-backdrop="static",并添加一些 CSS 来修复背景的 z-indexes ...

/* modal backdrop fix */
.modal:nth-of-type(even) {
    z-index: 1052 !important;
}
.modal-backdrop.show:nth-of-type(even) {
    z-index: 1051 !important;
}

https://codeply.com/go/NiFzSCukVl


从另一个模态打开模态(关闭第一个模态)

这类似于上面的场景,但是由于我们在打开第二个模式时关闭了第一个模式,因此不需要背景 CSS 修复。处理第二个模态show.bs.modal事件的简单函数会关闭第一个模态。

$("#myModal2").on('show.bs.modal', function (e) {
    $("#myModal1").modal("hide");
});

https://codeply.com/go/ejaUJ4YANz


另一个模打开模

最后一个多模态场景是在第一个模态内打开第二个模态。在这种情况下,第二个的标记放置在第一个内。不需要额外的 CSS 或 jQuery。

<div class="modal" id="myModal1">
    <div class="modal-dialog">
        <div class="modal-content">
            <div class="modal-header">
                <h4 class="modal-title">Modal title</h4>
                <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
            </div>
            <div class="container"></div>
            <div class="modal-body">
                ...
                <a data-toggle="modal" href="#myModal2" class="btn btn-primary">Launch modal 2</a>
            </div>
            <div class="modal-footer">
                <a href="#" data-dismiss="modal" class="btn">Close</a>
            </div>
        </div>
    </div>

    <div class="modal" id="myModal2">
        <div class="modal-dialog">
            <div class="modal-content">
                <div class="modal-header">
                    <h4 class="modal-title">2nd Modal title</h4>
                    <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
                </div>
                <div class="container"></div>
                <div class="modal-body">
                    ...
                </div>
                <div class="modal-footer">
                    <a href="#" data-dismiss="modal" class="btn">Close</a>
                    <a href="#" class="btn btn-primary">Save changes</a>
                </div>
            </div>
        </div>
    </div>
</div>

https://codeply.com/go/iSbjqubiyn

我删除了fade calss ie 而不是 <div class="modal fade" 我使用的<div class="modal",它解决了我的问题。
2021-03-20 23:47:56
nth-of-type 对我不起作用,因为它不看课堂。我让它与: .modal-backdrop.show + .modal.show { z-index: 1052 !important; } .modal-backdrop.show + .modal.show + .modal-backdrop.show { z-index: 1051 !important; }
2021-03-22 23:47:56
@Zim 使用 BS5,在彼此之上打开模态,出于某种原因,我必须使用 :nth-of-type(odd) 来完成这项工作(在 Chrome 上),不知道为什么,因为第二个背景实际上放在之后第一个......因此应该选择“偶数”......
2021-04-05 23:47:56
它在 Bootstrap 4 中不起作用。当您关闭第二个模式时,第一个不再可以滚动。
2021-04-07 23:47:56
@Justin - 我没有看到可以证明这一点的特定场景,因为滚动超出了原始问题的范围。我建议您寻求或提出另一个特定于滚动问题的问题。
2021-04-07 23:47:56

要在当前打开的模态窗口中打开另一个模态窗口,
可以使用bootstrap-modal

引导模式演示

使用此引导模式将背景内容向右移动。
2021-04-02 23:47:56
2021-04-07 23:47:56

试试这个

<!DOCTYPE html>
<html lang="en">
<head>
  <title></title>
  <meta charset="utf-8">
  <link rel="stylesheet" href="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css">
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
  <script src="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>
</head>
<body>

  <button type="button" class="btn btn-info btn-lg" data-toggle="modal" data-target="#test1">Open Modal 1 </button>



<div id="test1" class="modal fade" role="dialog" style="z-index: 1400;">
  <div class="modal-dialog">
    <!-- Modal content-->
    <div class="modal-content">
      
      <div class="modal-body">
      	<button type="button" class="btn btn-info btn-lg" data-toggle="modal"      data-target="#test2">Open Modal 2</button>
      	
      </div>      
    </div>
  </div>
</div>

<div id="test2" class="modal fade" role="dialog" style="z-index: 1600;">
  <div class="modal-dialog">
    <!-- Modal content-->
    <div class="modal-content">
      
      <div class="modal-body">
      	
        content
      	
      </div>      
    </div>
  </div>
</div>
  

</body>
</html>

非常感谢,这是一个很大的帮助:)
2021-04-07 23:47:56
对我来说失败了.. =( 模态有效,但如果第一个模态很长,第一个模态的滚动就会出现,当您打开第二个模态并关闭它时,第一个模态滚动将无法工作。
2021-04-09 23:47:56