如何处理打开多个模态Bootstrap窗口

时间:2015-07-09 18:46:51

标签: javascript jquery asp.net-mvc twitter-bootstrap

从第一个模态中的按钮调用第二个模态。当第二个模型打开和关闭时,第一个模型变为非活动状态。我甚至无法移动模态。

1 个答案:

答案 0 :(得分:1)

This article解释了如何实现这一目标。

  

我们可以使用hidden.bs.modalshown.bs.modal事件回调   跟踪一次打开的模态数。鉴于这些   模态而不是对话框,一次只能激活一个模态。该   应该禁用休息。

     

我在body标签上创建了一个计数器,因为没有更好的地方。每   显示模态的时间我递增计数器然后减少它   当模态关闭时再次出现。

     

使用此计数器,我可以快速计算模态的z-index   而且相应的背景将高于其他任何背景   页面上的模态和背景。这满足'禁用一切   别的'要求。

     

设置模态的z-index是没问题的,但找到了   相应的背景div需要用类搜索标签   .modal-backdrop。为了确保我只在。上设置z-index   最近的一个,我设置了z-index并添加了.fv-modal-stack   上课。然后当打开后续模态时,我会寻找所有   没有fv-modal-stack类的背景。

以下是一些代码:

<script type='text/javascript'>
    $(document).ready(function() {
        $('#openBtn').click(function(){
            $('#myModal').modal({show:true})
        });

        $('.modal').on('hidden.bs.modal', function( event ) {
            $(this).removeClass( 'fv-modal-stack' );
            $('body').data( 'fv_open_modals', $('body').data( 'fv_open_modals' ) - 1 );
        });

        $( '.modal' ).on( 'shown.bs.modal', function ( event ) {
            // keep track of the number of open modals
            if ( typeof( $('body').data( 'fv_open_modals' ) ) == 'undefined' )
            {
                $('body').data( 'fv_open_modals', 0 );
            }

            // if the z-index of this modal has been set, ignore.
            if ( $(this).hasClass( 'fv-modal-stack' ) )
            {
                return;
            }

            $(this).addClass( 'fv-modal-stack' );
            $('body').data( 'fv_open_modals', $('body').data( 'fv_open_modals' ) + 1 );
            $(this).css('z-index', 1040 + (10 * $('body').data( 'fv_open_modals' )));
            $( '.modal-backdrop' ).not( '.fv-modal-stack' ).css( 'z-index', 1039 + (10 * $('body').data( 'fv_open_modals' )));
            $( '.modal-backdrop' ).not( 'fv-modal-stack' ).addClass( 'fv-modal-stack' ); 
         });
    });
</script>

<a data-toggle="modal" href="#myModal" class="btn btn-primary">Launch modal</a>

<div class="modal" id="myModal">
    <div class="modal-dialog">
        <div class="modal-content">
            <div class="modal-header">
                <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
                <h4 class="modal-title">Modal 1</h4>
            </div>
            <div class="container"></div>
            <div class="modal-body">
               Content for the dialog / modal goes here.
               <br>
               <br>
               <br>
               <p>more content</p>
               <br>
               <br>
               <br>
               <a data-toggle="modal" href="#myModal2" class="btn btn-primary">Launch modal</a>
            </div>
        <div class="modal-footer">
          <a href="#" data-dismiss="modal" class="btn">Close</a>
          <a href="#" class="btn btn-primary">Save changes</a>
        </div>
      </div>
    </div>
</div>

<div class="modal" id="myModal2">
    <div class="modal-dialog">
      <div class="modal-content">
        <div class="modal-header">
          <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
          <h4 class="modal-title">Modal 2</h4>
        </div><div class="container"></div>
        <div class="modal-body">
          Content for the dialog / modal goes here.
          <br>
          <br>
          <p>come content</p>
          <br>
          <br>
          <br>
          <a data-toggle="modal" href="#myModal3" class="btn btn-primary">Launch modal</a>
        </div>
        <div class="modal-footer">
          <a href="#" data-dismiss="modal" class="btn">Close</a>
          <a href="#" class="btn btn-primary">Save changes</a>
        </div>
      </div>
    </div>
</div>