Jquery datepicker 显示在测试字段下。有时它会出现在文本字段的顶部。但我想始终在测试字段的顶部显示日期选择器。怎么做?
问问题
36621 次
7 回答
9
以下代码将始终将日历定位在输入字段的顶部。
$('.txtDate').datepicker({
beforeShow: function (textbox, instance) {
var txtBoxOffset = $(this).offset();
var top = txtBoxOffset.top;
var left = txtBoxOffset.left;
var textBoxWidth = $(this).outerWidth();
console.log('top: ' + top + 'left: ' + left);
setTimeout(function () {
instance.dpDiv.css({
top: top-190, //you can adjust this value accordingly
left: left + textBoxWidth//show at the end of textBox
});
}, 0);
}});
于 2015-11-13T11:43:27.357 回答
1
使用风险自负...
.ui-datepicker {
position: relative !important;
top: -290px !important;
left: 0 !important;
}
您可能需要更新 top px,因为它取决于您的基本字体大小。
于 2013-03-27T12:10:15.063 回答
1
$('#txtDate').datepicker({
beforeShow: function (textbox, instance) {
instance.dpDiv.css({
marginTop: (-textbox.offsetHeight) + 'px',
marginLeft: textbox.offsetWidth + 'px'
});
}
});
如果您在一页中有两个或多个日期选择器,则此代码会更改所有日期选择器的位置。如果您需要单独更改每个,则应使用此代码...
beforeShow: function (input, inst) {
setTimeout(function () {
inst.dpDiv.css({
top: 100,
left: 200
});
}, 0);
}
于 2014-02-05T07:37:35.743 回答
0
我尝试使用这个 hack 来解决这个问题,基于原始 jQuery UI 的“_checkOffset”函数:
function datepickerInitDirectionReverse() {
// Store original method to be able to call it inside our overriding method.
$.datepicker._checkOffset_original = $.datepicker._checkOffset;
$.datepicker._checkOffset = function(inst, offset, isFixed) {
var dpHeight = inst.dpDiv.outerHeight(),
inputHeight = inst.input ? inst.input.outerHeight() : 0,
viewTop = isFixed ? 0 : $(document).scrollTop();
offset = $.datepicker._checkOffset_original(inst, offset, isFixed);
// Try to reposition the datepicker on top of it,
// only if the option flag is set by the user
// and only if this has not already happened.
offset.top -= Math.min(
offset.top,
(
this._get(inst, "directionReverse")
&&
(offset.top > inst.input.offset().top)
&&
(offset.top - viewTop > dpHeight)
) ? Math.abs(dpHeight + inputHeight) : 0
);
return offset;
}
}
现在,您可以在每个元素基础上按如下方式配置您的定位偏好:
// Prefer datepicker to appear on top of input element (if room).
$(element).datepicker({
directionReverse: true
});
// Prefer datepicker to appear on bottom of input element (if room).
// This is the unchanged default behaviour.
$(element).datepicker({
directionReverse: false
});
请注意,如果开发人员决定更改界面,上述内容可能会在未来版本的 jQuery UI 中中断。另外请告诉我是否会有任何副作用。
于 2014-09-15T08:58:04.947 回答
0
$('#StartDateIssued,#EndDateIssued,#StartDateFulFill,#EndDateFulFill').datepicker({
beforeShow: function (input, inst) {
var offset = $(input).offset();
var height = $(input).height();
window.setTimeout(function () {
inst.dpDiv.css({ top: (offset.top + height - 20) + 'px', marginLeft: ( input.offsetWidth) + 'px' })
})},
changeMonth: true, changeYear: true, constrainInput: true,
dateFormat: "dd-mm-yy", onSelect: function (dateText, inst) {
$('#StartDateIssued').valid();
$('#StartDateIssued').val(dateText);
}
});
于 2013-08-02T05:24:58.480 回答
0
You can try this :
$('#txtDate').datepicker({
beforeShow: function (textbox, instance) {
instance.dpDiv.css({
marginTop: (-textbox.offsetHeight) + 'px',
marginLeft: textbox.offsetWidth + 'px'
});
}
});
于 2013-03-27T11:51:11.683 回答
-3
jquery datepicker 的设计就像它不需要任何更改...只能通过更改 datepicker 的 css 来向左或向右移动...检查您的 html 版本,因为 datepicker 不支持 html 版本 5..支持 html 版本 4
于 2014-02-04T12:18:07.047 回答