Je crée une fenêtre modale à l'aide de Twitter Bootstrap. Le comportement par défaut est que si vous cliquez en dehors de la zone modale, le modal se fermera automatiquement. Je voudrais désactiver cela - c’est-à-dire ne fermez pas la fenêtre modale lorsque vous cliquez en dehors du modal.
Quelqu'un peut-il partager le code jQuery pour le faire?
Je crois que vous voulez définir le valeur d'arrière-plan à statique. Si vous voulez éviter que la fenêtre se ferme lorsque vous utilisez le Esc clé, vous devez définir une autre valeur.
Exemple:
<a data-controls-modal="your_div_id"
data-backdrop="static"
data-keyboard="false"
href="#">
OU si vous utilisez JavaScript:
$('#myModal').modal({
backdrop: 'static',
keyboard: false
});
Définissez simplement la propriété backdrop
sur 'static'
.
$('#myModal').modal({
backdrop: 'static',
keyboard: true
})
Vous pouvez également définir la propriété keyboard
sur false
car cela empêche la fermeture du modal en appuyant sur la touche. Esc touche du clavier.
$('#myModal').modal({
backdrop: 'static',
keyboard: false
})
myModal
est l'ID du div qui contient votre contenu modal.
Vous pouvez également inclure ces attributs dans la définition modale elle-même:
<div class="modal hide fade" data-keyboard="false" data-backdrop="static">
Si vous avez déjà initialisé la fenêtre modale, vous souhaiterez peut-être réinitialiser les options avec $('#myModal').removeData("modal").modal({backdrop: 'static', keyboard: false})
pour vous assurer que les nouvelles options seront appliquées.
Remplacez l’événement «masquer» Bootstrap de la boîte de dialogue et arrêtez son comportement par défaut (pour supprimer la boîte de dialogue).
S'il vous plaît voir l'extrait de code ci-dessous:
$('#yourDialogID').on('hide.bs.modal', function(e) {
e.preventDefault();
});
Cela fonctionne bien dans notre cas.
Oui, vous pouvez le faire comme ceci:
<div id="myModal" tabindex="-1" role="dialog"
aria-labelledby="myModalLabel"
aria-hidden="true"
data-backdrop="static" data-keyboard="false">
Un peu comme la réponse de @ AymKdn, mais cela vous permettra de changer les options sans réinitialiser le modal.
$('#myModal').data('modal').options.keyboard = false;
Ou si vous avez besoin de plusieurs options, la with
de JavaScript est pratique ici!
with ($('#myModal').data("modal").options) {
backdrop = 'static';
keyboard = false;
}
Si le modal est déjà ouvert, ces options ne prendront effet que lorsque la prochaine fois le modal est ouvert.
Il suffit d'ajouter ces deux choses
data-backdrop="static"
data-keyboard="false"
Ça va ressembler à ça maintenant
<div class="modal fade bs-example-modal-sm" id="myModal" data-backdrop="static" data-keyboard="false" tabindex="-1" role="dialog" aria-labelledby="mySmallModalLabel" aria-hidden="true">
Il va désactiver le bouton d'échappement et aussi le clic n'importe où et se cacher.
Vous pouvez désactiver le comportement de fermeture par clic de l'arrière-plan et en faire la valeur par défaut pour tous vos modaux en ajoutant ce JavaScript à votre page (assurez-vous qu'il est exécuté après le chargement de jQuery et Bootstrap JS):
$(function() {
$.fn.modal.Constructor.DEFAULTS.backdrop = 'static';
});
Comme D3VELOPER le dit, le code suivant le résout:
$('#modal').removeData('bs.modal').modal({backdrop: 'static', keyboard: false});
J'utilise jquery & bootstrap et simplement removeData('modal')
ne fonctionne pas.
Le meilleur que j'ai trouvé est d'ajouter ce code au lien
<!-- Link -->
<a href="#mdl" role="button" data-backdrop="static" data-keyboard="false" data-toggle="modal" id_team="" ></a>
<-- Div -->
<div id="mdl" class="modal hide fade" tabindex="-1" role="dialog" data-keyboard="false" data-backdrop="static"></div>
Si quelqu'un venant de Google tente de trouver un moyen d'empêcher quelqu'un de fermer un modal, n'oubliez pas qu'un bouton de fermeture doit également être supprimé en haut à droite du modal.
J'ai utilisé du CSS pour le cacher:
#Modal .modal-header button.close {
visibility: hidden;
}
Notez que l'utilisation de "display: none;" est écrasé lorsque le modal est créé, ne l'utilisez pas.
Si vous souhaitez désactiver de manière conditionnelle la fonctionnalité backdrop click closing
. Vous pouvez utiliser la ligne suivante pour définir l'option backdrop
sur static
pendant l'exécution.
Bootstrap v3.xx
jQuery('#MyModal').data('bs.modal').options.backdrop = 'static';
Bootstrap v2.xx
jQuery('#MyModal').data('modal').options.backdrop = 'static';
Cela empêchera un modèle déjà instancié avec l'option backdrop
définie sur false
(le comportement par défaut) de se fermer.
Vous pouvez définir le comportement par défaut du popup modal en utilisant l'une des lignes de code ci-dessous:
$.fn.modal.prototype.constructor.Constructor.DEFAULTS.backdrop = 'static';
Faire cela est très facile de nos jours. Il suffit d'ajouter:
data-backdrop="static" data-keyboard="false"
Dans votre diviseur modal.
<button type="button" class="btn btn-info btn-md" id="myBtn3">Static
Modal</button>
<!-- Modal -->
<div class="modal fade" id="myModal3" role="dialog">
<div class="modal-dialog">
<!-- Modal content-->
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal">×</button>
<h4 class="modal-title">Static Backdrop</h4>
</div>
<div class="modal-body">
<p>You cannot click outside of this modal to close it.</p>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-
dismiss="modal">Close</button>
</div>
</div>
</div>
</div>
<script>
$("#myBtn3").click(function(){
$("#myModal3").modal({backdrop: "static"});
});
});
</script>
Eh bien, c’est une autre solution que certains d’entre vous pourraient rechercher (comme j’étais ..)
Mon problème était similaire, la boîte modale se fermait pendant le chargement de l'iframe. J'ai donc dû désactiver le renvoi modal jusqu'à la fin du chargement de l'Iframe, puis le réactiver.
Les solutions présentées ici ne fonctionnaient pas à 100%.
Ma solution était la suivante:
showLocationModal = function(loc){
var is_loading = true;
if(is_loading === true) {
is_loading = false;
var $modal = $('#locationModal');
$modal.modal({show:true});
// prevent Modal to close before the iframe is loaded
$modal.on("hide", function (e) {
if(is_loading !== true) {
e.preventDefault();
return false
}
});
// populate Modal
$modal.find('.modal-body iframe').hide().attr('src', location.link).load(function(){
is_loading = true;
});
}};
Donc, j'empêche temporairement le Modal de fermer avec:
$modal.on("hide", function (e) {
if(is_loading !== true) {
e.preventDefault();
return false
}
});
Mais c'est la var is_loading qui autorisera la fermeture après le chargement de l'Iframe.
Pour mettre à jour l'état de la toile de fond dans Bootstrap 4.1.3 après l'affichage du modal, nous avons utilisé la ligne suivante de Bootstrap-Modal-Wrapper plugin. Référence du code du référentiel de plugin .
$("#yourModalElement").data('bs.modal')._config.backdrop = (true : "static");