J'utilise la librairie Twitter Bootstrap sur un nouveau projet et je souhaite, pour une partie de la page, actualiser et récupérer les dernières données JSON à la fermeture modale. Je ne vois cela nulle part dans la documentation. Quelqu'un peut-il me le signaler ou suggérer une solution?.
Deux problèmes avec l'utilisation des méthodes documentées
$('#my-modal').bind('hide', function () {
// do something ...
});
J'attache déjà une classe "masquer" au modal afin qu'il ne s'affiche pas au chargement de la page, ce qui le chargerait deux fois
même si je supprime la classe de masquage et que je définis l'élément id à display:none
et que j'ajoute console.log("THE MODAL CLOSED");
à la fonction ci-dessus lorsque je clique sur close, rien ne se passe.
$('#myModal').on('hidden.bs.modal', function () {
// do something…
})
Bootstrap 3: getbootstrap.com/javascript/#modals-events
Bootstrap 4: getbootstrap.com/docs/4.1/components/modal/#events
$('#myModal').on('hidden', function () {
// do something…
})
Voir getbootstrap.com/2.3.2/javascript.html#modals → Événements
$('#my-modal').on('hidden.bs.modal', function () {
window.alert('hidden event fired!');
});
Voir ce JSFiddle pour un exemple de travail:
http://jsfiddle.net/aq9Laaew/120440/
Voir la section Événements modaux de la documentation ici:
En démarrant Bootstrap 3 (edit: toujours identique dans Bootstrap 4), il existe 2 instances dans lesquelles vous pouvez déclencher des événements, à savoir:
$('#myModal').on('hide.bs.modal', function () {
console.log('Fired at start of hide event!');
});
$('#myModal').on('hidden.bs.modal', function () {
console.log('Fired when hide event has finished!');
});
Au lieu de "live", vous devez utiliser l'événement "on", mais l'assigner à l'objet document:
Utilisation:
$(document).on('hidden.bs.modal', '#Control_id', function (event) {
// code to run on closing
});
$(document.body).on('hidden.bs.modal', function () {
$('#myModal').removeData('bs.modal')
});
Bootstrap fournit des événements que vous pouvez associer à modal , comme si vous vouliez déclencher un événement lorsque le modal est terminé. masqué de l'utilisateur, vous pouvez utiliser hidden.bs.modal event like this
/* hidden.bs.modal event example */
$('#myModal').on('hidden.bs.modal', function () {
window.alert('hidden event fired!');
})
Vérifiez le fonctionnement d'un fiddle ici [ } _ en savoir plus sur les méthodes modales et les événements ici dans DOCUMENTATION
J'ai vu de nombreuses réponses concernant les événements d'amorçage tels que hide.bs.modal
, qui se déclenchent à la fermeture du modal.
Il y a un problème avec ces événements: toute fenêtre contextuelle du modal (popovers, info-bulles, etc.) déclenchera cet événement.
Il existe un autre moyen d'attraper l'événement à la fermeture d'un modal.
$(document).on('hidden','#modal:not(.in)', function(){} );
Bootstrap utilise la classe in
lorsque le modal est ouvert . Il est très important d’utiliser l’événement hidden
car la classe in
est toujours définie lorsque l’événement hide
est déclenché.
Cette solution ne fonctionnera pas dans IE8 car IE8 ne prend pas en charge le sélecteur Jquery :not()
.
Bootstrap 4:
$('#myModal').on('hidden.bs.modal', function (e) {
// call your method
})
hide.bs.modal : Cet événement est déclenché immédiatement lorsque la méthode d'instance de masquage a été appelée.
hidden.bs.modal : Cet événement est déclenché lorsque le modal a fini d'être masqué par l'utilisateur (attend que les transitions CSS soient terminées).
J'avais les mêmes problèmes que certains avec
$('#myModal').on('hidden.bs.modal', function () {
// do something… })
Vous devez placer ceci au bas de la page, le haut ne déclenchera jamais l'événement.
J'interviens très tard ici, mais pour les personnes utilisant les modaux Bootstrap avec React, j'ai utilisé MutationObserver pour détecter les modifications de la visibilité d'un modal et ajuster l'état en conséquence - cette méthode pourrait être appliquée à n'importe quelle fonction le modal est fermé:
//react stuff
componentDidMount: function() {
var self = this;
$(function() {
$("#example_modal").addClass('modal');
//use MutationObserver to detect visibility change
//reset state if closed
if (MutationObserver) {
var observer = new MutationObserver(function(mutations) {
//use jQuery to detect if element is visible
if (!$('#example_modal').is(':visible')) {
//reset your state
self.setState({
thingone: '',
thingtwo: ''
});
}
});
var target = document.querySelector('#example_modal');
observer.observe(target, {
attributes: true
});
}
});
}
Pour ceux qui s’interrogent sur la prise en charge des navigateurs modernes, CanIUse offre la couverture de MutationObserver à environ 87%
J'espère que ça aide quelqu'un :)
À votre santé,
Jake
Je le ferais comme ça:
$('body').on('hidden.bs.modal', '#myModal', function(){ //this call your method });
Le reste a déjà été écrit par d'autres. Je recommande également de lire la documentation: jquery - on method