Non sei l'unico a mancare quella funzione. Penso che il bootstrap a volte sia troppo "minimalista", le persone dietro hanno l'idea che molto dovrebbe essere fatto nel "livello di implementazione", ma è inutile quando il bootstrap che i plugin jQuery rendono impossibile!
si deve implementare la funzionalità da soli, in questo modo:
in bootstrap.js
v2.1.1 modale inizia alla linea 61.
in Modal.prototype
, aggiungere due funzioni, lock
e unlock
, in modo che appaia come questo (mi mostra qui solo l'inizio di modal.prototype
, becuase è troppo codice)
Modal.prototype = {
constructor: Modal
//add this function
, lock: function() {
this.options.locked = true
}
//add this function
, unlock: function() {
this.options.locked = false
}
, toggle: function() {
...
...
Quindi, anche in Modal.prototype, trovare la funzione hide
, e aggiungere una riga in modo che appaia come questo (ancora una volta, solo top di pelle viene mostrato)
, hide: function (e) {
e && e.preventDefault()
var that = this
//add this line
if (that.options.locked) return
e = $.Event('hide')
...
...
E, infine, alterare $.fn.modal.defaults
a:
$.fn.modal.defaults = {
backdrop: true
, keyboard: true
, show: true
, locked: false //this line is added
}
Ora hai la funzionalità di blocco/sblocco al volo nel tuo modal bootstrap, impedendo all'utente di chiudere il modal nei momenti critici.
Esempio:
Questa è una versione alterata di "Live Demo" dal 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">
ho inserito due pulsanti, "Lock" e "sbloccare" - quando si fa clic, si misero la modale in modalità chiusa o normale (le impostazioni sono inizializzate con)
Modifica, nel tuo caso, devi solo chiamare blocco/onlock quando facendo ajax:
$("myModal").modal('lock');
$.ajax({
url: url,
...
...
, success(html) {
...
...
$("#myModal").modal('unlock');
}
});
dopo aver applicato questo metodo, lo sfondo (lo sfondo grigio) sembra scomparire. ho bisogno di manualmente $ ('# thisModal'). modal ({backdrop: true}); per usarlo. è un errore o questo è l'unico modo per farlo? –
@TianLoon. Ho aggiornato la risposta con la notifica sulla versione bootstrap e un [jsfiddle] (http://jsfiddle.net/Sz7ZS/) usando bootstrap 2.3.2 (la versione più popolare della versione 2.x). Nel violino appare lo sfondo - forse l'hai accidentalmente impostato su opaco 0, bianco o qualcosa del genere? – davidkonrad
GRAZIE MOLTO PER QUESTO !!!!! –