Cómo comprobar si bootstrap modal está abierto, así que puedo usar jquery validate

Necesito hacer una validación solo si un modal está abierto, porque si lo abro y luego lo cierro, y presiono el botón que abre el modal no funciona porque está realizando la validación jquery, pero Mostrando porque el modal fue despedido.

Así que quiero anunciar un jquery si modal está abierto para que valide, ¿es posible?

 $(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  

Para evitar la condición de carrera que menciona @GregPettit, se puede usar:

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

como se discutió en Twitter Bootstrap Modal - IsShown .

Cuando el modal aún no está abierto, .data('bs.modal') devuelve undefined , de ahí que || {} || {} - lo que hará que se isShown el valor (falsy) undefined . Si te gusta el rigor, podrías hacer ($("element").data('bs.modal') || {isShown: false}).isShown

Puedes usar

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

Bootstrap agrega la clase cuando el modal está abierto y lo elimina cuando está cerrado

También puedes usar directamente jQuery.

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

no funcionará si el modal no se ha mostrado antes. Deberá agregar una condición extra:

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

Así que la respuesta teniendo en cuenta la primera aparición:

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

En bootstrap-modal.js v2.2.0:

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

Compruebe si un modal está abierto

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

Para adjuntar un detector de eventos

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