J'ai un code que ce que je voulais faire est de fermer le modal sur le succès ajax. Ceci est mon code:
script
success: function() {
console.log("delete success");
$('#deleteContactModal').modal('hide');
$( "#loadContacts" ).load( "/main/loadContacts" );
}
html
<div class="modal fade" id="deleteContactModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
<div class="modal-dialog modal-sm" role="document">
<div class="modal-content">
<!--everything goes here -->
</div>
</div>
</div>
Tout fonctionne, sauf lorsque le code $('#deleteContactModal').modal('hide');
se déclenche, il affiche simplement un écran noir fané comme ceci:
Le modal se ferme mais la couleur fanée noire est toujours présente. Est-ce que j'ai râté quelque chose? Merci d'avance.
J'utilise bootstrap 3.3.
essayez d'ajouter cet attribut avec votre div modal aria-hidden="true"
par exemple:
<div aria-hidden="true" class="modal fade" id="deleteContactModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
Voici mon exemple de travail
<div class="modal fade" id="copy_course_modal" tabindex="-1" role="dialog" aria-labelledby="copycourse" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
<h4 class="modal-title" id="purchaseLabel">Copy Chapter</h4>
</div>
<div class="modal-body">
Modal body content here
</div>
<div class="modal-footer">
<button type="button" class="btn btn-primary" onclick="saveCopiedCourse()">Copy Course</button>
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
</div>
</div>
</div>
</div>
et en cas de succès faire de même.
$("#copy_course_modal").modal('hide');
J'ai exactement le même problème et la seule façon de travailler est de supprimer individuellement les parties du modal. Il suffit de mettre cette fonction dans yous js et de créer un événement onclick à votre bouton dans votre code HTML ou js. J'espère que j'ai aidé.
function hideModal(){
$(".modal").removeClass("in");
$(".modal-backdrop").remove();
$('body').removeClass('modal-open');
$('body').css('padding-right', '');
$(".modal").hide();
}
J'ai moi-même abordé cette question dans une situation similaire.
Cela semble être lié à la nature asynchrone des animations javascript + bootstrap.
C'est un sale coup, mais emballer l'appel à "se cacher" dans un délai d'attente a fonctionné pour moi:
setTimeout( function(){$("#myModal").modal('hide')}, 300 );
Si vous utilisez cette "solution" au problème, vous devrez peut-être ajuster la valeur du délai d'attente. Les animations bootstrap semblent prendre environ 125 à 200 ms, donc 300 fournit un tampon de sécurité Nice.
Essayer:
$(".modal.in").modal("hide");
Cela cachera le modal actuellement actif.
$('#deleteContactModal').modal('hide')
Trouver ce lien
Il donne des détails https://getbootstrap.com/docs/3.3/javascript/#modal-hide concernant la fenêtre de modèle
Ceci est juste un problème de timing. L'animation de fondu prend du temps et javascript ne peut pas la fermer. annulez simplement l’animation de fondu et cela fonctionne correctement!
<div class="modal" tabindex="-1" role="dialog" aria-labelledby="...">
...
</div>
(Ne pas utiliser class = "modal fade", jus class = "modal")
J'ai essayé plusieurs des solutions proposées et la seule qui a fonctionné pour moi a été:
$ (". modal.in"). modal ('masquer');
Certains ont effacé le modal et l'arrière-plan, mais il n'a pas réaffiche les invocations suivantes.
Simple, cliquez par programme sur le bouton de fermeture de la boîte de dialogue.
$ ("bouton [données-rejet = \" modal\"]"). click ();
Cela fermera automatiquement le dialogue.
Pour effacer le fond
$(".modal-backdrop").toggleClass("hide, show");
testé en bs4
Aucune de ces options ne fonctionnait pour moi, à part celle qui disait de ne pas utiliser de fondu modal. Cependant, je voulais utiliser un fondu modal. Mon code passait un appel ajax pour enregistrer les modifications, puis, en cas de succès, procédait comme suit:
$('#myModal').modal('hide');
doRefresh();
Le problème était que doRefresh mettait alors à jour la page sous le modal. Si j'ai supprimé le doRefresh, cela a fonctionné. Donc ce que j'ai fini par faire était ceci:
$('#myModal').modal('hide');
setTimeout(doRefresh, 500);
Ce problème sera résolu en cachant des éléments individuels de modal .
$("#modal").modal('hide');
$('body').removeClass('modal-open');
$(".modal-backdrop").remove();