Bootstrap: เปิด Modal อื่นใน Modal


97

ดังนั้นฉันใช้รหัสนี้เพื่อเปิดหน้าต่างโมดอลอื่นในหน้าต่างโมดอลที่เปิดอยู่ในปัจจุบัน:

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

สิ่งที่เกิดขึ้นคือแถบเลื่อนจะซ้ำกันเหมือน 500 มิลลิวินาที ฉันเดาว่าเพราะกิริยาปัจจุบันยังคงจางหายไป อย่างไรก็ตามมันดูไม่ราบรื่นและพูดติดอ่างมาก

ฉันขอขอบคุณข้อเสนอแนะใด ๆ ในการแก้ปัญหานี้

นอกจากนี้วิธีการสร้างสิ่งนี้ในเหตุการณ์ที่ไม่เป็นมืออาชีพหรือไม่?

ฉันกำลังทำงานกับ bootstrap เวอร์ชัน 3.0

แก้ไข: ฉันเดาว่ามันจำเป็นที่จะต้องลดเวลาในการเลือนโมดอล เป็นไปได้อย่างไร?


3
สามารถดูตัวอย่างการทำงานได้ที่bootply.com/lvKQA2AM28
CrandellWS

คำตอบ:


87

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>

โปรดแจ้งให้เราทราบว่าใช้งานได้หรือไม่


ขอบคุณมันใช้งานได้และหลีกเลี่ยงการใช้ "onclick" แต่ animatiom ยังคงเพิ่มแถบเลื่อนเป็นสองเท่าเป็นเวลาหนึ่งวินาที
AlexioVay

@ thats user2829128 สิ่งที่data-dismissไม่ จะปิดหน้าต่างปัจจุบันและเปิดขึ้นมาใหม่ คุณสามารถโพสต์รหัสของคุณในbootplyหรือjsfiddle?
jayeshkv

14
การเลื่อนจะไม่ทำงานในรูปแบบที่สองหากความสูงยาว
Giraldi

เช่นเดียวกันกับ bootstrap v4.0 เมื่อฉันคลิกที่ปุ่มในวันจันทร์แรกมันจะเปิดขึ้นอีกกิริยาหนึ่งกิริยาที่สองจะแสดงพร้อมกับการเลื่อนของร่างกาย ปัญหาอยู่ในชั้นเรียนแบบเปิดสำหรับร่างกาย มันจะลบออกเมื่อเราคลิกและไม่ได้เพิ่มอีก
fdrv

7
.modal { overflow-y: auto }แก้ปัญหาการเลื่อน BS4
Riki137

86

วิธีแก้ปัญหาของฉันไม่ได้ปิดโมดอลที่ต่ำกว่า แต่วางซ้อนกันอย่างแท้จริง รักษาพฤติกรรมการเลื่อนอย่างถูกต้อง ผ่านการทดสอบแล้วใน 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);
}

สิ่งนี้จะให้ลักษณะของฉากหลังแบบโมดอลด้านล่างรูปแบบที่มองเห็นได้สูงสุด วิธีนี้จะทำให้รูปแบบล่างของคุณเป็นสีเทาด้านล่าง


2
รายการต่อมาในมาร์กอัปหน้าจะมีดัชนี z ที่สูงขึ้นตามธรรมชาติและจะซ้อนทับรายการที่ปรากฏก่อนหน้านี้ในมาร์กอัป เว้นแต่คุณจะตั้งค่าดัชนี z อย่างชัดเจน
H Dog

1
@H Dog: สิ่งที่ฉันต้องการ :) ทำงานได้อย่างสมบูรณ์แบบ ขอบคุณ!
Tobias Koller

2
ตำนานอย่างแท้จริง !! ฉันพลิกทุกครั้งที่มีคนแนะนำให้ใช้ปลั๊กอินสำหรับสิ่งนี้ ... แค่อยากได้วิธีง่ายๆสำหรับปัญหาง่ายๆแล้วไปต่อ ... ไชโย!
Fr0zenFyr

2
ขอบคุณมากสำหรับความช่วยเหลือของคุณโซลูชันของคุณได้รับการแก้ไขปัญหาของฉันเมื่อฉันใช้สองวิธีในเวลาเดียวกัน
Levon

