Bootstrap: Відкрийте ще один модаль у модалі


95

Отже, я використовую цей код, щоб відкрити інше модальне вікно в поточному модальному вікні:

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

Що трапляється, приблизно протягом 500 мс смуга прокрутки дублюється. Я здогадуюсь тому, що поточний спосіб все ще згасає. Однак це виглядає дуже негладко і заїкаючись.

Буду вдячний за будь-які пропозиції щодо вирішення цього питання.

Крім того, чи є спосіб побудови цього у події onclick непрофесійним?

Я працюю з завантажувальною версією 3.0.

Редагувати: Я вважаю, що потрібно скоротити час вицвітання модальних способів. Як це можливо?


3
Робочий приклад можна знайти в bootply.com/lvKQA2AM28
CrandellWS

Відповіді:


86

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". Але анімація все ще подвоює смугу прокрутки на секунду.
AlexioVay

@ user2829128 ось що data-dismissробить. Він закриває поточне вікно та відкриває нове. Чи можете ви розмістити свій код в bootplyабо jsfiddle?
jayeshkv

14
Прокрутка не працює на другому модалі, якщо висота довга.
Хіральді

Те саме тут із bootstrap v4. Коли я натискаю на кнопку на першому мондалі, він відкриває інший модаль, другий модаль відображається зі сувою тіла. Проблеми в класі .modal-open for body. Він видаляється, коли ми натискаємо і не додаємо знову.
fdrv

7
.modal { overflow-y: auto }вирішує проблему прокрутки BS4.
Riki137

84

Моє рішення не закриває нижній модальний, але справді стеки на ньому. Він зберігає поведінку прокрутки правильно. Перевірено в 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: саме те, що мені потрібно :) працює ідеально. Дякую!
Тобіас Коллер

2
Воістину легендарний !! Я перегортав, коли хтось пропонував використовувати плагін саме для цього ... просто хотів отримати просте рішення для простої проблеми, і ось вам ... Вітаємо!
Пт0zenFyr

2
Велике спасибі, за ВАШУ допомогу. Ваше рішення вирішило мою проблему, коли я використовую два модалі одночасно !!!!!
Левон,

3
Javascript працював для Bootstrap 4, однак CSS цього не робив. Натомість я приховав задник, а потім додав .modal: after {content: ""; дисплей: блок; фон: rgba (0,0,0, .5); положення: фіксоване; зверху: 0; знизу: 0; ширина: 100%; z-індекс: -1; }
Джейсон Г.

28

Щоб відкрити інше модальне вікно у поточному модальному вікні,
ви можете використовувати bootstrap-modal

завантажувальний модуль DEMO


Використання цього завантажувального модуля зміщує фоновий вміст праворуч.
Брайан

@ Брайан - дивіться тут: stackoverflow.com/questions/46339063 / ...
lfkwtz

18

спробуйте це

<!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-й модаль довгий, з’являється прокрутка 1-го модалу, і коли ви відкриваєте 2-й модаль і закриваєте його, перший модальний прокручування не працює.
Вінсент Дапітон,

Щиро дякую, це було великою допомогою :)
Даніель Муньос,

17

Ви можете насправді виявити, коли старий модал закривається, викликавши 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


15

Оновлення за 2018 рік - Використання Bootstrap 4

Я виявив, що більшість відповідей мають багато непотрібних 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>

Потенційна проблема в цьому випадку полягає в тому, що на тлі другого модалу ховається перший модальний. Щоб цього не сталося, зробіть 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подію модалів, закриває перший модаль.

$("#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-й модальний, 1-й більше не може прокручувати.
Джастін

@Justin - Я не бачу конкретного сценарію, який би це демонстрував, і оскільки прокрутка виходить за рамки вихідного питання. Я пропоную вам шукати або задавати інше питання, яке стосується проблеми прокрутки.
Зім

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

Модалі в модалі:

$('.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-й модаль довгий, з’являється прокрутка 1-го модалу, і коли ви відкриваєте 2-й модаль і закриваєте його, перший модальний прокручування не працює.
Вінсент Дапітон,

Приклад, наведений вище, створює модаль замість першого модалу, а не зверху, ані в (перший більше не видно).
JackTheKnife

Дуже приємний ефект.
Хорхе Б.

Як можна використовувати своє рішення в семантичному інтерфейсі?
vahidsamimi

9

Працюючи над проектом, в якому багато модалів, що викликають інші модали, і кілька хлопців HTML, які можуть не знати, щоб ініціювати його щоразу для кожної кнопки. Прийшов до подібного висновку, як @gmaggio, зневажливо, пройшовши довгий шлях спочатку.

РЕДАГУВАТИ: тепер підтримує модальні способи, що викликаються через 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% ваша проблема, але показаний модульний гачок дуже зручний. Управління класом body.modal-open здається помилковим у BS v.3.3.5, після закриття одного модалу та відкриття іншого воно відсутнє, а тому фон прокручується замість (другого) модаля. Ваш Хук може виправити таку поведінку.
Мануель Арвад Шмідт,

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
Зім

1
@Skelly зміна z-індексу, як це було зроблено в css - це гарна ідея ...z-index: 1080 !important;
CrandellWS

4
Якщо відкрити 2-й модальний і натиснути назовні, він буде помилковим. (Chrome, остання версія)
Мартін Браун,

можливо, я помиляюся, але я вважаю, що документи кажуть не вкладати модаль в модаль, так що це не дивно
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-й модальний, 1-й більше не може прокручувати.
Джастін

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,

Як я можу використовувати ваше рішення в семантичному інтерфейсі?
vahidsamimi

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

Я пішов якось по іншому маршруту всі разом, я вирішив їх "Де-Гніздити". Можливо, комусь це знадобиться ...

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

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

Якщо ви просто хочете переключити між двома способами:

    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, тому що мені це потрібно було, щоб відобразити повідомлення про помилку щодо Модального №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 спочатку приховає модальний, видаляючи клас "відкриття модалів", а потім (за допомогою рішення H Dogs) додаємо клас «модально-відкритий» знову. Я підозрюю, що це якось спричинює мерехтіння, яке я бачив, можливо, через деякий повільний візуалізація HTML / CSS.

Іншим рішенням є запобігання завантажувальному стріппу при видаленні класу 'modal-open' з елемента body в першу чергу. Використовуючи 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')
    })
}

У цьому перевизначенні клас «відкриття модалів» видаляється лише тоді, коли на екрані немає видимих ​​модалів. І ви запобігаєте одному фрейму видалення та додавання класу до елемента body.

Просто включіть заміну після завантаження bootstrap.


-4

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.