Bootstrap: Mở một phương thức khác trong Modal


95

Vì vậy, tôi đang sử dụng mã này để mở một cửa sổ phương thức khác trong một cửa sổ phương thức đang mở hiện tại:

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

Điều gì xảy ra là, trong khoảng 500ms, thanh cuộn sẽ trùng lặp. Tôi đoán bởi vì phương thức hiện tại vẫn đang mờ dần. Tuy nhiên nó trông rất không mượt mà và nói lắp.

Tôi sẽ đánh giá cao bất kỳ đề xuất nào để giải quyết vấn đề này.

Ngoài ra, có phải cách xây dựng điều này trong sự kiện onclick không chuyên nghiệp không?

Tôi đang làm việc với phiên bản bootstrap 3.0.

Chỉnh sửa: Tôi đoán là cần thiết để giảm thời gian mờ dần một phương thức. Sao có thể như thế được?


3
Một ví dụ làm việc có thể được tìm thấy tại bootply.com/lvKQA2AM28
CrandellWS

Câu trả lời:


86

data-dismiss làm cho lực cửa sổ phương thức hiện tại đóng lại

data-togglemở ra một phương thức mới với hrefnội dung bên trong nó

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

hoặc là

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

cho chúng tôi biết nếu nó hoạt động.


Cảm ơn, nó hoạt động và tránh sử dụng "onclick". Nhưng animatiom vẫn tăng gấp đôi thanh cuộn trong một giây.
AlexioVay

@ user2829128 đó là gì data-dismiss. Nó đóng cửa sổ hiện tại và mở ra một cửa sổ mới. Bạn có thể đăng mã của bạn trong bootplyhoặc jsfiddle?
jayeshkv

14
Thao tác cuộn sẽ không hoạt động ở phương thức thứ hai nếu chiều cao dài.
Giraldi

Tương tự ở đây với bootstrap v4. Khi tôi nhấp vào nút trên phương thức đầu tiên, nó sẽ mở ra một phương thức khác, phương thức thứ hai hiển thị với cuộn cơ thể. Các vấn đề nằm trong lớp .modal-open for body. Nó loại bỏ khi chúng ta nhấp vào và không thêm lại.
fdrv

7
.modal { overflow-y: auto }giải quyết vấn đề cuộn BS4.
Riki137,

84

Giải pháp của tôi không đóng phương thức thấp hơn, nhưng thực sự xếp chồng lên trên nó. Nó duy trì hành vi cuộn một cách chính xác. Đã thử nghiệm trong Bootstrap 3. Để các phương thức có thể xếp chồng như mong đợi, bạn cần sắp xếp chúng trong đánh dấu Html từ thấp nhất đến cao nhất.

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

CẬP NHẬT: Khi bạn có các phương thức xếp chồng lên nhau, tất cả các phông nền sẽ xuất hiện bên dưới phương thức thấp nhất. Bạn có thể khắc phục điều đó bằng cách thêm CSS sau:

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

Điều này sẽ cung cấp sự xuất hiện của phông nền phương thức bên dưới phương thức có thể nhìn thấy trên cùng. Bằng cách đó, nó sẽ tạo ra các phương thức thấp hơn của bạn bên dưới.


2
Các mục sau đó trong đánh dấu trang có chỉ số z cao hơn một cách tự nhiên và sẽ xếp chồng lên các mục xuất hiện trước đó trong đánh dấu. Trừ khi bạn đặt một chỉ số z rõ ràng.
H Dog

1
@H Dog: chính xác những gì tôi cần :) hoạt động hoàn hảo. cảm ơn!
Tobias Koller

2
Quả thật là huyền thoại !! Tôi đã bỏ qua bất cứ khi nào ai đó đề xuất sử dụng một plugin chỉ cho việc này ... chỉ muốn có một giải pháp đơn giản cho một vấn đề đơn giản và bạn đã sẵn sàng ... Chúc mừng!
Fr0zenFyr

2
Rất cảm ơn, vì sự giúp đỡ của BẠN. Giải pháp của bạn đã giải quyết được vấn đề của tôi, khi tôi sử dụng hai phương thức cùng một lúc !!!!!
Levon

3
Javascript đã hoạt động cho Bootstrap 4, tuy nhiên, CSS thì không. Thay vào đó, tôi ẩn phông nền và sau đó thêm .modal: sau {content: ""; hiển thị: khối; nền: rgba (0,0,0, .5); vị trí: cố định; đầu trang: 0; đáy: 0; chiều rộng: 100%; z-index: -1; }
Jason G.


18

thử cái này

<!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
thất bại cho tôi .. = (các công trình modal nhưng nếu phương thức 1 là dài mà một cuộn giấy cho xuất hiện phương thức 1 và khi bạn mở modal 2 và gần nó cuộn modal đầu tiên thất bại trong việc làm việc.
Vincent Dapiton

Cảm ơn bạn rất nhiều, đó là một trợ giúp lớn :)
Daniel Muñoz

17

