Vous n'êtes pas le seul à qui il manque de la fonctionnalité. Je pense que bootstrap est parfois trop "minimaliste", les gens derrière l'idée a beaucoup doit être fait dans la "mise en œuvre de la couche", mais il est d'aucune utilité lorsque le bootstrap, jQuery plugins eux-mêmes rend impossible!
Vous devez implémenter la fonctionnalité vous-même, comme ceci :
en bootstrap.js
v2.1.1 modal commence à la ligne 61.
en Modal.prototype
, ajouter deux fonctions, lock
et onluck
, de sorte qu'il ressemble à ceci (que je montre ici que le début d' modal.prototype
, parce que c'est trop de code)
Modal.prototype = {
constructor: Modal
//add this function
, lock: function () {
this.options.locked = true
}
//add this function
, unlock: function () {
this.options.locked = false
}
, toggle: function () {
...
...
Puis, aussi Modal.prototype, trouver la fonction hide
, et ajouter une ligne qui ressemble à ceci (encore une fois, seul le haut de la peau est montré)
, hide: function (e) {
e && e.preventDefault()
var that = this
//add this line
if (that.options.locked) return
e = $.Event('hide')
...
...
Et enfin, alter $.fn.modal.defaults
à la :
$.fn.modal.defaults = {
backdrop: true
, keyboard: true
, show: true
, locked: false //this line is added
}
Maintenant que vous avez sur la volée de verrouiller/déverrouiller les fonctionnalités de votre modal bootstrap, empêchant l'utilisateur de fermer la modale à des moments critiques.
Exemple :
Ceci est une version modifiée de "Live Demo" de l' http://twitter.github.com/bootstrap/javascript.html#modals
<!-- Button to trigger modal -->
<a href="#myModal" role="button" class="btn" data-toggle="modal">Launch demo modal</a>
<!-- Modal -->
<div id="myModal" class="modal hide fade" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
<h3 id="myModalLabel">Modal header</h3>
</div>
<div class="modal-body">
<p>One fine body…</p>
</div>
<div class="modal-footer">
<button class="btn" data-dismiss="modal" aria-hidden="true">Close</button>
<button class="btn btn-primary" onclick="$('#myModal').modal('lock');">lock</button>
<button class="btn btn-primary" onclick="$('#myModal').modal('unlock');">unLock</button>
</div>
</div>
<script type="text/javascript">
J'ai inséré deux boutons, "lock" et "déverrouiller" - quand on clique dessus, ils ont mis le modal en soit verrouillé ou en mode normal (les réglages, il est initialisé avec)
Modifier, dans votre cas, vous avez juste à appeler de verrouillage/onlock quand on fait de l'ajax :
$("myModal").modal('lock');
$.ajax({
url: url,
...
...
, success(html) {
...
...
$("#myModal").modal('unlock');
}
});