【问题标题】:Bootstrap Modal - same modal multiple open dialogsBootstrap Modal - 相同的模态多个打开对话框
【发布时间】:2026-02-07 05:25:01
【问题描述】:

我有一个模式代码和模式开启器链接。

当我点击链接时,模态打开,后面的 JavaScript 发出 Ajax 请求并填充模态内的元素值。

效果很好。

但是我需要在模态对话框中生成模态打开器链接,它会再次打开相同的模态。
我想打开另一个窗口,以便这个新窗口与第一个窗口重叠。 所以两个(或更多)打开相同模式的弹出窗口。

首先,当我在模态窗口中生成模态打开器链接时,链接已失效。

比我从 modal-opener 链接中删除 data-toggle="modal" 并将此 jQuery 代码放在点击链接时侦听和打开模式:

$(".modal_order_details_opener").click(function () {
    $('#modal_order_details').modal('show');
});

这可行,但不是我想要的方式。

它打开原始模式并且链接在那里,当我单击该链接打开另一个窗口时,浏览器会打开另一个模式对话框,但原始模式对话框消失了。

所以问题是:我可以打开两个或多个相同模式的窗口吗?
一个模态代码,多个打开的对话框实例。

我看过的所有示例都是打开了两个不同的模态。
我问的是相同的模式和更多的对话框同时打开。 基本上从模态中打开模态。

相同的模态。

谢谢。

【问题讨论】:

  • Multiple modals overlay 的可能重复项
  • 这不一样。我问关于打开多个窗口或相同模式的问题。您链接的是如何覆盖不同模式的问题。
  • 如果我理解正确,您想启动多个相同模式对话框的窗口,但每个对话框的数据会有所不同。我说的对吗?
  • 是的。问题是我一次只能得到一个窗口。

标签: javascript jquery html twitter-bootstrap


【解决方案1】:

我已经找到了解决方案,所以我会回答我自己的问题,以防有人想知道。

整个事情的关键是jQueryclone()函数。

基本上你使用两个 DOM 对象:

1 - 打开模式的链接 - 具有名为 modal_details_opener
的“类” 2 - 模态 HTML 本身 - 主 <div> 有名为 modal_details 的“id”

首先你需要 JavaScript 回调函数,我称之为callback()

因此,在 .js 文件末尾的全局范围内或文档准备就绪时,您在单击打开模式的链接时注册 callback()

$('.modal_details_opener').click(callback);

请记住,模态主体内部具有打开相同模态的链接。
所以在 callback() 正文中,我们必须:

1 - 在文档中查找模态
2 - 克隆它
3 - 其主体内的模态具有再次打开相同模态的链接,找到这些链接并在其“点击”事件上递归绑定callback()函数

function callback() {
    // Find modal body on the document
    var $currentDetailsModal = $('#modal_details');

    // Clone modal and save copy
    var $cloneDetailsModal = $currentDetailsModal.clone();

    // Find links in this modal which open this modal again and bind this function to their click events
    $(".modal_details_opener", $cloneDetailsModal).click(callback);
}

请注意,您必须将克隆的模态作为上下文传递给 $() 函数,以仅隔离每个打开的模态克隆中的链接。

【讨论】:

    【解决方案2】:

    以下代码将回答您的问题。如果它不起作用,请告诉我,我会换一种方式思考。

      <!DOCTYPE html>
    <html lang="en">
    <head>
      <title>Bootstrap Example</title>
      <meta charset="utf-8">
      <meta name="viewport" content="width=device-width, initial-scale=1">
      <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>
    
    <div class="container">
      <h2>Large Modal</h2>
      <!-- Trigger the modal with a button -->
      <button type="button" class="btn btn-info btn-lg" data-toggle="modal" data-target="#myModal">Open Large Modal</button>
    
      <!-- Modal -->
      <div class="modal fade" id="myModal" role="dialog">
        <div class="modal-dialog modal-lg">
          <div class="modal-content">
            <div class="modal-header">
              <button type="button" class="close" data-dismiss="modal">&times;</button>
              <h4 class="modal-title">Modal Header</h4>
            </div>
            <div class="modal-body">
              <p>This is a large modal.</p>
               <button type="button" class="btn btn-info btn-lg" data-toggle="modal" data-target="#myModal2">ClickForAnotherModel</button>
            </div>
            <div class="modal-footer">
              <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
            </div>
          </div>
        </div>
      </div>
      <!-- Modal -->
      <div class="modal fade" id="myModal2" role="dialog">
        <div class="modal-dialog modal-lg">
          <div class="modal-content">
            <div class="modal-header">
              <button type="button" class="close" data-dismiss="modal">&times;</button>
              <h4 class="modal-title">Another Modal</h4>
            </div>
            <div class="modal-body">
              <p>This is Another Modal on Modal.</p>
            </div>
            <div class="modal-footer">
              <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
            </div>
          </div>
        </div>
      </div>
    </div>
    
    </body>
    </html>
    

    【讨论】:

    • 感谢您的帮助,但事实并非如此。你有两个模态。我想要的只是拥有 1 个模态(#myModal)并在同一个模态的同时打开更多窗口,其中链接位于模态中。这么说吧:模态在它自己的主体中包含链接以再次打开自身,前一个窗口保持打开状态。