その機能を欠いているのはあなただけではありません。ブートストラップは「最小限」すぎる場合があると思います。背後にいる人々は、「実装レイヤー」で多くのことを行う必要があると考えていますが、ブートストラップjQueryプラグイン自体がそれを不可能にする場合は役に立ちません。
次のように、自分で機能を実装する必要があります。
v2.1.1では、bootstrap.js
モーダルは61行目から始まります。
にModal.prototype
、2つの関数を追加するlock
とunlock
、次のようになります(modal.prototype
コードが多すぎるため、ここでは先頭のみを示します)
Modal.prototype = {
constructor: Modal
//add this function
, lock: function () {
this.options.locked = true
}
//add this function
, unlock: function () {
this.options.locked = false
}
, toggle: function () {
...
...
次に、同じくModal.prototypeで、関数を見つけて、hide
次のようになるように行を追加します(ここでも、非表示の上部のみが表示されます)
, hide: function (e) {
e && e.preventDefault()
var that = this
//add this line
if (that.options.locked) return
e = $.Event('hide')
...
...
そして最後に、次のように変更$.fn.modal.defaults
します。
$.fn.modal.defaults = {
backdrop: true
, keyboard: true
, show: true
, locked: false //this line is added
}
これで、ブートストラップモーダルにオンザフライのロック/ロック解除機能があり、ユーザーが重要な瞬間にモーダルを閉じるのを防ぐことができます。
例:
これは、 http://twitter.github.com/bootstrap/javascript.html#modalsの「LiveDemo」の変更バージョンです。
<!-- 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">
「ロック」と「ロック解除」の2つのボタンを挿入しました。クリックすると、モーダルがロックモードまたは通常モードに設定されます(初期化された設定)
編集、あなたの場合、あなたはajaxをするときにlock / onlockを呼び出す必要があります:
$("myModal").modal('lock');
$.ajax({
url: url,
...
...
, success(html) {
...
...
$("#myModal").modal('unlock');
}
});