Szukałem chwilę, ale nie mogę znaleźć na to rozwiązania. Chcę, aby:
- Otwórz adres URL wewnątrz modalu Bootstrap. Mam to źle działające. Zawartość jest więc ładowana dynamicznie.
- Kiedy użytkownik naciska przycisk wewnątrz tego modalu, chcę, aby bieżący modal został ukryty, a zaraz potem chcę, aby nowy modal otworzył się z nowym adresem URL (który kliknął użytkownik). Ta zawartość drugiego modalu jest również ładowana dynamicznie.
- Jeśli użytkownik zamknie następnie drugi moduł, pierwszy moduł musi wrócić ponownie.
Gapię się na to od dni, mam nadzieję, że ktoś może mi pomóc.
Z góry dziękuję.
javascript
jquery
twitter-bootstrap
Eelco Luurtsema
źródło
źródło
Odpowiedzi:
Nie widząc konkretnego kodu, trudno jest udzielić precyzyjnej odpowiedzi. Jednak w dokumentacji Bootstrap można ukryć modalne w następujący sposób:
$('#myModal').modal('hide')
Następnie pokaż inny modal po jego ukryciu:
$('#myModal').on('hidden.bs.modal', function () { // Load up a new modal... $('#myModalNew').modal('show') })
Będziesz musiał znaleźć sposób na przekazanie adresu URL do nowego okna modalnego, ale przypuszczam, że byłoby to trywialne. Bez zapoznania się z kodem trudno podać przykład.
źródło
Wiem, że to późna odpowiedź, ale może się przydać. Oto właściwy i czysty sposób, aby to zrobić, jak wspomniano powyżej @ karima. W rzeczywistości możesz uruchomić dwie funkcje jednocześnie;
trigger
idismiss
modalne.HTML Markup;
<!-- 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>
Próbny
źródło
templateUrl
iwindowClass
?data-dismiss="modal"
przycisk-webkit-backface-visibility: hidden;
na html, body cssTo nie jest dokładnie odpowiedź, ale jest przydatna, gdy chcesz zamknąć bieżący modal i otworzyć nowy modal.
W html w tym samym przycisku możesz poprosić o zamknięcie bieżącego modalu za pomocą odrzucenia danych i otwarcie nowego modalu bezpośrednio z danymi docelowymi:
<button class="btn btn-success" data-toggle="modal" data-target="#modalRegistration" data-dismiss="modal">Register</button>
źródło
data-dismiss="modal"
polega na tym, że przesunie zawartość w lewo, gdy zamkniesz drugi moduł.Problem
data-dismiss="modal"
polega na tym, że przesunie zawartość w lewoDzielę co pracował dla mnie problemem statment było otwarcie
pop1
zpop2
KOD 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; });
źródło
Używam tej metody:
$(function() { return $(".modal").on("show.bs.modal", function() { var curModal; curModal = this; $(".modal").each(function() { if (this !== curModal) { $(this).modal("hide"); } }); }); });
źródło
Używając poniższego kodu, możesz ukryć pierwszy modalny i natychmiast otworzyć drugi modalny, używając tej samej strategii możesz ukryć drugi modalny i pokazać pierwszy.
$("#buttonId").on("click", function(){ $("#currentModalId").modal("hide"); $("#currentModalId").on("hidden.bs.modal",function(){ $("#newModalId").modal("show"); }); });
źródło
Musisz dodać następujący atrybut do łącza lub przycisku, w którym chcesz dodać tę funkcjonalność:
data-dismiss="modal" data-toggle="modal" id="forgotPassword" data-target="#ModalForgotPassword"
Blog ze szczegółami: http://sforsuresh.in/bootstrap-modal-window-close-current-open-new-modal/
źródło
data-dismiss="modal"
służy do zamknięcia istniejącego otwartego modelu. możesz ustawić go na nowy model
źródło
Jak wspomniano powyżej, w html w tym samym przycisku możesz poprosić o zamknięcie bieżącego modalu przez odrzucenie danych i otwarcie nowego modalu bezpośrednio za pomocą data-target:
<button class="btn btn-success" data-toggle="modal" data-target="#modalRegistration" data-dismiss="modal">Register</button>
Ale to spowoduje zniknięcie paska przewijania i zauważysz, że jeśli drugi modal był dłuższy niż pierwszy
Tak więc rozwiązaniem jest dodanie następującego stylu w stylu wbudowanym modalnym:
Style = "overflow-y : scroll ; "
źródło
Dzięki BootStrap 3 możesz spróbować tego: -
var visible_modal = jQuery('.modal.in').attr('id'); // modalID or undefined if (visible_modal) { // modal is active jQuery('#' + visible_modal).modal('hide'); // close modal }
Przetestowano pod kątem współpracy z: http://getbootstrap.com/javascript/#modals (najpierw kliknij „Launch Demo Modal”).
źródło
.attr
kawałka, prawda? Czy to nie zadziałałoby równie dobrze?var visible_modal = jQuery('.modal.in'); if (visible_modal) { visible_modal.modal('hide'); }
.Mam dokładnie ten sam problem, a moje rozwiązanie jest tylko wtedy, gdy modalne okno dialogowe ma atrybut [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;} } }); });
źródło
Miałem ten sam problem, co @Gravity Grave, w którym przewijanie nie działa, jeśli używasz
data-toggle="modal" data-target="TARGET-2"
w połączeniu z
data-dismiss="modal"
Przewijanie nie działa poprawnie i powraca do przewijania strony, a nie do trybu modalnego. Wynika to z odrzucenia danych, które usuwa klasę modal-open ze znacznika.
Ostatecznie moim rozwiązaniem było ustawienie html wewnętrznego komponentu na modalne i użycie css do zanikania / pojawiania się tekstu.
źródło
Korzystanie z funkcji kliknięcia:
$('.btn-editUser').on('click', function(){ $('#viewUser').modal('hide'); // hides modal with id viewUser $('#editUser').modal('show'); // display modal with id editUser });
Heads-up:
Upewnij się, że ten, który chcesz pokazać, jest niezależnym modalem.
źródło
W pierwszym trybie:
zamień link odrzucenia modalnego w stopce na link zamykający poniżej.
<div class="modal-footer"> <a href="#" data-dismiss="modal" class="btn btn-primary" data-toggle="modal" data-target="#second_model_id">Close</a> </div>
W drugim trybie:
Następnie drugi modal zamień górny div na poniższy znacznik div.
<div class="modal fade" tabindex="-1" role="dialog" aria-labelledby="add text for disabled people here" aria-hidden="true" id="second_model_id">
źródło
Miałem ten sam problem, pisząc to tutaj na wypadek, gdyby ktoś w przyszłości się z tym spotkał i ma problemy z wieloma modami, które również muszą mieć przewijanie (używam Bootstrap 3.3.7)
To, co zrobiłem, to taki przycisk w moim pierwszym modalu:
<div id="FirstId" data-dismiss="modal" data-toggle="modal" data-target="#YourModalId_2">Open modal</div>
Ukryje pierwszy, a potem wyświetli drugi, aw drugim trybie miałbym przycisk zamykania, który wyglądałby tak:
<div id="SecondId" data-dismiss="modal" data-toggle="modal" data-target="#YourModalId_1">Close</div>
Więc to zamknie drugi modal i otworzy pierwszy, a aby przewijanie działało, dodałem do mojego pliku .css tę linię:
.modal { overflow: auto !important; }
PS: Na marginesie, musisz mieć te modały osobno, modal pomocniczy nie może być zagnieżdżony w pierwszym, gdy ukryjesz pierwszy
Oto pełny przykład oparty na przykładzie modalnym bootstrap:
<!-- 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>
źródło
Spróbuj tego
$('#model1').modal('hide'); setTimeout(function(){ $('#modal2').modal('show'); },400);
źródło
$("#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})});
źródło
Używam innego sposobu:
$('#showModal').on('hidden.bs.modal', function() { $('#easyModal').on('shown.bs.modal', function() { $('body').addClass('modal-open'); }); });
źródło
Jeśli chcesz zamknąć poprzednio otwarty modal podczas otwierania nowego modalu, musisz to zrobić z javascript / jquery, najpierw zamykając bieżący otwarty modal, a następnie dając limit czasu 400 ms, aby umożliwić zamknięcie, a następnie otwórz nowy modal, jak w poniższym kodzie :
$('#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
Jeśli spróbujesz to zrobić za pomocą
data-dismiss="modal"
, będzie miał problem z przewijaniem, o czym wspominali @gravity i @kuldeep w komentarzach.źródło
Żadna z odpowiedzi nie pomogła mi, ponieważ chciałem osiągnąć coś dokładnie takiego, jak wspomniane w pytaniu.
W tym celu stworzyłem wtyczkę 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'); } }, });
Working Fiddle w celach informacyjnych, JSFiddle: https://jsfiddle.net/gumdal/67hzgp5c/
Musisz tylko wywołać za pomocą mojego nowego API „
showStackedModal()
” zamiast po prostu „modal('show')
”. Część ze skóry może nadal być taka sama jak poprzednio, a skumulowane podejście do pokazywania i ukrywania modali jest automatycznie obsługiwane.źródło
Proste i eleganckie rozwiązanie dla BootStrap 3.x. W ten sposób można ponownie wykorzystać ten sam modal.
$("#myModal").modal("hide"); $('#myModal').on('hidden.bs.modal', function (e) { $("#myModal").html(data); $("#myModal").modal(); // do something more... });
źródło
jeśli używasz mdb, użyj tego kodu
var visible_modal = $('.modal.show').attr('id'); // modalID or undefined if (visible_modal) { // modal is active $('#' + visible_modal).modal('hide'); // close modal }
źródło
<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 />
źródło
Mogę się trochę spóźnić, ale myślę, że znalazłem działające rozwiązanie.
Wymagany -
jQuery
Wszystkie modały z przyciskiem zamykania / zamykania z atrybutami ustawionymi w następujący sposób -
<button type="button" class="btn close_modal" data-toggle="modal" data-target="#Modal">Close</button>
Zobacz klasę close_modal dodaną do klas przycisku
Teraz, aby zamknąć wszystkie istniejące modały, zadzwonimy
$(".close_modal").trigger("click");
Tak więc, gdziekolwiek chcesz otworzyć modal
Po prostu dodaj powyższy kod, a wszystkie otwarte modały zostaną zamknięte.
Następnie dodaj swój normalny kod, aby otworzyć żądany modal
$("#DesiredModal").modal();
źródło
Ukryj modalne okno dialogowe.
Metoda 1: użycie Bootstrap.
$('.close').click(); $("#MyModal .close").click(); $('#myModalAlert').modal('hide');
Metoda 2: używanie
stopPropagation()
.$("a.close").on("click", function(e) { $("#modal").modal("hide"); e.stopPropagation(); });
Metoda 3: po wywołaniu metody.
$('#myModal').on('shown', function () { $('#myModal').modal('hide'); })
Metoda 4: Korzystanie z CSS.
this.display='block'; //set block CSS this.display='none'; //set none CSS after close dialog
źródło
Ten kod, zamknij otwarty modal, otwórz nowy modal, ale natychmiast nowy modal zostanie zamknięty.
$(nameClose).modal('hide'); $(nameOpen).modal('show');
Moje rozwiązanie do otwierania nowego modalu po zamknięciu innych to:
function swapModals(nameClose,nameOpen) { $(nameClose).modal('hide'); $(nameClose).on('hidden.bs.modal', function () { console.log('Fired when hide event has finished!'); $(nameOpen).modal('show'); }); }
źródło
Po prostu skopiuj i wklej ten kod i możesz eksperymentować z dwoma modami. Drugi modal jest otwarty po zamknięciu pierwszego:
<!-- 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>
Twoje zdrowie!
źródło