je n'ai besoin de valider que si un modal est ouvert, car si je l'ouvre, puis je le ferme, et j'appuie sur le bouton qui ouvre le modal pour qu'il ne fonctionne pas car il effectue la validation jQuery, mais pas montrant parce que le modal a été licencié.
Donc, je veux ajouter un jQuery si modal est ouvert afin que je valide, est-ce possible?
<script>
$(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
</script>
Pour éviter la condition de concurrence mentionnée par @GregPettit, on peut utiliser:
($("element").data('bs.modal') || {})._isShown // Bootstrap 4
($("element").data('bs.modal') || {}).isShown // Bootstrap <= 3
comme indiqué dans Twitter Bootstrap Modal - IsShown .
Lorsque le modal n'est pas encore ouvert, .data('bs.modal')
renvoie undefined
, d'où le || {}
- qui fera de isShown
la valeur (falsy) undefined
. Si vous aimez la rigueur, on pourrait 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 ajouter une condition supplémentaire:
$("element").data('bs.modal')
donc la réponse en tenant compte de la première apparition:
if ($("element").data('bs.modal') && $("element").data('bs.modal').isShown){
...
}
Vérifier si un modal est ouvert
$('.modal:visible').length && $('body').hasClass('modal-open')
Pour attacher un écouteur d'événement
$(document).on('show.bs.modal', '.modal', function () {
// run your validation... ( or shown.bs.modal )
});
Bootstrap 2,3,4 Vérifiez si un modal est ouvert dans la page:
if($('.modal.in').length)
Sur bootstrap-modal.js v2.2.0:
( $('element').data('modal') || {}).isShown