J'utilise bootbox pour afficher la boîte de dialogue.
Si j'utilise bootbox.confirm
, bootbox.alert
ou bootbox.Prompt
, en appuyant sur la touche escape
ou en cliquant en dehors de la boîte de dialogue, la boîte de dialogue s'est fermée comme prévu
mais lors de l'utilisation de bootbox.dialog
, lorsque je clique en dehors de la boîte de dialogue ou en appuyant sur la touche escape
, la boîte de dialogue ne se ferme pas, comment faire en sorte qu'elle se comporte comme les autres boîtes de dialogue?
var box = bootbox.dialog({
show: false,
backdrop: true,
animate: false,
title: 'Bla',
message: 'bla bla bla',
buttons: {
cancel: {
label: 'Cancel',
className: 'btn-warning'
},
save: {
label: 'Parse',
className: 'btn-success',
callback: function () {
// handling with ajax
return false;
}
}
}
});
box.modal('show');
Cela devrait le faire. Veuillez noter que cela n'a été testé que sur la v3. en utilisant bootstrap 2.3.2
$(document).on('click', '.modal-backdrop', function (event) {
bootbox.hideAll()
});
Ajoutez une fonction de rappel onEscape
, qui peut avoir un corps vide.
Voir documents et exemple .
Code de base:
bootbox.dialog({
onEscape: function() {},
// ...
});
Pour être honnête, je n'ai jamais vraiment utilisé de modal - il est venu d'un PR il y a très longtemps, mais je n'ai jamais été convaincu de son cas d'utilisation. Pas bon pour vous maintenant, mais la méthode est en fait considérée comme obsolète dans la v3.0.0 et sera probablement supprimée dans les futures versions - elle ne correspond tout simplement pas (pour moi) à la raison pour laquelle Bootbox a été créée et comme d'autres méthodes ont été peaufiné, amélioré et testé, il est resté quelque peu négligé.
Mais vous pouvez faire quelque chose comme ça
$(document).keyup(function(e) {
if (e.keyCode == 27) {box.modal("hide");} // esc
});
J'ai essayé d'autres réponses ici et elles n'ont pas fonctionné pour moi. Je ne sais pas si cela a à voir avec la version spécifique de la boîte de démarrage que j'utilisais ou une autre raison, mais j'ai simplement déployé ma propre solution pour:
en procédant comme suit:
function hideDialogOnOutsideClick(d) { // d = bootbox.dialog(...)
d[0].addEventListener('click', function(e) {
if(e.target == d[0])
$(d).modal('hide');
e.stopImmediatePropagation();
return false;
});
}
qui est utilisé comme ça:
var d = bootbox.dialog(...) // or alert, confirm etc
hideDialogOnOutsideClick(d);
Dans la version 3, avec dialogue, la toile de fond étant vraie ne fonctionne que lorsque onEscape est également vrai - il vous suffit donc de définir les deux sur true, par exemple.
bootbox.dialog({message:'Message', title:'Title', backdrop:true, onEscape:true})
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet" type="text/css"/>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/bootbox.js/4.4.0/bootbox.min.js"></script>