如何通过点击背景关闭模态(Twitter Bootstrap)

Zhe*_*hen 8 jquery background modal-dialog twitter-bootstrap

嗨我将twitter bootstrap模式的默认值设置为在用户点击背景时不关闭

$.fn.modal.defaults = {
    backdrop: 'static'
  , keyboard: false
  , show: false
}
Run Code Online (Sandbox Code Playgroud)

但是,有一种特殊情况,我需要覆盖此默认值以允许用户单击背景以关闭模式.

我试图在显示特定模态时覆盖它

//Modal to be displayed and allow user to close it by clicking on background
view = new Onethingaday.Views.Muses.MuseModalView
  model: @options.muse

$('.modal').html view.render().el
$('.modal').bind 'shown', =>
  $('.modal').modal
    'backdrop': true
  ('.modal').unbind 'show'
$('.modal').modal('show')
Run Code Online (Sandbox Code Playgroud)

但是,我上面的代码不起作用.任何人都知道如何修改代码使其工作.此外,上面的代码似乎正在改变应用程序中所有我的模态的默认行为,这不是我想要的.如何更改此特定模式的背景(即MuseModalView)?谢谢!

小智 7

我今天正在处理类似的问题.起初,我发现了这个讨论:https://github.com/twitter/bootstrap/issues/1202.有人建议设置isShown为false,以防止模式窗口关闭背景点击:

$('myelement').data('modal').isShown = false
Run Code Online (Sandbox Code Playgroud)

我不能说我喜欢黑客,特别是当我发现模态窗口没有正确关闭Ok/Cancel按钮时 - 当isShown设置为false时.我找不到更好的解决方案,所以我做了这个:我设置全局默认背景:"静态"(禁用关闭背景点击)并添加此代码:

  $('#myModal').on('shown', function () {
    $("div.modal-backdrop").on('click', function() {
      if(myCondition == true) {
        $('#myModal').modal('hide');
      }
    })
  });
Run Code Online (Sandbox Code Playgroud)

当模态窗口打开时,具有类模态背景的div被动态附加到主体,并且在关闭时被移除 - 对于每个模态窗口.这意味着如果我们堆叠模态窗口,我们应该确保正确处理这个问题.所以,我调整了我的上层代码:

  $('#myModal').on('shown', function () {
    $("div.modal-backdrop").each(function(){
      if($(this).data('wired') !== 'true'){
        $(this).on('click', function() {
          if(myCondition == true){
            $('#myModal').modal('hide');
          }
        }).data('wired', true);
      }
    })
  });
Run Code Online (Sandbox Code Playgroud)

仅当myCondition为true时,此代码才应关闭模态窗口.它应该适合我,我希望这也将帮助你和其他任何会遇到类似问题的人.