禁止Twitter Bootstrap模式窗口关闭

use*_*175 537 jquery modal-dialog mouseclick-event twitter-bootstrap

我正在使用Twitter Bootstrap创建一个模态窗口.默认行为是,如果单击模态区域外,模态将自动关闭.我想禁用它 - 即在模态外部单击时不关闭模态窗口.

有人可以共享jQuery代码来做到这一点吗?

Nob*_*ita 679

我相信你想将背景值设置为静态.如果要在使用Esc键时避免关闭窗口,则必须设置其他值.

例:

<a data-controls-modal="your_div_id"
   data-backdrop="static"
   data-keyboard="false"
   href="#">
Run Code Online (Sandbox Code Playgroud)

或者如果您使用的是JavaScript:

$('#myModal').modal({
  backdrop: 'static',
  keyboard: false
});
Run Code Online (Sandbox Code Playgroud)

  • @ user1296175你的最终代码是什么?我也想这样做. (7认同)
  • 谢谢@nobita,添加data-backdrop ="static"就行了!Twitter引导文件很差:( (4认同)
  • 检查来自@@ Varun Chatterji的答案,并将其包含在您的模态定义中 (2认同)

Nir*_*mal 310

只需将backdrop属性设置为'static'.

$('#myModal').modal({
  backdrop: 'static',
  keyboard: true
})
Run Code Online (Sandbox Code Playgroud)

您可能还希望将keyboard属性设置为,false因为这可以通过按Esc键盘上的键来阻止模态关闭.

$('#myModal').modal({
  backdrop: 'static',
  keyboard: false
})
Run Code Online (Sandbox Code Playgroud)

myModal 是包含模态内容的div的ID.

  • 另外要避免模态显示立即传入show:false (7认同)
  • 是的,这是最干净,最简单的答案(因为它避免了添加数据属性).作为参考,在@Options_部分下面提到了`backdrop`和`keyboard` [在他们的文档中](http://getbootstrap.com/javascript/#modals-usage). (6认同)

Var*_*rji 211

您还可以在模态定义中包含这些属性:

<div class="modal hide fade" data-keyboard="false" data-backdrop="static">
Run Code Online (Sandbox Code Playgroud)

  • 是的,这是最干净,最简单的答案(因为它通过添加数据属性来工作).作为参考,背景和键盘在其选项部分下的文档中提到. (4认同)

Aym*_*Kdn 46

如果您已经初始化了模态窗口,那么您可能希望重置选项$('#myModal').removeData("modal").modal({backdrop: 'static', keyboard: false})以确保它将应用新选项.

  • 现在:$('#modal').removeData('bs.modal').modal({backdrop:'static',keyboard:false}); (5认同)
  • 这帮助了我。设置“背景:'静态'”后,用户仍然可以通过单击关闭模式;看起来像是一个错误,但这成功了! (2认同)

小智 33

覆盖Dialog的Bootstrap"hide"事件并停止其默认行为(以配置对话框).

请参阅以下代码段:

   $('#yourDialogID').on('hide.bs.modal', function(e) {

       e.preventDefault();
   });
Run Code Online (Sandbox Code Playgroud)

它在我们的情况下工作正常.

  • 只是优雅.thx :)和@sertaconay只是创建一个布尔变量(例如),将检查它以决定是否要阻止默认 (3认同)
  • 那么,如何还原呢? (2认同)
  • 此处唯一在打开模态后起作用的选项 (2认同)
  • 如果您希望更精确地控制模态何时可关闭以及何时不可关闭,这是一个完美的解决方案. (2认同)

Sat*_*ngh 32

是的,你可以这样做:

<div id="myModal"  tabindex="-1" role="dialog"
     aria-labelledby="myModalLabel"
     aria-hidden="true"
     data-backdrop="static"  data-keyboard="false">
Run Code Online (Sandbox Code Playgroud)


CBa*_*arr 22

有点像@ AymKdn的答案,但这将允许您更改选项而无需重新初始化模态.

$('#myModal').data('modal').options.keyboard = false;
Run Code Online (Sandbox Code Playgroud)

或者,如果您需要做多个选项,JavaScript with会在这里派上用场!

with ($('#myModal').data("modal").options) {
    backdrop = 'static';
    keyboard = false;
}
Run Code Online (Sandbox Code Playgroud)

如果模态已经打开,则这些选项仅在下次打开模态生效.


Viv*_*vek 14

只需添加这两件事

data-backdrop="static" 
data-keyboard="false"
Run Code Online (Sandbox Code Playgroud)

它现在看起来像这样

<div class="modal fade bs-example-modal-sm" id="myModal" data-backdrop="static" data-keyboard="false" tabindex="-1" role="dialog" aria-labelledby="mySmallModalLabel" aria-hidden="true">
Run Code Online (Sandbox Code Playgroud)

它将禁用转义按钮以及任何位置的单击并隐藏.


Eri*_*c B 11

您可以通过将此JavaScript添加到页面中来禁用后台的单击关闭行为并将其设置为所有模式的默认值(确保在加载jQuery和Bootstrap JS后执行):

$(function() {
    $.fn.modal.Constructor.DEFAULTS.backdrop = 'static';
});
Run Code Online (Sandbox Code Playgroud)


小智 6

正如D3VELOPER所说,以下代码解决了它:

$('#modal').removeData('bs.modal').modal({backdrop: 'static', keyboard: false});
Run Code Online (Sandbox Code Playgroud)

我正在使用jquery和bootstrap,根本removeData('modal')不工作.


Che*_*Chu 5

BS 5

<button type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#staticBackdrop">
  Launch static backdrop modal
</button>

<div class="modal fade" id="staticBackdrop" data-bs-backdrop="static" data-bs-keyboard="false" tabindex="-1" aria-labelledby="staticBackdropLabel" aria-hidden="true">
  <div class="modal-dialog">
   ...
  </div>
</div>
Run Code Online (Sandbox Code Playgroud)

BS 4.4

<button type="button" class="btn btn-primary" data-toggle="modal" data-target="#staticBackdrop">
  Launch static backdrop modal
</button>

<div class="modal fade" id="staticBackdrop" data-backdrop="static" tabindex="-1" role="dialog" aria-labelledby="staticBackdropLabel" aria-hidden="true">
  <div class="modal-dialog" role="document">
   ...
  </div>
</div>
Run Code Online (Sandbox Code Playgroud)