Bootstrap 3 - 模态背景不会根据模态对话框的高度调整大小?

时间:2014-12-15 12:59:31

标签: javascript css twitter-bootstrap modal-dialog

我在一个模态中放了一个表单,当用户触发单选按钮时,我试图显示表单的一些隐藏字段。在我显示隐藏的字段后,模态自动重新缩放的高度,但模态背景的高度不能用作模式对话框。我怎么能解决它?

<!-- modal -->
<div class='modal fade' id='contact-modal' tabindex='-1' role='dialog' aria-labelledby='modal-label' aria-hidden='true' data-backdrop='static' data-keyboard='false'>
    <div class='modal-dialog'>
        <div class='modal-content'>

            <div class='modal-header'>
                <button type='button' class='close' data-dismiss='modal'>
                    <span aria-hidden='true'>&times;</span><span class='sr-only'>Close</span>
                </button>
                <h4 class='modal-title' id='modal-label'>今日聯絡事項</h4>
            </div>

            <div class='modal-body'>
                <form role='form'>
                    <div class='form-group'>
                        <label for='learning'>學習情況</label>
                        <div class='btn-group' id='learning' data-toggle='buttons'>
                            <label class='btn btn-default'><input type='radio' />良好</label>
                            <label class='btn btn-default'><input type='radio' />尚可</label>
                            <label class='btn btn-default'><input type='radio' />不佳</label>
                        </div>
                    </div>
                    <div class='form-group'>
                        <label for='lunch'>用餐情形</label>
                        <div class='btn-group' id='lunch' data-toggle='buttons'>
                            <label class='btn btn-default'><input type='radio' />食慾佳</label>
                            <label class='btn btn-default'><input type='radio' />食量正常</label>
                            <label class='btn btn-default'><input type='radio' />食慾不佳</label>
                        </div>
                    </div> 
                    <div class='form-group'>
                        <label for='sleep'>午睡情況</label>
                        <div class='btn-group' id='sleep' data-toggle='buttons'>
                            <label class='btn btn-default'><input type='radio' />良好</label>
                            <label class='btn btn-default'><input type='radio' />晚睡</label>
                            <label class='btn btn-default'><input type='radio' />不睡</label>
                        </div>
                    </div>  
                    <div class='form-group'>
                        <label for='eat-medicine'>餵藥紀錄</label>
                        <div class='btn-group'  id='eat-medicine' data-toggle='buttons'>
                            <label class='btn btn-default active'><input type='radio' value='0' />無</label>
                            <label class='btn btn-default'><input type='radio' value='1' />有</label>
                        </div>
                        <div class='hide' id='take-time'>
                            <input type='text' class='form-control' placeholder='第一次餵藥時間' />
                            <input type='text' class='form-control' placeholder='第二次餵藥時間' />
                            <input type='text' class='form-control' placeholder='第三次餵藥時間' />
                        </div>
                    </div> 
                    <div class='form-group'>
                        <label for='health'>身體狀況</label>
                        <div class='btn-group' id='health' data-toggle='buttons'>
                            <label class='btn btn-default active'><input type='radio' value='0' />正常</label>
                            <label class='btn btn-default'><input type='radio' value='1' />異常</label>
                        </div><br />
                        <div class='btn-group hide' id='symptom' data-toggle='buttons'>
                            <label class='btn btn-default'><input type='radio' value='cough' />咳嗽</label>
                            <label class='btn btn-default'><input type='radio' value='runny-nose' />流鼻涕</label>
                            <label class='btn btn-default'><input type='radio' value='sneeze' />打噴嚏</label>
                            <label class='btn btn-default'><input type='radio' value='fever' />發燒</label>
                            <label class='btn btn-default'><input type='radio' value='other' />其他</label>
                        </div>
                        <div class='hide' id='cause'>
                            <input type='text' class='form-control' placeholder='原因' />
                        </div>
                    </div><br />
                    <div class="form-group">
                        <label for='teacher-say'>老師說</label>
                        <textarea class="form-control" rows="7" id="teacher-say" placeholder="訊息內容..."></textarea>
                    </div>
                </form>
            </div>

            <div class='modal-footer'>
                <button type='button' class='btn btn-default' data-dismiss='modal'>取消</button>
                <button type='button' class='btn btn-primary' data-dismiss='modal'>確定</button>
            </div>

        </div>
    </div>
</div>

6 个答案:

答案 0 :(得分:10)

在模态中使用Bootstrap Tabs时,我遇到了类似的情况...标签窗格高度不同。这将导致.modal-backdrop不适应新加载的选项卡的高度。我这样修好了......

$('a.class').on("click", function(e){
    e.preventDefault();
    setTimeout( function () {
        $('.modal').data('bs.modal').handleUpdate();
    } , 80 );
});

我使用了setTimeout,因为在调整.modal-back-drop高度之前我必须等待加载标签内容。我使用的标签不是引导标签,因此我无法使用shown.bs.tab事件类型。

您可以轻松地将其改编为......

$('input[type="radio"]').change( function(e) {
    e.preventDefault();
    setTimeout( function () {
        $('.modal').data('bs.modal').handleUpdate();
    } , 80 );
});