3
Javascript ใช้งานได้กับ Bootstrap 4 อย่างไรก็ตาม CSS ไม่ได้ แต่ฉันซ่อนฉากหลังแล้วเพิ่ม. modal: after {content: ""; แสดง: บล็อก; พื้นหลัง: rgba (0,0,0, .5); ตำแหน่ง: คงที่; ด้านบน: 0; ด้านล่าง: 0; ความกว้าง: 100%; ดัชนี z: -1; }
Jason G.

28

หากต้องการเปิดหน้าต่างโมดอลอื่นในหน้าต่างโมดอลที่เปิดอยู่ในปัจจุบัน
คุณสามารถใช้bootstrap-modal

bootstrap-modal DEMO


การใช้ bootstrap-modal นี้จะเลื่อนเนื้อหาพื้นหลังไปทางขวา
Brian

@ ไบรอัน - ดูที่นี่: stackoverflow.com/questions/46339063/…
lfkwtz

19

ลองดู

<!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>


1
ล้มเหลวสำหรับฉัน .. = (โมดอลใช้งานได้ แต่ถ้าโมดอลแรกยาวจนเลื่อนสำหรับโมดอลที่ 1 ปรากฏขึ้นและเมื่อคุณเปิดโมดอลที่ 2 และปิดโมดอลแรกจะไม่ทำงาน
Vincent Dapiton

ขอบคุณมากมันเป็นความช่วยเหลือที่ดี :)
Daniel Muñoz

18

คุณสามารถตรวจจับได้จริงเมื่อโมดอลเก่าปิดโดยเรียกhidden.bs.modalเหตุการณ์:

    $('.yourButton').click(function(e){
        e.preventDefault();

        $('#yourFirstModal')
            .modal('hide')
            .on('hidden.bs.modal', function (e) {
                $('#yourSecondModal').modal('show');

                $(this).off('hidden.bs.modal'); // Remove the 'on' event binding
            });

    });

สำหรับข้อมูลเพิ่มเติม: http://getbootstrap.com/javascript/#modals-events


16

อัปเดตสำหรับปี 2018 - การใช้ Bootstrap 4

ฉันพบว่าคำตอบส่วนใหญ่ดูเหมือนจะมี jQuery ที่ไม่จำเป็นมากมาย ในการเปิดโมดอลจากโมดอลอื่นสามารถทำได้ง่ายๆโดยใช้เหตุการณ์ที่ Bootstrap ให้ไว้เช่นshow.bs.modalเพื่อเปิดกิริยาจากกิริยาอื่นสามารถทำได้ง่ายๆโดยการใช้เหตุการณ์ที่เงินทุนให้เช่นคุณอาจต้องการให้ CSS จัดการการซ้อนทับฉากหลัง นี่คือ 3 โมดอลแบบเปิดจากสถานการณ์อื่น ...

เปิดโมดอลจากโมดอลอื่น (เปิดโมดอลที่ 1 ไว้)

<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>

ปัญหาที่อาจเกิดขึ้นในกรณีนี้คือฉากหลังจากโมดอลที่ 2 ซ่อนโมดอลที่ 1 เพื่อป้องกันสิ่งนี้สร้างโมดอลที่ 2 data-backdrop="static"และเพิ่ม CSS เพื่อแก้ไขดัชนี z ของฉากหลัง ...

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

https://www.codeply.com/go/NiFzSCukVl


เปิดโมดอลจากโมดอลอื่น (ปิดโมดอลที่ 1)

สิ่งนี้คล้ายกับสถานการณ์ข้างต้น แต่เนื่องจากเรากำลังปิดโมดอลที่ 1 เมื่อเปิดตัวที่ 2 จึงไม่จำเป็นต้องแก้ไข CSS ฉากหลัง ฟังก์ชันง่ายๆที่จัดการshow.bs.modalเหตุการณ์โมดอลที่2 จะปิดโมดอลที่ 1

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

https://www.codeply.com/go/ejaUJ4YANz


เปิดกิริยาภายในรูปแบบอื่น

