Comment vérifier si le modal bootstrap est ouvert, afin de pouvoir utiliser jquery validate

Je dois faire une validation seulement si un modal est ouvert, parce que si je l’ouvre, puis je le ferme, et que j’appuie sur le bouton qui ouvre le modal, il ne fonctionne pas car il effectue la validation jquery, mais pas montrant parce que le modal a été rejeté.

Donc, je veux append un jquery si modal est ouvert, donc je le valide, est-ce possible?

 $(document).ready(function(){ var validator =$('#form1').validate( { ignore: "", rules: { usu_login: { required: true }, usu_password: { required: true }, usu_email: { required: true }, usu_nombre1: { required: true }, usu_apellido1: { required: true }, usu_fecha_nac: { required: true }, usu_cedula: { required: true }, usu_telefono1: { required: true }, rol_id: { required: true }, dependencia_id: { required: true }, }, highlight: function(element) { $(element).closest('.grupo').addClass('has-error'); if($(".tab-content").find("div.tab-pane.active:has(div.has-error)").length == 0) { $(".tab-content").find("div.tab-pane:hidden:has(div.has-error)").each(function(index, tab) { var id = $(tab).attr("id"); $('a[href="#' + id + '"]').tab('show'); }); } }, unhighlight: function(element) { $(element).closest('.grupo').removeClass('has-error'); } }); }); // end document.ready  

Pour éviter la condition de course mentionnée dans @GregPettit, on peut utiliser:

 ($("element").data('bs.modal') || {})._isShown // Bootstrap 4 ($("element").data('bs.modal') || {}).isShown // Bootstrap <= 3 

comme discuté dans Twitter Bootstrap Modal - IsShown .

Lorsque le modal n'est pas encore ouvert, .data('bs.modal') renvoie undefined , donc le || {} || {} - qui fera de isShown la valeur (falsy) undefined . Si vous êtes trop ssortingct, vous pouvez le faire ($("element").data('bs.modal') || {isShown: false}).isShown

Vous pouvez utiliser

 $('#myModal').hasClass('in'); 

Bootstrap ajoute la classe in lorsque le modal est ouvert et le supprime lorsqu’il est fermé

Vous pouvez également utiliser directement jQuery.

 $('#myModal').is(':visible'); 
 $("element").data('bs.modal').isShown 

ne fonctionnera pas si le modal n’a pas été montré auparavant. Vous devrez append une condition supplémentaire:

 $("element").data('bs.modal') 

donc la réponse prenant en compte la première apparition:

 if ($("element").data('bs.modal') && $("element").data('bs.modal').isShown){ ... } 

Sur bootstrap-modal.js v2.2.0:

 ( $('element').data('modal') || {}).isShown 

Vérifier si un modal est ouvert

$('.modal:visible').length && $('body').hasClass('modal-open')

Pour joindre un écouteur d’événement

 $(document).on('show.bs.modal', '.modal', function () { // run your validation... ( or shown.bs.modal ) });