Bạn thực sự có thể phát hiện khi nào phương thức cũ đóng bằng cách gọi hidden.bs.modalsự kiện:

    $('.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
            });

    });

Để biết thêm thông tin: http://getbootstrap.com/javascript/#modals-events


16

Cập nhật cho năm 2018 - Sử dụng Bootstrap 4

Tôi thấy hầu hết các câu trả lời dường như có rất nhiều jQuery không cần thiết. Để mở một phương thức từ một phương thức khác có thể được thực hiện đơn giản bằng cách sử dụng các sự kiện mà Bootstrap cung cấp chẳng hạn như show.bs.modal. Bạn cũng có thể muốn một số CSS để xử lý các lớp phủ phông nền. Đây là 3 phương thức mở từ các tình huống khác ...

Mở phương thức từ một phương thức khác (giữ phương thức đầu tiên mở)

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

Một vấn đề tiềm ẩn trong trường hợp này là phông nền từ phương thức thứ 2 ẩn phương thức thứ nhất. Để ngăn chặn điều này, hãy thực hiện phương thức thứ 2 data-backdrop="static"và thêm một số CSS để sửa chỉ mục z của phông nền ...

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


Mở phương thức từ một phương thức khác (đóng phương thức thứ nhất)

Điều này tương tự như trường hợp trên, nhưng vì chúng ta đang đóng phương thức thứ nhất khi phương thức thứ 2 được mở, nên không cần sửa CSS phông nền. Một hàm đơn giản xử lý show.bs.modalsự kiện phương thức thứ 2 đóng phương thức thứ nhất.

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

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


Mở phương thức bên trong một phương thức khác

Kịch bản nhiều phương thức cuối cùng đang mở phương thức thứ 2 bên trong phương thức thứ nhất. Trong trường hợp này, đánh dấu cho thứ 2 được đặt bên trong thứ nhất. Không cần thêm CSS hoặc 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


Nó không hoạt động trong Bootstrap 4. Khi bạn đóng phương thức thứ 2, phương thức thứ nhất không còn có thể cuộn được nữa.
Justin

@Justin - Tôi không thấy một kịch bản cụ thể nào chứng minh điều này và vì thao tác cuộn nằm ngoài phạm vi của câu hỏi ban đầu. Tôi khuyên bạn nên tìm kiếm hoặc hỏi một câu hỏi khác cụ thể cho vấn đề cuộn.
Zim

nth-of-type không phù hợp với tôi vì nó không hợp với lớp. Tôi đã làm việc với nó: .modal-backdrop.show + .modal.show { z-index: 1052 !important; } .modal-backdrop.show + .modal.show + .modal-backdrop.show { z-index: 1051 !important; }
webhead

14

Các chế độ trong 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>


thất bại cho tôi .. = (các công trình modal nhưng nếu phương thức 1 là dài mà một cuộn giấy cho xuất hiện phương thức 1 và khi bạn mở modal 2 và gần nó cuộn modal đầu tiên thất bại trong việc làm việc.
Vincent Dapiton

Ví dụ trên tạo ra phương thức thay cho phương thức đầu tiên không ở trên cùng cũng không ở trong (phương thức đầu tiên không còn hiển thị).
JackTheKnife,

Hiệu ứng rất đẹp.
Jorge B.

Làm cách nào để có thể sử dụng giải pháp của bạn trong Semantic UI?
vahidsamimi

9

Làm việc trên một dự án có rất nhiều phương thức gọi các phương thức khác và một vài người chơi HTML có thể không biết để khởi tạo nó mọi lúc cho mỗi nút. Đi đến một kết luận tương tự như @gmaggio, miễn cưỡng sau khi đi một chặng đường dài đầu tiên.

CHỈNH SỬA: Hiện hỗ trợ các phương thức được gọi thông qua javascript.

CHỈNH SỬA: Mở một phương thức cuộn từ một phương thức khác hiện hoạt động.

$(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');
    };
});

Chỉ cần đặt nút gọi phương thức vào như bình thường, và nếu nó được chọn ở bên trong một phương thức, nó sẽ đóng nút hiện tại trước khi mở nút được chỉ định trong data-target. Lưu ý rằngrelatedTarget được cung cấp bởi Bootstrap.

Tôi cũng đã thêm những điều sau để làm mịn sự mờ đi một chút: Mặc dù vậy, tôi chắc chắn có thể làm được nhiều việc hơn.

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

Không phải 100% vấn đề của bạn nhưng hook show.bs.modal khá tiện dụng. Quản lý lớp body.modal-open dường như gặp lỗi trong BS v.3.3.5, sau khi đóng một phương thức và mở một phương thức khác, nó bị thiếu và do đó nền đang cuộn thay vì phương thức (thứ hai). Hook của bạn có thể khắc phục hành vi đó.
Manuel Arwed Schmidt

7

Tài liệu Twitter cho biết mã tùy chỉnh là bắt buộc ...

Tuy nhiên, điều này hoạt động mà không cần thêm JavaScript, CSS tùy chỉnh sẽ rất được khuyến khích ...

