J'ai cherché pendant un moment, mais je ne peux pas trouver de solution à cela. Je veux ce qui suit:
Je regarde ça depuis des jours, j'espère que quelqu'un pourra m'aider.
Merci d'avance.
Sans voir de code spécifique, il est difficile de vous donner une réponse précise. Cependant, à partir de la documentation Bootstrap, vous pouvez masquer le modal comme suit:
$('#myModal').modal('hide')
Ensuite, montrez un autre modal une fois caché:
$('#myModal').on('hidden.bs.modal', function () {
// Load up a new modal...
$('#myModalNew').modal('show')
})
Vous allez devoir trouver un moyen d'envoyer l'URL à la nouvelle fenêtre modale, mais je suppose que ce serait trivial. Sans voir le code, il est difficile de donner un exemple de cela.
Je sais que c'est une réponse tardive, mais cela pourrait être utile. Voici un moyen propre et propre pour y parvenir, comme @ karima l'a mentionné ci-dessus Vous pouvez réellement activer deux fonctions à la fois. trigger
et dismiss
le modal.
Balisage 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>
Ce n'est pas exactement la réponse, mais c'est utile lorsque vous souhaitez fermer le modal actuel et en ouvrir un nouveau.
Dans le même bouton, dans le code HTML, vous pouvez demander à fermer le modal actuel avec Data-Cong et ouvrir un nouveau modal directement avec Data-target:
<button class="btn btn-success"
data-toggle="modal"
data-target="#modalRegistration"
data-dismiss="modal">Register</button>
Le problème avec data-dismiss="modal"
est-il changera votre contenu à gauche
Je partage ce qui a fonctionné pour moi, le problème a été d'ouvrir pop1
à partir de pop2
CODE 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;
});
J'utilise cette méthode:
$(function() {
return $(".modal").on("show.bs.modal", function() {
var curModal;
curModal = this;
$(".modal").each(function() {
if (this !== curModal) {
$(this).modal("hide");
}
});
});
});
En utilisant le code suivant, vous pouvez masquer le premier modal et ouvrir immédiatement le deuxième modal. En utilisant la même stratégie, vous pouvez masquer le deuxième modal et afficher le premier.
$("#buttonId").on("click", function(){
$("#currentModalId").modal("hide");
$("#currentModalId").on("hidden.bs.modal",function(){
$("#newModalId").modal("show");
});
});
Vous devez ajouter l'attribut suivant au lien ou au bouton où vous souhaitez ajouter cette fonctionnalité:
data-dismiss="modal" data-toggle="modal" id="forgotPassword" data-target="#ModalForgotPassword"
Un blog détaillé: http://sforsuresh.fr/bootstrap-modal-window-close-current-open-new-modal/
J'ai exactement le même problème, et ma solution n'est que si le dialogue modal a l'attribut [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;}
}
});
});
Avec BootStrap 3, vous pouvez essayer ceci: -
var visible_modal = jQuery('.modal.in').attr('id'); // modalID or undefined
if (visible_modal) { // modal is active
jQuery('#' + visible_modal).modal('hide'); // close modal
}
Testé pour fonctionner avec: http://getbootstrap.com/javascript/#modals (cliquez sur "Launch Demo Modal" en premier)
Utilisation de la fonction de clic:
$('.btn-editUser').on('click', function(){
$('#viewUser').modal('hide'); // hides modal with id viewUser
$('#editUser').modal('show'); // display modal with id editUser
});
La tête haute:
Assurez-vous que celui que vous voulez montrer est un modal indépendant.
data-dismiss="modal"
il est utilisé pour fermer le modèle ouvert existant. vous pouvez le définir sur le nouveau modèle
J'ai eu le même problème que @ Grave Grave où le défilement ne fonctionne pas si vous utilisez
data-toggle="modal" data-target="TARGET-2"
en conjonction avec
data-dismiss="modal"
Le défilement ne fonctionne pas correctement et revient au défilement de la page plutôt qu'au modal. Cela est dû à la suppression par la suppression de données de la classe à la classe modal-open.
Ma solution a finalement consisté à définir le code HTML du composant interne sur le modal et à utiliser css pour afficher un fondu en fondu.
Aucune des réponses ne m'a aidé puisque je voulais réaliser quelque chose qui était exactement le même que celui mentionné dans la question.
J'ai créé un plugin jQuery à cette fin.
/*
* 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');
}
},
});
Utilisation de Fiddle pour référence, JSFiddle: https://jsfiddle.net/gumdal/67hzgp5c/
Vous devez simplement appeler avec ma nouvelle API "showStackedModal()
" au lieu de "modal('show')
". La partie masquée peut toujours être la même qu'avant et l'approche empilée d'affichage et de masquage des modaux est automatiquement prise en charge.
En premier modal:
remplacez le lien de renvoi modal dans le pied de page par un lien étroit ci-dessous.
<div class="modal-footer">
<a href="#" data-dismiss="modal" class="btn btn-primary" data-toggle="modal" data-target="#second_model_id">Close</a>
</div>
En deuxième modal:
Ensuite, le second modal remplace top div par la balise div ci-dessous.
<div class="modal fade" tabindex="-1" role="dialog" aria-labelledby="add text for disabled people here" aria-hidden="true" id="second_model_id">
<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 />
Avait le même problème, écrit ceci ici au cas où quelqu'un à l'avenir tomberait dessus et aurait des problèmes avec plusieurs modaux qui doivent avoir scrolling aussi (j'utilise Bootstrap 3.3.7)
Ce que j'ai fait est d'avoir un bouton comme celui-ci dans mon premier modal:
<div id="FirstId" data-dismiss="modal" data-toggle="modal" data-target="#YourModalId_2">Open modal</div>
Cela cachera le premier et ensuite affichera le second, et dans le second modal, j'aurais un bouton de fermeture qui ressemblerait à ceci:
<div id="SecondId" data-dismiss="modal" data-toggle="modal" data-target="#YourModalId_1">Close</div>
Donc, cela va fermer le second modal et ouvrir le premier et faire le travail scrolling work que j'ai ajouté à mon fichier .css cette ligne:
.modal {
overflow: auto !important;
}
PS: Juste une note de côté, vous devez avoir ces modaux séparément, le modal mineur ne peut pas être imbriqué dans le premier car vous masquez le premier
Donc, voici l'exemple complet basé sur l'exemple modal 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>
Si vous voulez fermer le modal précédemment ouvert tout en ouvrant le nouveau modal, vous devez le faire à partir de javascript/jquery en fermant d'abord le modal actuellement ouvert, puis en lui donnant un délai d'expiration de 400 ms pour lui permettre de se fermer, puis d'ouvrir le nouveau modal comme ci-dessous. :
$('#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
Si vous essayez de le faire avec le data-dismiss="modal"
, le problème de défilement mentionné par @gravity et @kuldeep apparaîtra dans les commentaires.
si vous utilisez mdb utilisez ce code
var visible_modal = $('.modal.show').attr('id'); // modalID or undefined
if (visible_modal) { // modal is active
$('#' + visible_modal).modal('hide'); // close modal
}
$("#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})});
Essaye ça
$('#model1').modal('hide');
setTimeout(function(){
$('#modal2').modal('show');
},400);
Solution simple et élégante pour BootStrap 3.x. Le même modal peut être réutilisé de cette façon.
$("#myModal").modal("hide");
$('#myModal').on('hidden.bs.modal', function (e) {
$("#myModal").html(data);
$("#myModal").modal();
// do something more...
});
J'utilise une autre manière:
$('#showModal').on('hidden.bs.modal', function() {
$('#easyModal').on('shown.bs.modal', function() {
$('body').addClass('modal-open');
});
});