2014-05-12 46 views
3

我有这个问题,我需要打开多个模式。好的是,在我打开一个新的模式之前,现有的模式可以关闭。 当一个模式打开通常我得到一个类适用于身体,称为“模式打开”它适用于溢出:隐藏身体。bootstrap打开多个模式问题

我创造了这个脚本:

var login = function() { 

    var handleRegister = function() { 

     $("a").click(function (e) { 
      var target = $(this).data("target"); 

      if (target) { 
       var visible = $(target).is(":visible"); 

       if (!visible) { 
        $('.modal').each(function() { 
         $(this).modal('hide'); // hide existing modals 
        }); 

        $(target).modal('show'); 
       } 

       e.preventDefault(); 
      } 
     }); 
    } 

    return { 
     init: function() { 
      handleRegister(); 
     } 
    } 
}(); 

正如你所看到的,我遍历所有现有的模态,并关闭他们(我假定这将调用hidden.bs.modal并删除模式开从身体类),并在这些运行后,我打电话显示方法在我的目标。 问题是模态开放类不适用于正文。

我尝试在show call之后加入$(“body”)。addClass(“modal-open”),但不添加类。

有人遇到过这个吗?

回答

1

我通过钩住模态隐藏/显示的事件来解决这个问题。 我修改剧本是这样的:

var login = function() { 

     var handleRegister = function() { 

      $("a, button").click(function (e) { 
       var target = $(this).data("target"); 
       var type = $(this).data("type"); 

       if (target && type) { 
        var visible = $(target).is(":visible"); 

        if (!visible) {      
         var available_height = $(window).height() - $('.topbar').outerHeight(); 
         var content = $('.modal-content', target); 
         content.height(available_height); 

         $('.modal').each(function() { 
          $(this).modal('hide'); // hide all existing modals 
         }); 

         $(target).modal('show'); 
        } 

        e.preventDefault(); 
       } 
      }); 

      $('.modal').on('hidden.bs.modal', function (e) { 
       $("body").removeClass("modal-open"); 
      }); 

      $('.modal').on('shown.bs.modal', function (e) { 
       $("body").addClass("modal-open"); 
      }); 
     } 

     return { 
      init: function() { 
       handleRegister(); 
      } 
     } 
    }(); 

我不清楚为什么这个工程,我会认为这是将在模式脚本反正发生。但它有效,所以嘿嘿。

0

这里是我的解决方案:


之前,你打开你的第二个模式:

hasAlreadyModalOpen = $("BODY").hasClass("modal-open"); 
mySecondModal.modal("show"); 

mySecondModal.on('hidden.bs.modal', function (e) { 
    if (hasAlreadyModalOpen) { 
     $("body").addClass("modal-open"); 
    } 
}); 
0

一个很老的问题,但一个简单的答案,因为这是高的搜索结果,它仍然是一个问题。 将附加的类添加到任何辅助模块,例如然后挂钩到他们的隐藏事件将简单地减轻这一点。

$(document).on("hidden.bs.modal",".sub-modal.modal", function() { 
    $("body").addClass("modal-open"); 
});