La solution populaire consistant à utiliser un setTimeout
peut fonctionner dans certains cas, mais c'est une solution terrible. Je l'utilisais moi-même en l'encadrant bien sûr de $(document).ready()
(mais cela n'a jamais aidé), mais je n'ai jamais pu trouver une solution fiable. Certains navigateurs/systèmes prennent plus de temps que d'autres, et parfois 1000ms
ne suffisait pas. Et j'étais fatigué de chercher pourquoi le $(document).ready()
n'aidait pas, donc :
J'ai adopté une approche différente.
Je m'abonne aux événements modaux lorsque j'ai besoin d'utiliser le modal pour la première fois.
Ouvrir mon modal
et du côté JS :
function ShowModal() {
InitModalEventsOnce();
$('#MyModal').modal('show');
}
var InitModalEventsIsDone = false; // Drapeau pour suivre l'abonnement
function InitModalEventsOnce() {
if (!InitModalEventsIsDone) {
InitModalEventsIsDone = true;
$('#MyModal').on('shown.bs.modal', function () {
// quelque chose
})
$('#MyModal').on('hidden.bs.modal', function (e) {
// quelque chose
});
}
}
Et c'est tout ! La seule solution fiable que j'ai trouvée.