在Bootstrap模式中实现jQuery DatePicker

时间:2014-01-11 07:00:57

标签: jquery twitter-bootstrap twitter-bootstrap-3 jquery-ui-datepicker

为我的问题http://jsfiddle.net/sudiptabanerjee/93eTU/

创建了jsfiddle

在模态窗口中,问题出在Change Month和Change Year组合上。

a)IE 11:一切都按预期工作 b)Chrome版本31,月份组合选择,引导模态隐藏。 c)Firefox v26,月份和年份下拉列表不起作用。

请帮忙。

HTML

<!-- Button trigger modal -->
<button class="btn btn-primary btn-lg" data-toggle="modal" data-target="#myModal">Launch demo modal</button>
<!-- Modal -->
<div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
<div class="modal-dialog">
    <div class="modal-content">
        <div class="modal-header">
            <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
             <h4 class="modal-title" id="myModalLabel">Modal title</h4>

        </div>
        <div class="modal-body">
            <div class="col-md-12">
                <div class="row">
                    <label for="idTourDateDetails">Tour Start Date:</label>
                    <div class="form-group">
                        <div class="input-group">
                            <input type="text" name="idTourDateDetails" id="idTourDateDetails" readonly="readonly" class="form-control clsDatePicker"> <span class="input-group-addon"><i id="calIconTourDateDetails" class="glyphicon glyphicon-th"></i></span>

                        </div>
                    </div>Alt Field:
                    <input type="text" name="idTourDateDetailsHidden" id="idTourDateDetailsHidden">
                </div>
            </div>
            <div class="modal-footer">
                <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
            </div>
        </div>
        <!-- /.modal-content -->
    </div>
    <!-- /.modal-dialog -->
</div>
<!-- /.modal -->

CSS

.clsDatePicker {
z-index: 100000;
}

JS

 $('#idTourDateDetails').datepicker({
 dateFormat: 'dd-mm-yy',
 minDate: '+5d',
 changeMonth: true,
 changeYear: true,
 altField: "#idTourDateDetailsHidden",
 altFormat: "yy-mm-dd"
});

7 个答案:

答案 0 :(得分:48)

这是因为模态强调对自身的关注。如上所述here,这是一个解决方案。将以下脚本添加到js文件中。就是这样。

<强> Working Demo

<强>的jQuery

// Since confModal is essentially a nested modal it's enforceFocus method
// must be no-op'd or the following error results 
// "Uncaught RangeError: Maximum call stack size exceeded"
// But then when the nested modal is hidden we reset modal.enforceFocus
var enforceModalFocusFn = $.fn.modal.Constructor.prototype.enforceFocus;

$.fn.modal.Constructor.prototype.enforceFocus = function() {};

$confModal.on('hidden', function() {
    $.fn.modal.Constructor.prototype.enforceFocus = enforceModalFocusFn;
});

$confModal.modal({ backdrop : false });

对于Bootstrap 4:

replace : $.fn.modal.Constructor.prototype.enforceFocus
By: $.fn.modal.Constructor.prototype._enforceFocus

答案 1 :(得分:3)

jQuery版本的@crftr回答

var enforceModalFocusFn = $.fn.modal.Constructor.prototype.enforceFocus;
$.fn.modal.Constructor.prototype.enforceFocus = function() {};
try{
    $confModal.on('hidden', function() {
        $.fn.modal.Constructor.prototype.enforceFocus = enforceModalFocusFn;
    });
    $confModal.modal({ backdrop : false });
}
catch (error) {
    if(error.name != 'ReferenceError')
        throw error;
}

答案 2 :(得分:1)

更容易...只需将此行注释到你的boostrap.js that.enforceFocus()中。

答案 3 :(得分:0)

根据Surjith的回答,我添加了一个try / catch块来解决confModal未定义的ReferenceError异常。

CoffeeScript的:

enforceModalFocusFn = $.fn.modal.Constructor::enforceFocus

$.fn.modal.Constructor::enforceFocus = ->

try
  $confModal.on "hidden", ->
    $.fn.modal.Constructor::enforceFocus = enforceModalFocusFn
    return
  $confModal.modal backdrop: false
catch error
  if error.name != 'ReferenceError'
    throw error

答案 4 :(得分:0)

将z-index添加到日期选择器类中

答案 5 :(得分:0)

找到了解决此日期选择器问题的简便方法。确保JS在jquery,jqueryUI lib调用下面。

$("body").delegate("#date1", "focusin", function () {
      $(this).datepicker(
        {
          dateFormat: "yy-mm-dd",
          changeMonth: true,
          changeYear: true
        }
      );

});

$( "#date1" ).datepicker();

答案 6 :(得分:0)

此问题的另一种解决方法是删除div.modal元素上的tabindex =“-1”属性。已在引导程序4上进行了测试。