这应该足以让你看到: - )

答案 1 :(得分:2)

$('.modal-body').change(function(){
    setInterval(function(){ 
        $('.modal').modal('handleUpdate'); 
    }, 100);
});

答案 2 :(得分:2)

此问题是bootstrap中的一个错误,自版本3.3.5起已经解决。只需升级你的Bootstrap css和js文件,它就能正常工作。

答案 3 :(得分:0)

肮脏的黑客:

setInterval(function(){

  if(!$("body").hasClass("modal-open")) return;

  var modalDialog = $(".modal.in > .modal-dialog");
  var backdrop = $(".modal.in > .modal-backdrop");
  var backdropHeight = backdrop.height();
  var modalDialogHeight = modalDialog.height();

  if(modalDialogHeight > backdropHeight) backdrop.height(modalDialogHeight+100);

}, 500)

答案 4 :(得分:0)

简单的代码是,<div style="clear:both"></div>

之前添加</form>

答案 5 :(得分:-1)

在表单上方使用<div class="clearfix"></div>

如,

<!-- modal -->
<div class='modal fade' id='contact-modal' tabindex='-1' role='dialog' aria-labelledby='modal-label' aria-hidden='true' data-backdrop='static' data-keyboard='false'>
    <div class='modal-dialog'>
        <div class='modal-content'>

            <div class='modal-header'>
                <button type='button' class='close' data-dismiss='modal'>
                    <span aria-hidden='true'>&times;</span><span class='sr-only'>Close</span>
                </button>
                <h4 class='modal-title' id='modal-label'>今日聯絡事項</h4>
            </div>

            <div class='modal-body'>
                <form role='form'>
                    <div class='form-group'>
                        <label for='learning'>學習情況</label>
                        <div class='btn-group' id='learning' data-toggle='buttons'>
                            <label class='btn btn-default'><input type='radio' />良好</label>
                            <label class='btn btn-default'><input type='radio' />尚可</label>
                            <label class='btn btn-default'><input type='radio' />不佳</label>
                        </div>
                    </div>
                    <div class='form-group'>
                        <label for='lunch'>用餐情形</label>
                        <div class='btn-group' id='lunch' data-toggle='buttons'>
                            <label class='btn btn-default'><input type='radio' />食慾佳</label>
                            <label class='btn btn-default'><input type='radio' />食量正常</label>
                            <label class='btn btn-default'><input type='radio' />食慾不佳</label>
                        </div>
                    </div> 
                    <div class='form-group'>
                        <label for='sleep'>午睡情況</label>
                        <div class='btn-group' id='sleep' data-toggle='buttons'>
                            <label class='btn btn-default'><input type='radio' />良好</label>
                            <label class='btn btn-default'><input type='radio' />晚睡</label>
                            <label class='btn btn-default'><input type='radio' />不睡</label>
                        </div>
                    </div>  
                    <div class='form-group'>
                        <label for='eat-medicine'>餵藥紀錄</label>
                        <div class='btn-group'  id='eat-medicine' data-toggle='buttons'>
                            <label class='btn btn-default active'><input type='radio' value='0' />無</label>
                            <label class='btn btn-default'><input type='radio' value='1' />有</label>
                        </div>
                        <div class='hide' id='take-time'>
                            <input type='text' class='form-control' placeholder='第一次餵藥時間' />
                            <input type='text' class='form-control' placeholder='第二次餵藥時間' />
                            <input type='text' class='form-control' placeholder='第三次餵藥時間' />
                        </div>
                    </div> 
                    <div class='form-group'>
                        <label for='health'>身體狀況</label>
                        <div class='btn-group' id='health' data-toggle='buttons'>
                            <label class='btn btn-default active'><input type='radio' value='0' />正常</label>
                            <label class='btn btn-default'><input type='radio' value='1' />異常</label>
                        </div><br />
                        <div class='btn-group hide' id='symptom' data-toggle='buttons'>
                            <label class='btn btn-default'><input type='radio' value='cough' />咳嗽</label>
                            <label class='btn btn-default'><input type='radio' value='runny-nose' />流鼻涕</label>
                            <label class='btn btn-default'><input type='radio' value='sneeze' />打噴嚏</label>
                            <label class='btn btn-default'><input type='radio' value='fever' />發燒</label>
                            <label class='btn btn-default'><input type='radio' value='other' />其他</label>
                        </div>
                        <div class='hide' id='cause'>
                            <input type='text' class='form-control' placeholder='原因' />
                        </div>
                    </div><br />
                    <div class="form-group">
                        <label for='teacher-say'>老師說</label>
                        <textarea class="form-control" rows="7" id="teacher-say" placeholder="訊息內容..."></textarea>
                    </div>
<div class="clearfix"></div>
                </form>
            </div>

            <div class='modal-footer'>
                <button type='button' class='btn btn-default' data-dismiss='modal'>取消</button>
                <button type='button' class='btn btn-primary' data-dismiss='modal'>確定</button>
            </div>

        </div>
    </div>
</div>