สถานการณ์จำลองล่าสุดหลายรูปแบบกำลังเปิดโมดอลที่ 2 ภายในโมดอลที่ 1 ในกรณีนี้มาร์กอัปสำหรับที่ 2 จะถูกวางไว้ในที่ 1 ไม่จำเป็นต้องใช้ 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://www.codeply.com/go/iSbjqubiyn


มันไม่ทำงานใน Bootstrap 4 เมื่อคุณปิดโมดอลที่ 2 ตัวแรกจะไม่สามารถเลื่อนได้อีกต่อไป
จัสติน

@ จัสติน - ฉันไม่เห็นสถานการณ์เฉพาะที่แสดงให้เห็นถึงสิ่งนี้และเนื่องจากการเลื่อนอยู่นอกขอบเขตของคำถามเดิม ฉันขอแนะนำให้คุณค้นหาหรือถามคำถามอื่นที่เฉพาะเจาะจงสำหรับปัญหาการเลื่อน
Zim

nth-of-type ไม่ได้ผลสำหรับฉันเพราะมันไม่ได้ดูที่ชั้นเรียน ฉันใช้งานได้กับ: .modal-backdrop.show + .modal.show { z-index: 1052 !important; } .modal-backdrop.show + .modal.show + .modal-backdrop.show { z-index: 1051 !important; }
webhead

14

Modals ใน Modal:

$('.modal-child').on('show.bs.modal', function () {
    var modalParent = $(this).attr('data-modal-parent');
    $(modalParent).css('opacity', 0);
});
 
$('.modal-child').on('hidden.bs.modal', function () {
    var modalParent = $(this).attr('data-modal-parent');
    $(modalParent).css('opacity', 1);
});
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet"/>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>

<a href="#myModal" role="button" class="btn btn-primary" data-toggle="modal">Modals in Modal</a>


<div id="myModal" class="modal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
    <div class="modal-dialog">
        <!-- Modal content-->
        <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">
                <a href="#myModal1" role="button" class="btn btn-primary" data-toggle="modal">Launch other modal 1</a>
                <a href="#myModal2" role="button" class="btn btn-primary" data-toggle="modal">Launch other modal 2</a>
            </div>

        </div>
    </div>
</div>

<div id="myModal1" class="modal modal-child" data-backdrop-limit="1" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true" data-modal-parent="#myModal">
    <div class="modal-dialog">
        <!-- Modal content-->
        <div class="modal-content">
            <div class="modal-header">
                <button type="button" class="close" data-dismiss="modal">&times;</button>
                <h4 class="modal-title">Modal Header 1</h4>
            </div>
            <div class="modal-body">
                <p>Two modal body…1</p>
            </div>
            <div class="modal-footer">
                <button class="btn btn-default" data-dismiss="modal" data-dismiss="modal" aria-hidden="true">Cancel</button>
            </div>

        </div>
    </div>
</div>

<div id="myModal2" class="modal modal-child" data-backdrop-limit="1" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true" data-modal-parent="#myModal">
    <div class="modal-dialog">
        <!-- Modal content-->
        <div class="modal-content">
            <div class="modal-header">
                
                <button type="button" class="close" data-dismiss="modal">&times;</button>
                <h4 class="modal-title">Modal Header 2</h4>
            </div>
            <div class="modal-body">
                <p>Modal body…2</p>
            </div>
            <div class="modal-footer">
                <button class="btn btn-default" data-dismiss="modal" data-dismiss="modal" aria-hidden="true">Cancel</button>
            </div>

        </div>
    </div>
</div>


