Bootstrap 日期选择器出现在模式中的错误位置
Bootstrap Datepicker appearing at incorrect location in a modal
我在页面上有一个按钮调用具有日期选择器的模式。
如果此按钮位于顶部(我不必滚动页面即可单击),模式将打开并且日期选择器会正确显示。
但是如果这个按钮在页面的下方(这样我必须滚动页面才能点击),模式打开并且日期选择器显示不正确。
(不确定滚动是否有关系)
这是jsfiddle
这里是图像显示问题,日期选择器应该作为工具提示显示在上方,但它出现了:
代码如下:
<button type="button" class="btn btn-danger" data-toggle="modal" data-target="#callModal">Contact</button>
<div class="modal fade" id="callModal">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">×</span><span class="sr-only">Close</span></button>
<h4 class="modal-title">Modal title</h4>
</div>
<div class="modal-body">
<form role="form">
<div class="form-group">
<label for="name">Name</label>
<input type="text" class="form-control" id="name" placeholder="Enter name">
</div>
<div class="form-group">
<label for="contact">Contact</label>
<input type="text" class="form-control" id="contact" placeholder="Your mobile number">
</div>
<div class="row">
<div class='col-sm-6'>
<div class="form-group">
<label for="cal">Date & Time</label>
<div class='input-group date' id='datetimepicker1'>
<input type='text' class="form-control" id="cal"/>
<span class="input-group-addon"><span class="glyphicon glyphicon-calendar"></span>
</span>
</div>
</div>
<script type="text/javascript">
$(function () {
$('#datetimepicker1').datetimepicker();
});
</script>
</div>
</div>
</form>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
<button type="button" class="btn btn-danger">Contact </button>
</div>
</div><!-- /.modal-content -->
</div><!-- /.modal-dialog -->
</div><!-- /.modal -->
编辑
在单击按钮 "Contact" 以显示包含日期时间选择器的模式之前,我滚动页面的量移动了日期时间选择器工具提示。
我刚刚 运行 遇到了同样的问题。我能够通过向 div 添加容器属性来解决它。
$('#myDatePicker').datepicker({
container:'#myModalId'
});
或者如果您像我一样使用 "lazy load" 方法:
<input id='myDatePicker' data-provide='datepicker' data-date-container='#myModalId'>
参考:http://bootstrap-datepicker.readthedocs.org/en/latest/options.html
希望对其他人有所帮助!
对我来说,这个问题和相关问题原来是因为我打开了代码检查器 window。普通用户不应该打开它,所以如果你是这种情况,那不是问题。
如果输入的容器没有相对定位,日期时间选择器将显示在错误的位置。
解决方法是:
<div style="position:relative">
<div class='input-group date' id='datetimepicker1'>
</div>
在我的例子中,日期选择器的位置比它应该的高 60px,因为它的 div
parents 之一有:
margin-top: 60px;
而不是
padding-top: 60px;
对我来说,下面的解决方案有效
var datepicker = sandbox.dom('body').find('.bootstrap-datetimepicker-widget:last'),
position = datepicker.offset();
// Move datepicker to the exact same place it was but attached to the body
datepicker.appendTo('body');
datepicker.css({
position: 'absolute',
top: position.top,
bottom: 'auto',
left: position.left,
right: 'auto'
});
我在 Bootstrap 4.1.1 中使用它时遇到了同样的问题。日期选择器弹出窗口出现在输入元素的顶部。
我用这个CSS修复了它:
/* fix bootstrap-datepicker positional bug */
.datepicker {
transform: translate(0, 3.1em);
}
这个解决方案非常适合我在 bootstrap 模态上呈现日期选择器。
http://jsfiddle.net/cmpgtuwy/654/
HTML
<br/>
<div class="wrapper">
Some content goes here<br />
Some more content.
<div class="row">
<div class="col-xs-4">
<!-- padding for jsfiddle -->
<div class="input-group date" id="dtp">
<input type="text" class="form-control" />
<span class="input-group-addon">
<span class="glyphicon-calendar glyphicon"></span>
</span>
</div>
</div>
</div>
</div>
Javascript
$('#dtp').datetimepicker({
format: 'MMM D, YYYY',
widgetParent: 'body'});
$('#dtp').on('dp.show', function() {
var datepicker = $('body').find('.bootstrap-datetimepicker-widget:last');
if (datepicker.hasClass('bottom')) {
var top = $(this).offset().top + $(this).outerHeight();
var left = $(this).offset().left;
datepicker.css({
'top': top + 'px',
'bottom': 'auto',
'left': left + 'px'
});
}
else if (datepicker.hasClass('top')) {
var top = $(this).offset().top - datepicker.outerHeight();
var left = $(this).offset().left;
datepicker.css({
'top': top + 'px',
'bottom': 'auto',
'left': left + 'px'
});
}
});
CSS
.wrapper {
height: 100px;
overflow: auto;}
body {
position: relative;
}
试试这个,也许不是最优雅的解决方案,但对我来说很有效
//fixing scroll issue on datepicker
$(".ui-datepicker-trigger").on("click", function() {
$("#ui-datepicker-div").css({top: xxx});
});
试试这个:
$(".yourInputField").on("click", function() {
var offsetModal = $('#yourModalID').offset().top;
var offsetInput = $(this).offset().top;
var inputHeight = $(this).height();
var customPadding = 17; //custom modal padding (bootstrap modal)!
var topDatepicker = (offsetInput + inputHeight + customPadding) - offsetModal;
$("#ui-datepicker-div").css({top: topDatepicker});
});
我在页面上有一个按钮调用具有日期选择器的模式。
如果此按钮位于顶部(我不必滚动页面即可单击),模式将打开并且日期选择器会正确显示。
但是如果这个按钮在页面的下方(这样我必须滚动页面才能点击),模式打开并且日期选择器显示不正确。 (不确定滚动是否有关系)
这是jsfiddle
这里是图像显示问题,日期选择器应该作为工具提示显示在上方,但它出现了:
代码如下:
<button type="button" class="btn btn-danger" data-toggle="modal" data-target="#callModal">Contact</button>
<div class="modal fade" id="callModal">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">×</span><span class="sr-only">Close</span></button>
<h4 class="modal-title">Modal title</h4>
</div>
<div class="modal-body">
<form role="form">
<div class="form-group">
<label for="name">Name</label>
<input type="text" class="form-control" id="name" placeholder="Enter name">
</div>
<div class="form-group">
<label for="contact">Contact</label>
<input type="text" class="form-control" id="contact" placeholder="Your mobile number">
</div>
<div class="row">
<div class='col-sm-6'>
<div class="form-group">
<label for="cal">Date & Time</label>
<div class='input-group date' id='datetimepicker1'>
<input type='text' class="form-control" id="cal"/>
<span class="input-group-addon"><span class="glyphicon glyphicon-calendar"></span>
</span>
</div>
</div>
<script type="text/javascript">
$(function () {
$('#datetimepicker1').datetimepicker();
});
</script>
</div>
</div>
</form>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
<button type="button" class="btn btn-danger">Contact </button>
</div>
</div><!-- /.modal-content -->
</div><!-- /.modal-dialog -->
</div><!-- /.modal -->
编辑 在单击按钮 "Contact" 以显示包含日期时间选择器的模式之前,我滚动页面的量移动了日期时间选择器工具提示。
我刚刚 运行 遇到了同样的问题。我能够通过向 div 添加容器属性来解决它。
$('#myDatePicker').datepicker({
container:'#myModalId'
});
或者如果您像我一样使用 "lazy load" 方法:
<input id='myDatePicker' data-provide='datepicker' data-date-container='#myModalId'>
参考:http://bootstrap-datepicker.readthedocs.org/en/latest/options.html
希望对其他人有所帮助!
对我来说,这个问题和相关问题原来是因为我打开了代码检查器 window。普通用户不应该打开它,所以如果你是这种情况,那不是问题。
如果输入的容器没有相对定位,日期时间选择器将显示在错误的位置。
解决方法是:
<div style="position:relative">
<div class='input-group date' id='datetimepicker1'>
</div>
在我的例子中,日期选择器的位置比它应该的高 60px,因为它的 div
parents 之一有:
margin-top: 60px;
而不是
padding-top: 60px;
对我来说,下面的解决方案有效
var datepicker = sandbox.dom('body').find('.bootstrap-datetimepicker-widget:last'),
position = datepicker.offset();
// Move datepicker to the exact same place it was but attached to the body
datepicker.appendTo('body');
datepicker.css({
position: 'absolute',
top: position.top,
bottom: 'auto',
left: position.left,
right: 'auto'
});
我在 Bootstrap 4.1.1 中使用它时遇到了同样的问题。日期选择器弹出窗口出现在输入元素的顶部。
我用这个CSS修复了它:
/* fix bootstrap-datepicker positional bug */
.datepicker {
transform: translate(0, 3.1em);
}
这个解决方案非常适合我在 bootstrap 模态上呈现日期选择器。
http://jsfiddle.net/cmpgtuwy/654/
HTML
<br/>
<div class="wrapper">
Some content goes here<br />
Some more content.
<div class="row">
<div class="col-xs-4">
<!-- padding for jsfiddle -->
<div class="input-group date" id="dtp">
<input type="text" class="form-control" />
<span class="input-group-addon">
<span class="glyphicon-calendar glyphicon"></span>
</span>
</div>
</div>
</div>
</div>
Javascript
$('#dtp').datetimepicker({
format: 'MMM D, YYYY',
widgetParent: 'body'});
$('#dtp').on('dp.show', function() {
var datepicker = $('body').find('.bootstrap-datetimepicker-widget:last');
if (datepicker.hasClass('bottom')) {
var top = $(this).offset().top + $(this).outerHeight();
var left = $(this).offset().left;
datepicker.css({
'top': top + 'px',
'bottom': 'auto',
'left': left + 'px'
});
}
else if (datepicker.hasClass('top')) {
var top = $(this).offset().top - datepicker.outerHeight();
var left = $(this).offset().left;
datepicker.css({
'top': top + 'px',
'bottom': 'auto',
'left': left + 'px'
});
}
});
CSS
.wrapper {
height: 100px;
overflow: auto;}
body {
position: relative;
}
试试这个,也许不是最优雅的解决方案,但对我来说很有效
//fixing scroll issue on datepicker
$(".ui-datepicker-trigger").on("click", function() {
$("#ui-datepicker-div").css({top: xxx});
});
试试这个:
$(".yourInputField").on("click", function() {
var offsetModal = $('#yourModalID').offset().top;
var offsetInput = $(this).offset().top;
var inputHeight = $(this).height();
var customPadding = 17; //custom modal padding (bootstrap modal)!
var topDatepicker = (offsetInput + inputHeight + customPadding) - offsetModal;
$("#ui-datepicker-div").css({top: topDatepicker});
});