您不是唯一一个需要这个功能的人。我认为Bootstrap有时过于“极简主义”,背后的人们认为很多工作应该在“实现层”中完成,但当Bootstrap jQuery插件本身使其不可能时,这是没有用的!
您必须自己实现功能,像这样:
在bootstrap.js v2.1.1中,模态框从第61行开始。
在Modal.prototype中,添加两个函数lock和unlock,所以它看起来像这样(我只展示了modal.prototype的开头,因为它是太多代码)。
Modal.prototype = {
constructor: Modal
, lock: function () {
this.options.locked = true
}
, unlock: function () {
this.options.locked = false
}
, toggle: function () {
...
...
接下来,在 Modal.prototype 中找到 hide
函数,并添加一行代码,使其看起来像这样(仅显示 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
}
现在你的bootstrap模态框具备即时锁定/解锁功能,可以在重要时刻防止用户关闭模态框。
例子 :
这是来自 http://twitter.github.com/bootstrap/javascript.html#modals 的“Live Demo”修改版。
<a href="#myModal" role="button" class="btn" data-toggle="modal">Launch demo modal</a>
<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">
我已经插入了两个按钮,“锁定”和“解锁”——当点击时,它们会将模态框设置为锁定或正常模式(与其初始化的设置相同)。
在您的情况下,“编辑”,您只需在执行ajax时调用lock/onlock函数:
$("myModal").modal('lock');
$.ajax({
url: url,
...
...
, success(html) {
...
...
$("#myModal").modal('unlock');
}
});