Я искал какое-то время, но не могу найти решение для этого. Я хочу следующее:
- Откройте URL-адрес внутри модального окна Bootstrap. У меня конечно есть эта отработка. Таким образом, контент загружается динамически.
- Когда пользователь нажимает кнопку внутри этого модального окна, я хочу, чтобы текущее модальное окно было скрыто, и сразу после этого я хочу, чтобы новый модальный экран открывался с новым URL-адресом (который пользователь щелкнул). Это содержимое 2-го модального окна также загружается динамически.
- Если пользователь затем закрывает это второе модальное окно, первое модальное окно должно вернуться снова.
Я смотрел на это несколько дней, надеюсь, что кто-то может мне помочь.
Заранее спасибо.
javascript
jquery
twitter-bootstrap
Элко Луурцема
источник
источник
Ответы:
Не видя конкретного кода, сложно дать точный ответ. Однако из документации Bootstrap вы можете скрыть модальное окно следующим образом:
$('#myModal').modal('hide')
Затем покажите другое модальное окно, когда оно будет скрыто:
$('#myModal').on('hidden.bs.modal', function () { // Load up a new modal... $('#myModalNew').modal('show') })
Вам нужно будет найти способ перенести URL-адрес в новое модальное окно, но я предполагаю, что это будет тривиально. Не видя кода, трудно привести пример этого.
источник
Я знаю, что это запоздалый ответ, но он может быть полезен. Вот правильный и чистый способ сделать это, как упоминалось выше в @ karima. Фактически вы можете запускать две функции одновременно;
trigger
иdismiss
модальный.HTML-разметка;
<!-- Button trigger modal --> <ANY data-toggle="modal" data-target="TARGET">...</ANY> <div class="modal fade" id="SELECTOR" tabindex="-1"> <div class="modal-dialog"> <div class="modal-content"> <div class="modal-body"> ... </div> <div class="modal-footer"> <!-- ↓ --> <!-- ↓ --> <ANY data-toggle="modal" data-target="TARGET-2" data-dismiss="modal">...</ANY> </div> </div> </div> </div>
Демо
источник
templateUrl
иwindowClass
свойства?data-dismiss="modal"
кнопку-webkit-backface-visibility: hidden;
на HTML, CSS телоЭто не совсем ответ, но он полезен, когда вы хотите закрыть текущее модальное окно и открыть новое.
В html той же кнопке вы можете попросить закрыть текущее модальное окно с помощью data-dismiss и открыть новое модальное окно напрямую с помощью data-target:
<button class="btn btn-success" data-toggle="modal" data-target="#modalRegistration" data-dismiss="modal">Register</button>
источник
data-dismiss="modal"
том, что он сместит ваш контент влево, когда вы закроете второе модальное окно.Проблема в
data-dismiss="modal"
том, что он сместит ваш контент влевоЯ делюсь тем, что у меня сработало, статус проблемы открывался
pop1
сpop2
КОД JS
var showPopup2 = false; $('#popup1').on('hidden.bs.modal', function () { if (showPopup2) { $('#popup2').modal('show'); showPopup2 = false; } }); $("#popup2").click(function() { $('#popup1').modal('hide'); showPopup2 = true; });
источник
Я использую такой способ:
$(function() { return $(".modal").on("show.bs.modal", function() { var curModal; curModal = this; $(".modal").each(function() { if (this !== curModal) { $(this).modal("hide"); } }); }); });
источник
Используя следующий код, вы можете скрыть первый модальный и сразу открыть второй модальный, используя ту же стратегию, вы можете скрыть второй модальный и показать первый.
$("#buttonId").on("click", function(){ $("#currentModalId").modal("hide"); $("#currentModalId").on("hidden.bs.modal",function(){ $("#newModalId").modal("show"); }); });
источник
Вам необходимо добавить следующий атрибут к ссылке или кнопке, к которой вы хотите добавить эту функцию:
data-dismiss="modal" data-toggle="modal" id="forgotPassword" data-target="#ModalForgotPassword"
Подробный блог: http://sforsuresh.in/bootstrap-modal-window-close-current-open-new-modal/
источник
data-dismiss="modal"
он используется для закрытия существующей открытой модели. вы можете установить его на новую модель
источник
Как упоминалось выше, в html на той же кнопке вы можете попросить закрыть текущее модальное окно с помощью data-dismiss и открыть новое модальное окно напрямую с помощью data-target:
<button class="btn btn-success" data-toggle="modal" data-target="#modalRegistration" data-dismiss="modal">Register</button>
Но это приведет к исчезновению полосы прокрутки, и вы заметите, что если второе модальное окно было длиннее первого
Итак, решение состоит в том, чтобы добавить следующий стиль в модальный встроенный стиль:
Style = "overflow-y : scroll ; "
источник
С BootStrap 3 вы можете попробовать следующее: -
var visible_modal = jQuery('.modal.in').attr('id'); // modalID or undefined if (visible_modal) { // modal is active jQuery('#' + visible_modal).modal('hide'); // close modal }
Протестировано для работы с: http://getbootstrap.com/javascript/#modals (сначала нажмите «Launch Demo Modal»).
источник
.attr
бит, а? Разве это не сработало бы?var visible_modal = jQuery('.modal.in'); if (visible_modal) { visible_modal.modal('hide'); }
.У меня точно такая же проблема, и мое решение только в том случае, если модальный диалог имеет атрибут [role = "dialog"]:
/* * Find and Close current "display:block" dialog, * if another data-toggle=modal is clicked */ jQuery(document).on('click','[data-toggle*=modal]',function(){ jQuery('[role*=dialog]').each(function(){ switch(jQuery(this).css('display')){ case('block'):{jQuery('#'+jQuery(this).attr('id')).modal('hide'); break;} } }); });
источник
У меня была та же проблема, что и у @Gravity Grave, когда прокрутка не работает, если вы используете
data-toggle="modal" data-target="TARGET-2"
в сочетании с
data-dismiss="modal"
Прокрутка работает некорректно и возвращается к прокрутке страницы, а не к модальному. Это происходит из-за удаления из тега модального открытого класса.
В конце концов, мое решение заключалось в том, чтобы установить html внутреннего компонента в модальном окне и использовать css для постепенного появления / исчезновения текста.
источник
Используя функцию щелчка:
$('.btn-editUser').on('click', function(){ $('#viewUser').modal('hide'); // hides modal with id viewUser $('#editUser').modal('show'); // display modal with id editUser });
Берегись:
Убедитесь, что тот, который вы хотите показать, является независимым модальным.
источник
В первом модальном режиме:
замените модальную ссылку на закрытие в нижнем колонтитуле на ссылку закрытия ниже.
<div class="modal-footer"> <a href="#" data-dismiss="modal" class="btn btn-primary" data-toggle="modal" data-target="#second_model_id">Close</a> </div>
Во втором модальном режиме:
Затем второй модальный заменит верхний div тегом ниже div.
<div class="modal fade" tabindex="-1" role="dialog" aria-labelledby="add text for disabled people here" aria-hidden="true" id="second_model_id">
источник
Была такая же проблема, написав это здесь, на случай, если кто-то в будущем наткнется на это и возникнут проблемы с несколькими модальными окнами, которые должны иметь прокрутку (я использую Bootstrap 3.3.7)
У меня была такая кнопка внутри моего первого модального окна:
<div id="FirstId" data-dismiss="modal" data-toggle="modal" data-target="#YourModalId_2">Open modal</div>
Он скроет первый, а затем отобразит второй, а во втором модальном окне у меня будет кнопка закрытия, которая будет выглядеть так:
<div id="SecondId" data-dismiss="modal" data-toggle="modal" data-target="#YourModalId_1">Close</div>
Таким образом, это закроет второе модальное окно и откроет первое, а для работы с прокруткой я добавил в свой файл .css эту строку:
.modal { overflow: auto !important; }
PS: Просто примечание, вы должны иметь эти модальные окна отдельно, второстепенный модальный не может быть вложен в первый, поскольку вы скрываете первый
Итак, вот полный пример, основанный на модальном примере начальной загрузки:
<!-- Button trigger modal --> <button type="button" class="btn btn-primary" data-toggle="modal" data-target="#exampleModal"> Launch demo modal </button> <!-- Modal 1 --> <div class="modal fade" id="exampleModal" 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">×</span> </button> </div> <div class="modal-body"> Add lorem ipsum here </div> <div class="modal-footer"> <button type="button" class="btn btn-primary" data-dismiss="modal" data-toggle="modal" data-target="#exampleModal2"> Open second modal </button> </div> </div> </div> </div> <!-- Modal 2 --> <div class="modal fade" id="exampleModal2" 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">×</span> </button> </div> <div class="modal-body"> ... </div> <div class="modal-footer"> <button type="button" class="btn btn-secondary" data-dismiss="modal" data-toggle="modal" data-target="#exampleModal">Close</button> </div> </div> </div> </div>
источник
Попробуй это
$('#model1').modal('hide'); setTimeout(function(){ $('#modal2').modal('show'); },400);
источник
$("#buttonid").click(function(){ $('#modal_id_you_want_to_hid').modal('hide') }); // same as above button id $("#buttonid").click(function(){ $('#Modal_id_You_Want_to_Show').modal({backdrop: 'static', keyboard: false})});
источник
Я использую другой способ:
$('#showModal').on('hidden.bs.modal', function() { $('#easyModal').on('shown.bs.modal', function() { $('body').addClass('modal-open'); }); });
источник
Если вы хотите закрыть ранее открытое модальное окно при открытии нового модального окна, вы должны сделать это из javascript / jquery, сначала закрыв текущее открытое модальное окно, а затем предоставив тайм-аут 400 мс, чтобы он мог закрыться, а затем откройте новый модальный, как показано ниже. :
$('#currentModal').modal('hide'); setTimeout(function() { //your code to be executed after 200 msecond $('#newModal').modal({ backdrop: 'static'//to disable click close }) }, 400);//delay in miliseconds##1000=1second
Если вы попытаетесь сделать это с помощью,
data-dismiss="modal"
то у него будет проблема с прокруткой, о которой говорили @gravity и @kuldeep в комментариях.источник
Ни один из ответов не помог мне, так как я хотел добиться чего-то, что было точно таким же, как упомянуто в вопросе.
Для этого я создал плагин jQuery.
/* * Raj: This file is responsible to display the modals in a stacked fashion. Example: * 1. User displays modal A * 2. User now wants to display modal B -> This will not work by default if a modal is already displayed * 3. User dismisses modal B * 4. Modal A should now be displayed automatically -> This does not happen all by itself * * Trying to solve problem for: http://stackoverflow.com/questions/18253972/bootstrap-modal-close-current-open-new * */ var StackedModalNamespace = StackedModalNamespace || (function() { var _modalObjectsStack = []; return { modalStack: function() { return _modalObjectsStack; }, currentTop: function() { var topModal = null; if (StackedModalNamespace.modalStack().length) { topModal = StackedModalNamespace.modalStack()[StackedModalNamespace.modalStack().length-1]; } return topModal; } }; }()); // http://stackoverflow.com/a/13992290/260665 difference between $.fn.extend and $.extend jQuery.fn.extend({ // https://api.jquery.com/jquery.fn.extend/ showStackedModal: function() { var topModal = StackedModalNamespace.currentTop(); StackedModalNamespace.modalStack().push(this); this.off('hidden.bs.modal').on('hidden.bs.modal', function(){ // Subscription to the hide event var currentTop = StackedModalNamespace.currentTop(); if ($(this).is(currentTop)) { // 4. Unwinding - If user has dismissed the top most modal we need to remove it form the stack and display the now new top modal (which happens in point 3 below) StackedModalNamespace.modalStack().pop(); } var newTop = StackedModalNamespace.currentTop(); if (newTop) { // 3. Display the new top modal (since the existing modal would have been hidden by point 2 now) newTop.modal('show'); } }); if (topModal) { // 2. If some modal is displayed, lets hide it topModal.modal('hide'); } else { // 1. If no modal is displayed, just display the modal this.modal('show'); } }, });
Рабочий скрипт для справки, JSFiddle: https://jsfiddle.net/gumdal/67hzgp5c/
Вам просто нужно вызывать с моим новым API "
showStackedModal()
" вместо "modal('show')
". Часть скрытия по-прежнему может быть такой же, как и раньше, и автоматически учитывается групповой подход к отображению и скрытию модальных окон.источник
Простое и элегантное решение для BootStrap 3.x. Таким образом можно повторно использовать одно и то же модальное окно.
$("#myModal").modal("hide"); $('#myModal').on('hidden.bs.modal', function (e) { $("#myModal").html(data); $("#myModal").modal(); // do something more... });
источник
если вы используете mdb, используйте этот код
var visible_modal = $('.modal.show').attr('id'); // modalID or undefined if (visible_modal) { // modal is active $('#' + visible_modal).modal('hide'); // close modal }
источник
<div class="container"> <h1>Bootstrap modal: close current, open new</h1> <p class="text-muted"> A proper and clean way to get this done without addtional Javascript/jQuery. The main purpose of this demo is was to answer this <a href="http://stackoverflow.com/questions/18253972/bootstrap-modal-close-current-open-new">question on stackoverflow</a> </p> <hr /> <button type="button" class="btn btn-primary" data-toggle="modal" data-target="#demo-1">Launch Modal #1</button> <button type="button" class="btn btn-info" data-toggle="modal" data-target="#demo-2">Launch Modal #2</button> <button type="button" class="btn btn-default" data-toggle="modal" data-target="#demo-3">Launch Modal #3</button> <!-- [ Modal #1 ] --> <div class="modal fade" id="demo-1" tabindex="-1"> <div class="modal-dialog"> <div class="modal-content"> <button type="button" class="close" data-dismiss="modal"><i class="icon-xs-o-md"></i></button> <div class="modal-header"> <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button> <h4 class="modal-title caps"><strong>Demo Modal #1</strong></h4> </div> <div class="modal-body"> <div class="form-group"> <div class="input-group"> <input type="text" class="form-control" placeholder="Input Placeholder..." /> <span class="input-group-btn"><button class="btn btn-default" type="button">Action</button></span> </div> </div> </div> <div class="modal-footer"> <button type="button" class="btn btn-danger" data-dismiss="modal">×</button> <button type="button" class="btn btn-info" data-toggle="modal" data-target="#demo-2" data-dismiss="modal">Close current, Launch Modal #2</button> <button type="button" class="btn btn-default" data-toggle="modal" data-target="#demo-3" data-dismiss="modal">Close current, Launch Modal #3</button> </div> </div> </div> </div> <!-- [ Modal #2 ] --> <div class="modal fade" id="demo-2" tabindex="-1"> <div class="modal-dialog"> <div class="modal-content"> <button type="button" class="close" data-dismiss="modal"><i class="icon-xs-o-md"></i></button> <div class="modal-header"> <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button> <h4 class="modal-title caps"><strong>Demo Modal #2</strong></h4> </div> <div class="modal-body"> <div class="form-group"> <div class="input-group"> <input type="text" class="form-control" placeholder="Input Placeholder..." /> <span class="input-group-btn"><button class="btn btn-default" type="button">Action</button></span> </div> </div> </div> <div class="modal-footer"> <button type="button" class="btn btn-danger" data-dismiss="modal">×</button> <button type="button" class="btn btn-primary" data-toggle="modal" data-target="#demo-1" data-dismiss="modal">Close current, Launch Modal #1</button> <button type="button" class="btn btn-default" data-toggle="modal" data-target="#demo-3" data-dismiss="modal">Close current, Launch Modal #3</button> </div> </div> </div> </div> <!-- [ Modal #3 ] --> <div class="modal fade" id="demo-3" tabindex="-1"> <div class="modal-dialog"> <div class="modal-content"> <button type="button" class="close" data-dismiss="modal"><i class="icon-xs-o-md"></i></button> <div class="modal-header"> <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button> <h4 class="modal-title caps"><strong>Demo Modal #3</strong></h4> </div> <div class="modal-body"> <div class="form-group"> <div class="input-group"> <input type="text" class="form-control" placeholder="Input Placeholder..." /> <span class="input-group-btn"><button class="btn btn-default" type="button">Action</button></span> </div> </div> </div> <div class="modal-footer"> <button type="button" class="btn btn-danger" data-dismiss="modal">×</button> <button type="button" class="btn btn-info" data-toggle="modal" data-target="#demo-1" data-dismiss="modal">Close current, Launch Modal #1</button> <button type="button" class="btn btn-primary" data-toggle="modal" data-target="#demo-2" data-dismiss="modal">Close current, Launch Modal #2</button> </div> </div> </div> </div> <hr /> <h3 class="caps">Usage:</h3> <pre class="prettyprint"><!-- Button trigger modal --> <ANY data-toggle="modal" data-target="TARGET">...</ANY> <div class="modal fade" id="SELECTOR" tabindex="-1"> <div class="modal-dialog"> <div class="modal-content"> <div class="modal-body"> ... </div> <div class="modal-footer"> <!-- ↓ --> <!-- ↓ --> <ANY data-toggle="modal" data-target="TARGET-2" data-dismiss="modal">...</ANY> </div> </div> </div> </div></pre> </div> <!-- end .container --> <hr /> <footer class="text-center"><a href="https://twitter.com/_elmahdim">@_elmahdim</a></footer> <br /> <br />
источник
Возможно, я немного опоздаю, но думаю, что нашел рабочее решение.
Необходимые -
jQuery
Все модальные окна с кнопкой закрытия / закрытия имеют следующие атрибуты:
<button type="button" class="btn close_modal" data-toggle="modal" data-target="#Modal">Close</button>
Пожалуйста, посмотрите класс close_modal, добавленный в классы кнопки
Теперь, чтобы закрыть все существующие модальные окна, мы вызовем
$(".close_modal").trigger("click");
Итак, где бы вы ни захотели открыть модальный
Просто добавьте приведенный выше код, и все ваши открытые модальные окна будут закрыты.
Затем добавьте свой обычный код, чтобы открыть желаемый модальный
$("#DesiredModal").modal();
источник
Скрыть модальное диалоговое окно.
Метод 1: с помощью Bootstrap.
$('.close').click(); $("#MyModal .close").click(); $('#myModalAlert').modal('hide');
Способ 2: использование
stopPropagation()
.$("a.close").on("click", function(e) { $("#modal").modal("hide"); e.stopPropagation(); });
Метод 3: после вызова указанного метода.
$('#myModal').on('shown', function () { $('#myModal').modal('hide'); })
Метод 4: Использование CSS.
this.display='block'; //set block CSS this.display='none'; //set none CSS after close dialog
источник
Этот код закрывает модальное окно открытым, открывает новое модальное окно, но сразу же закрывается новое модальное окно.
$(nameClose).modal('hide'); $(nameOpen).modal('show');
Мое решение для открытия нового модального окна после закрытия другого:
function swapModals(nameClose,nameOpen) { $(nameClose).modal('hide'); $(nameClose).on('hidden.bs.modal', function () { console.log('Fired when hide event has finished!'); $(nameOpen).modal('show'); }); }
источник
Просто скопируйте и вставьте этот код, и вы можете экспериментировать с двумя модальными окнами. Второе модальное окно открывается после закрытия первого:
<!-- Button to Open the Modal --> <button type="button" class="btn btn-primary" data-toggle="modal" data-target="#myModal"> Open modal </button> <!-- The Modal --> <div class="modal" id="myModal"> <div class="modal-dialog"> <div class="modal-content"> <!-- Modal Header --> <div class="modal-header"> <h4 class="modal-title">Modal Heading</h4> <button type="button" class="close" data-dismiss="modal">×</button> </div> <!-- Modal body --> <div class="modal-body"> Modal body.. </div> <!-- Modal footer --> <div class="modal-footer"> <button type="button" class="btn btn-danger" data-dismiss="modal">Close</button> </div> </div> </div> </div> <!-- The Modal 2 --> <div class="modal" id="myModal2"> <div class="modal-dialog"> <div class="modal-content"> <!-- Modal Header --> <div class="modal-header"> <h4 class="modal-title">Second modal</h4> <button type="button" class="close" data-dismiss="modal">×</button> </div> <!-- Modal body --> <div class="modal-body"> Modal body.. </div> <!-- Modal footer --> <div class="modal-footer"> <button type="button" class="btn btn-danger" data-dismiss="modal">Close</button> </div> </div> </div> </div> <script> $('#myModal').on('hidden.bs.modal', function () { $('#myModal2').modal('show') }) </script>
Ура!
источник