<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
Đây là một ví dụ khác với phương thức thứ 2 được định dạng đúng bootply.com/qRsvPSrcO5
Zim

1
@Skelly thay đổi chỉ số z như bạn đã làm trong css là một ý kiến ​​hay ...z-index: 1080 !important;
CrandellWS

4
Nếu bạn mở phương thức thứ 2 và nhấp vào bên ngoài, nó sẽ bị nghe trộm. (Chrome, mới nhất)
Martin Braun

có lẽ tôi sai nhưng tôi tin rằng các tài liệu nói không đặt một phương thức trong một phương thức để là kinda không đáng ngạc nhiên
CrandellWS

7

Đối với bootstrap 4, để mở rộng câu trả lời của @ helloroy, tôi đã sử dụng như sau; -

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-- ;
});

Ưu điểm của điều trên là nó sẽ không có bất kỳ tác dụng nào khi chỉ có một phương thức, nó chỉ phát huy tác dụng của bội số. Thứ hai, nó ủy thác việc xử lý cho cơ quan để đảm bảo các phương thức trong tương lai mà hiện không được tạo ra vẫn được phục vụ.

Cập nhật

Chuyển sang giải pháp kết hợp js / css cải thiện giao diện - hoạt ảnh mờ tiếp tục hoạt động trên phông nền; -

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-- ;
});

kết hợp với css sau; -

.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 ;
}

Điều này sẽ xử lý các phương thức được lồng lên đến 4 sâu, nhiều hơn tôi cần.


Nó không hoạt động trong Bootstrap 4. Khi bạn đóng phương thức thứ 2, phương thức thứ nhất không còn có thể cuộn được nữa.
Justin

4

Thử cái này:

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

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

Bản hack đơn giản này phù hợp với tôi.


4

Đối với người sử dụng 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>


Này là rất tốt, vấn đề duy nhất còn lại là để ngăn chặn sự tái xuất hiện của các cuộn thanh khi phương thức trên cùng bị đóng
hiếu động

Làm cách nào để sử dụng giải pháp của bạn trong giao diện người dùng ngữ nghĩa?
vahidsamimi

2

Tôi cũng gặp một số rắc rối với các phương thức có thể cuộn của mình, vì vậy tôi đã làm như sau:

  $('.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');
  });

Nó sẽ phục vụ cho bất kỳ phương thức nào trong khi một phương thức sắp xuất hiện. Lưu ý rằng cái đầu tiên đóng cửa để cái thứ hai có thể xuất hiện. Không có thay đổi nào trong cấu trúc Bootstrap.


2

Tôi đã cùng nhau đi một con đường khác, tôi quyết định "De-Nest" cho chúng. Có lẽ ai đó sẽ thấy điều này tiện dụng ...

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.

Thank you very much

2

Mã của tôi hoạt động tốt khi sử dụng loại bỏ dữ liệu.

<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

Đóng phương thức Bootstrap đầu tiên và tự động mở phương thức mới.

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

1

Tại sao không chỉ thay đổi nội dung của phần thân phương thức?

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

Trong phương thức chỉ cần đặt một liên kết hoặc một nút

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

Nếu bạn chỉ muốn chuyển đổi giữa 2 chế độ:

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

Trong phương thức chỉ cần đặt một liên kết hoặc một nút

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

Đó giống như một câu trả lời liên quan đến UX hơn, vì tôi cần câu này để hiển thị thông báo lỗi liên quan đến Phương thức # 1. Vì vậy, Modal # 2 đã có thông báo lỗi. Nhưng đã lâu rồi kể từ khi tôi hỏi câu hỏi này và bây giờ tôi đang làm những việc khác.
AlexioVay

0

thử cái này:

$('.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

Câu trả lời do H Dog đưa ra là tuyệt vời, nhưng cách tiếp cận này thực sự mang lại cho tôi một số nhấp nháy theo phương thức trong Internet Explorer 11. Đầu tiên, Bootstrap sẽ ẩn phương thức loại bỏ lớp 'modal-open', sau đó (sử dụng giải pháp H Dogs), chúng tôi thêm lớp 'modal-open' một lần nữa. Tôi nghi ngờ điều này bằng cách nào đó gây ra hiện tượng nhấp nháy mà tôi đã thấy, có thể do một số kết xuất HTML / CSS chậm.

Một giải pháp khác là ngăn bootstrap xóa lớp 'modal-open' khỏi phần tử body ngay từ đầu. Sử dụng Bootstrap 3.3.7, chức năng ghi đè bên trong hàm hideModal này hoạt động hoàn hảo đối với tôi.

$.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')
    })
}

Trong ghi đè này, lớp 'modal-open' chỉ bị xóa khi không có phương thức nào hiển thị trên màn hình. Và bạn ngăn chặn một khung xóa và thêm một lớp vào phần tử body.

Chỉ bao gồm ghi đè sau khi bootstrap đã được tải.


-4

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

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.