ล้มเหลวสำหรับฉัน .. = (โมดอลใช้งานได้ แต่ถ้าโมดอลแรกยาวจนเลื่อนสำหรับโมดอลที่ 1 ปรากฏขึ้นและเมื่อคุณเปิดโมดอลที่ 2 และปิดโมดอลแรกจะไม่ทำงาน
Vincent Dapiton

ตัวอย่างข้างบนวางไข่โมดอลแทนโมดอลแรกที่ไม่อยู่ด้านบนทั้งสองใน (อันแรกไม่สามารถมองเห็นได้อีกต่อไป)
JackTheKnife

เอฟเฟกต์ที่ดีมาก
Jorge B.

เป็นไปได้อย่างไรที่จะใช้โซลูชันของคุณใน Semantic UI
vahidsamimi

9

การทำงานในโปรเจ็กต์ที่มีโมดอลจำนวนมากที่เรียกโมดอลอื่น ๆ และพวก HTML บางตัวที่อาจไม่รู้ว่าจะเริ่มต้นมันทุกครั้งสำหรับแต่ละปุ่ม ได้ข้อสรุปที่คล้ายกันกับ @gmaggio ด้วยความเสียใจหลังจากไปไกลรอบแรก

แก้ไข: ตอนนี้รองรับ modals ที่เรียกผ่าน javascript

แก้ไข: การเปิดโมดอลการเลื่อนจากโมดอลอื่นใช้งานได้แล้ว

$(document).on('show.bs.modal', function (event) {
    if (!event.relatedTarget) {
        $('.modal').not(event.target).modal('hide');
    };
    if ($(event.relatedTarget).parents('.modal').length > 0) {
        $(event.relatedTarget).parents('.modal').modal('hide');
    };
});

$(document).on('shown.bs.modal', function (event) {
    if ($('body').hasClass('modal-open') == false) {
        $('body').addClass('modal-open');
    };
});

เพียงแค่วางปุ่มการเรียกแบบโมดอลตามปกติและหากถูกหยิบขึ้นมาให้อยู่ในโมดอลก็จะปิดปุ่มปัจจุบันก่อนที่จะเปิดปุ่มที่ระบุใน data-target โปรดทราบว่าrelatedTargetมีให้โดย Bootstrap

ฉันยังเพิ่มสิ่งต่อไปนี้เพื่อทำให้การซีดจางลงเล็กน้อย: ฉันแน่ใจว่าทำได้มากกว่านี้

.modal-backdrop.fade + .modal-backdrop.fade {
    transition: opacity 0.40s linear 0s;
}

ไม่ใช่ปัญหาของคุณ 100% แต่ที่แสดง bbs. modal hook นั้นค่อนข้างสะดวก การจัดการร่างกายคลาสเปิดแบบโมดอลดูเหมือนจะเป็นบั๊กกี้ใน BS v.3.3.5 หลังจากปิดโมดอลหนึ่งแล้วเปิดอีกอันมันหายไปดังนั้นพื้นหลังจึงเลื่อนแทนที่จะเป็นโมดอล (วินาที) Hook ของคุณสามารถแก้ไขพฤติกรรมนั้นได้
Manuel Arwed Schmidt

7

เอกสาร Twitter ระบุว่าต้องใช้รหัสที่กำหนดเอง ...

สิ่งนี้ใช้งานได้โดยไม่มี JavaScript พิเศษ แต่ขอแนะนำ CSS ที่กำหนดเอง ...

<link href="http://netdna.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css" rel="stylesheet"/>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="//netdna.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>
<!-- Button trigger modal -->
    <button class="btn btn-primary btn-lg" data-toggle="modal" data-target="#modalOneModal">
      Launch demo modal
    </button> 
            <!-- Modal -->
            <div class="modal fade bg-info" id="modalOneModal" tabindex="-1" role="dialog" aria-labelledby="modalOneLabel" aria-hidden="true">
    
              <div class="modal-dialog">
          
                <div class="modal-content  bg-info">
                  <div class="modal-header btn-info">
                    <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
                    <h4 class="modal-title" id="modalOneLabel">modalOne</h4>
                  </div>
                  <div id="thismodalOne" class="modal-body bg-info">
                
                
              <!-- Button trigger modal -->
    <button class="btn btn-primary btn-lg" data-toggle="modal" data-target="#twoModalsExample">
      Launch demo modal
    </button>
             
                    <div class="modal fade bg-info" id="twoModalsExample" style="overflow:auto" tabindex="-1" role="dialog" aria-hidden="true">
                <h3>EXAMPLE</h3>
            </div>
                  </div>
                  <div class="modal-footer btn-info" id="woModalFoot">
                    <button type="button" class="btn btn-info" data-dismiss="modal">Close</button>
                  </div>
                </div>
              </div>
            </div>
    <!-- End Form Modals -->


1
นี่เป็นอีกตัวอย่างหนึ่งที่มีรูปแบบที่ 2 ที่มีการจัดรูปแบบอย่างถูกต้องbootply.com/qRsvPSrcO5
Zim

1
@Skelly เปลี่ยน z-index เหมือนที่คุณทำใน css เป็นความคิดที่ดี ...z-index: 1080 !important;
CrandellWS

4
หากคุณเปิดโมดอลตัวที่ 2 และคลิกภายนอกมันจะถูกบั๊ก (Chrome ล่าสุด)
Martin Braun

บางทีฉันอาจจะผิด แต่ฉันเชื่อว่าเอกสารบอกว่าอย่าใส่กิริยาในโมดอลดังนั้นจึงไม่น่าแปลกใจเลย
CrandellWS

7

สำหรับ bootstrap 4 เพื่อขยายคำตอบของ @ helloroy ฉันใช้สิ่งต่อไปนี้ -

var modal_lv = 0 ;
$('body').on('shown.bs.modal', function(e) {
    if ( modal_lv > 0 )
    {
        $('.modal-backdrop:last').css('zIndex',1050+modal_lv) ;
        $(e.target).css('zIndex',1051+modal_lv) ;
    }
    modal_lv++ ;
}).on('hidden.bs.modal', function() {
    if ( modal_lv > 0 )
        modal_lv-- ;
});

ข้อดีของข้างต้นคือมันจะไม่มีผลใด ๆ เมื่อมีโมดอลเพียงตัวเดียว แต่จะเตะเพื่อทวีคูณเท่านั้น ประการที่สองจะมอบหมายการจัดการให้กับร่างกายเพื่อให้แน่ใจว่ารูปแบบในอนาคตที่ไม่ได้สร้างขึ้นในปัจจุบันยังคงรองรับ

อัปเดต

การเปลี่ยนไปใช้โซลูชันรวม js / css ช่วยเพิ่มรูปลักษณ์ - ภาพเคลื่อนไหวที่จางลงยังคงทำงานบนฉากหลัง -

var modal_lv = 0 ;
$('body').on('show.bs.modal', function(e) {
    if ( modal_lv > 0 )
        $(e.target).css('zIndex',1051+modal_lv) ;
    modal_lv++ ;
}).on('hidden.bs.modal', function() {
    if ( modal_lv > 0 )
        modal_lv-- ;
});

รวมกับ css ต่อไปนี้ -

.modal-backdrop ~ .modal-backdrop
{
    z-index : 1051 ;
}
.modal-backdrop ~ .modal-backdrop ~ .modal-backdrop
{
    z-index : 1052 ;
}
.modal-backdrop ~ .modal-backdrop ~ .modal-backdrop ~ .modal-backdrop
{
    z-index : 1053 ;
}

สิ่งนี้จะจัดการโมดาลที่ซ้อนกันได้ถึง 4 ระดับซึ่งเกินกว่าที่ฉันต้องการ


มันไม่ทำงานใน Bootstrap 4 เมื่อคุณปิดโมดอลที่ 2 ตัวแรกจะไม่สามารถเลื่อนได้อีกต่อไป
จัสติน

4

ลองสิ่งนี้:

// Hide the login modal
$('#login').modal('hide');

// Show the next modal after the fade effect is finished
setTimeout(function(){ $('#lost').modal('show'); }, 500);

แฮ็คง่ายๆนี้ใช้ได้กับฉัน


4

สำหรับคนที่ใช้ bootstrap 4 https://jsfiddle.net/helloroy/tmm9juoh/

var modal_lv = 0;
$('.modal').on('shown.bs.modal', function (e) {
    $('.modal-backdrop:last').css('zIndex',1051+modal_lv);
    $(e.currentTarget).css('zIndex',1052+modal_lv);
    modal_lv++
});

$('.modal').on('hidden.bs.modal', function (e) {
    modal_lv--
});
<script src="https://code.jquery.com/jquery-3.1.1.slim.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.6/js/bootstrap.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/tether/1.4.0/js/tether.min.js"></script>
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.6/css/bootstrap.min.css" rel="stylesheet"/>

<button type="button" class="btn btn-primary" data-toggle="modal" data-target="#modal-a">
  Launch demo modal a
</button>

<div class="modal fade" id="modal-a" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">
  <div class="modal-dialog" role="document">
    <div class="modal-content">
      <div class="modal-header">
        <h5 class="modal-title" id="exampleModalLabel">Modal title</h5>
        <button type="button" class="close" data-dismiss="modal" aria-label="Close">
          <span aria-hidden="true">&times;</span>
        </button>
      </div>
      <div class="modal-body">
        <button type="button" class="btn btn-primary" data-toggle="modal" data-target="#modal-b">
  Launch another demo modal b
</button>
<p class="my-3">
Not good for fade In.
</p>
<p class="my-3">
who help to improve?
</p>
      </div>
      <div class="modal-footer">
        <button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
        <button type="button" class="btn btn-primary">Save changes</button>
      </div>
    </div>
  </div>
</div>

<div class="modal fade" id="modal-b" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">
  <div class="modal-dialog" role="document">
    <div class="modal-content">
      <div class="modal-header">
        <h5 class="modal-title" id="exampleModalLabel">Modal title</h5>
        <button type="button" class="close" data-dismiss="modal" aria-label="Close">
          <span aria-hidden="true">&times;</span>
        </button>
      </div>
      <div class="modal-body">
        <button type="button" class="btn btn-primary" data-toggle="modal" data-target="#modal-c">
  Launch another demo modal c
</button>
<p class="my-3">
But good enough for static modal
</p>
      </div>
      <div class="modal-footer">
        <button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
        <button type="button" class="btn btn-primary">Save changes</button>
      </div>
    </div>
  </div>
</div>


<div class="modal" id="modal-c" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">
  <div class="modal-dialog" role="document">
    <div class="modal-content">
      <div class="modal-header">
        <h5 class="modal-title" id="exampleModalLabel">Modal title</h5>
        <button type="button" class="close" data-dismiss="modal" aria-label="Close">
          <span aria-hidden="true">&times;</span>
        </button>
      </div>
      <div class="modal-body">
<p class="my-3">That's all.</p>
      </div>
      <div class="modal-footer">
        <button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
        <button type="button" class="btn btn-primary">Save changes</button>
      </div>
    </div>
  </div>
</div>


นี่เป็นเรื่องดีปัญหาเดียวที่เหลือคือการป้องกันไม่ให้ปรากฏขึ้นอีกครั้งของแถบเลื่อนเมื่อโมดอลที่อยู่บนสุดถูกปิด
HyperActive

2

ฉันมีปัญหากับวิธีการเลื่อนของฉันด้วยดังนั้นฉันจึงทำสิ่งนี้:

  $('.modal').on('shown.bs.modal', function () {
    $('body').addClass('modal-open');
    // BS adds some padding-right to acomodate the scrollbar at right
    $('body').removeAttr('style');
  })

  $(".modal [data-toggle='modal']").click(function(){
    $(this).closest(".modal").modal('hide');
  });

มันจะทำหน้าที่สำหรับโมดอลใด ๆ ที่มีโมดอลที่ปรากฏขึ้น สังเกตว่าอันแรกปิดเพื่อให้อันที่สองปรากฏขึ้น ไม่มีการเปลี่ยนแปลงในโครงสร้าง Bootstrap


2

ฉันไปในเส้นทางที่แตกต่างกันทั้งหมดฉันตัดสินใจ "De-Nest" พวกเขา อาจมีคนพบว่ามีประโยชน์นี้ ...

var $m1 = $('#Modal1');
var $innermodal = $m1.find(".modal");     //get reference to nested modal
$m1.after($innermodal);                  // snatch it out of inner modal and put it after.

ขอบคุณมาก

2

รหัสของฉันทำงานได้ดีโดยใช้ data-เลิก

<li class="step1">
    <a href="#" class="button-popup" data-dismiss="modal" data-toggle="modal" data-target="#lightbox1">
        <p class="text-label">Step 1</p>
        <p class="text-text">Plan your Regime</p>
    </a>

</li>
<li class="step2">
    <a href="#" class="button-popup" data-dismiss="modal" data-toggle="modal" data-target="#lightbox2">
        <p class="text-label">Step 2</p>
        <p class="text-text">Plan your menu</p>
    </a>
</li>
<li class="step3 active">
    <a href="#" class="button-popup" data-toggle="modal" data-dismiss="modal" data-target="#lightbox3">
        <p class="text-label">Step 3</p>
        <p class="text-text">This Step is Undone.</p>
    </a>
</li>

1

ปิดโมดอล Bootstrap แรกและเปิดโมดอลใหม่แบบไดนามิก

$('#Modal_One').modal('hide');
setTimeout(function () {
  $('#Modal_New').modal({
    backdrop: 'dynamic',
    keyboard: true
  });
}, 500);

1

ทำไมไม่เปลี่ยนเนื้อหาของตัวกิริยาดูล่ะ?

    window.switchContent = function(myFile){
        $('.modal-body').load(myFile);
    };

ในโมดอลเพียงแค่ใส่ลิงค์หรือปุ่ม

    <a href="Javascript: switchContent('myFile.html'); return false;">
     click here to load another file</a>

หากคุณต้องการเปลี่ยนบีทระหว่าง 2 โมดอล:

    window.switchModal = function(){
        $('#myModal-1').modal('hide');
        setTimeout(function(){ $('#myModal-2').modal(); }, 500);
        // the setTimeout avoid all problems with scrollbars
    };

ในโมดอลเพียงแค่ใส่ลิงค์หรือปุ่ม

    <a href="Javascript: switchModal(); return false;">
     click here to switch to the second modal</a>

นั่นเหมือนกับคำตอบที่เกี่ยวข้องกับ UX มากกว่าเพราะฉันต้องการสิ่งนี้เพื่อแสดงข้อความแสดงข้อผิดพลาดเกี่ยวกับ Modal # 1 ดังนั้น Modal # 2 จึงมีข้อความแสดงข้อผิดพลาด แต่มันเป็นเวลานานแล้วที่ฉันถามคำถามนี้และตอนนี้ฉันกำลังทำสิ่งนี้แตกต่างออกไป
AlexioVay

0

ลองสิ่งนี้:

$('.modal').on('hidden.bs.modal', function () {
//If there are any visible
  if($(".modal:visible").length > 0) {
      //Slap the class on it (wait a moment for things to settle)
      setTimeout(function() {
          $('body').addClass('modal-open');
      },100)
  }
});

0

คำตอบที่ได้รับโดย H Dogนั้นยอดเยี่ยมมาก แต่วิธีนี้ทำให้ฉันมีโมดอลกะพริบใน Internet Explorer 11 ก่อน Bootstrap จะซ่อนโมดอลลบคลาส 'modal-open' ก่อนจากนั้น (โดยใช้โซลูชัน H Dogs) เราเพิ่ม คลาส 'modal-open' อีกครั้ง ฉันสงสัยว่านี่เป็นสาเหตุของการสั่นไหวที่ฉันเห็นอาจเป็นเพราะการแสดงผล HTML / CSS ที่ช้า

อีกวิธีหนึ่งคือการป้องกัน bootstrap ในการลบคลาส 'modal-open' ออกจากองค์ประกอบของร่างกายในตอนแรก การใช้ Bootstrap 3.3.7 การแทนที่ฟังก์ชันhideModalภายในนี้ทำงานได้อย่างสมบูรณ์แบบสำหรับฉัน

$.fn.modal.Constructor.prototype.hideModal = function () {
    var that = this
    this.$element.hide()
    this.backdrop(function () {
        if ($(".modal:visible").length === 0) {
            that.$body.removeClass('modal-open')
        }
        that.resetAdjustments()
        that.resetScrollbar()
        that.$element.trigger('hidden.bs.modal')
    })
}

ในการลบล้างนี้คลาส 'modal-open' จะถูกลบออกก็ต่อเมื่อไม่มีโมดอลที่มองเห็นได้บนหน้าจอ และคุณป้องกันไม่ให้เฟรมหนึ่งลบและเพิ่มคลาสให้กับองค์ประกอบของร่างกาย

เพียงรวมการแทนที่หลังจากโหลด bootstrap แล้ว


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.