Javascript JQuery Datepicker没有年份问题,带有minDate和maxDate集
我有一个JQuery日期选择器,允许您选择日期和月份。这一年是隐藏的 除了我将Javascript JQuery Datepicker没有年份问题,带有minDate和maxDate集,javascript,jquery,datepicker,Javascript,Jquery,Datepicker,我有一个JQuery日期选择器,允许您选择日期和月份。这一年是隐藏的 除了我将minDate和maxDate添加到日期选择器设置时,所有操作都正常 我之所以设置这个,是因为它们不能改变年份,我也希望它允许闰年。所以我将最小和最大日期设置为2012年(最后一个闰年),这样他们可以选择2月29日 当我在日期文本框中单击时,它会选择12月31日,即使4月23日是设定的日期。当我删除minDate和maxDate时,当我选择日期文本框时,它会选择4月23日 (使用minDate和maxDate) (无
minDate
和maxDate
添加到日期选择器设置时,所有操作都正常
我之所以设置这个,是因为它们不能改变年份,我也希望它允许闰年。所以我将最小和最大日期设置为2012年(最后一个闰年),这样他们可以选择2月29日
当我在日期文本框中单击时,它会选择12月31日,即使4月23日是设定的日期。当我删除minDate
和maxDate
时,当我选择日期文本框时,它会选择4月23日
- (使用
和minDate
)maxDate
- (无
和minDate
)maxDate
$('#date').datepicker({
altField: '#date_alt',
altFormat: 'mm-dd',
changeMonth: true,
changeYear: false,
dateFormat: 'MM d',
showAnim: 'slideDown',
yearRange: '-100:+0',
minDate: new Date(2012, 1-1, 1),
maxDate: new Date(2012, 12-1, 31),
beforeShow: function(el, obj) {
obj.dpDiv.addClass('datepicker_hideyear');
},
onClose: function(el, obj){
setTimeout(function() { obj.dpDiv.removeClass('datepicker_hideyear'); }, 1000);
}
});
更新: 将
defaultDate
设置为2012年的日期会起作用,但不会设置日期选择器的值。它仅加载2012年4月23日和默认日期
defaultDate: new Date('04/23/2012'),
我必须使用setDate
来“选择”2012年4月23日,并将is设置为值,但结果完全相同
$('#date').datepicker('setDate', new Date('04/23/2012'));
.不能使用datepicker方法的defaultDate属性而不是在输入上使用值吗
$('#date').datepicker({
defaultDate: new Date('04/23/2012');
altField: '#date_alt',
altFormat: 'mm-dd',
changeMonth: true,
changeYear: false,
dateFormat: 'MM d',
showAnim: 'slideDown',
yearRange: '-100:+0',
minDate: new Date(2012, 1-1, 1),
maxDate: new Date(2012, 12-1, 31),
beforeShow: function(el, obj) {
obj.dpDiv.addClass('datepicker_hideyear');
},
onClose: function(el, obj){
setTimeout(function() { obj.dpDiv.removeClass('datepicker_hideyear'); }, 1000);
}
});
问题是在向输入中添加值时没有指定年份。在beforeShow中添加警报将显示您实际收到2014(
警报($(this).datepicker(“getDate”));
。由于今年不在您的范围内,因此它默认为可能的最大日期
从输入中删除值并添加默认日期将使其正常工作:
<input type="text" name="date" id="date" />
经过进一步挖掘,这似乎是jQueryUI的一个错误。如果在dateformat字符串中未指定年份格式,则无论发生什么情况,它都将默认为当前年份。这就是setdate失败的原因
不过,这里有一个解决方法:
这是我补充的
<div style="position:relative; display: inline-block;">
<input type="text" id="date-placeholder" value="" />
<input type="text" name="date" id="date" value="" style="visibility:hidden; position:absolute; left:0;" />
</div>
这只是在用户单击文本框时手动显示日期选择器。然后,在日期选择器的onclose事件中:
onClose: function (el, obj) {
setTimeout(function () {
obj.dpDiv.removeClass('datepicker_hideyear');
}, 1000);
var val = $("#date").val();
val = val.substr(0, val.length - 4);
$("#date-placeholder").val(val);
}
只需获取日期字段的当前值,删除最后4个字符(年份)并将占位符设置为该值
初始化时还必须更改dateFormat字符串。这样,控件就有一年的时间可以正确设置
dateFormat: 'MM d yy',
代码可以修复,但是看看小提琴,你就会知道它是如何工作的。谢谢你的建议。这很有意义。使用
defaultDate
可以解决问题,但不设置日期选择器的值。我必须使用setDate
来完成这项工作,但结果完全相同。有什么想法吗?下面是一个使用getDate
命令的例子。就像defaultDate
没有更新它一样…@BenSinclair也用一个解决方案更新了答案!谢谢@Joel!感谢你的时间。这确实很笨重,但我想我们现在能做的就是这样。你在做研究的时候有没有看到任何关于这个的错误报告?如果不,我会看看我是否能找到任何,如果没有记录,我可能会提交一份错误报告:)我没有看到任何错误报告,但我也没有看到很多关于使用datepicker没有一年的内容。奇怪的是,当你调用setDate时,getDate实际上返回了正确的年份,只是弹出的日历没有正确注册并自动选择。谢谢你的建议。这是有道理的。使用defaultDate
可以做到这一点,但不会设置日期选择器的值。我必须使用setDate
来执行此操作,但结果完全相同。有什么想法吗?
onClose: function (el, obj) {
setTimeout(function () {
obj.dpDiv.removeClass('datepicker_hideyear');
}, 1000);
var val = $("#date").val();
val = val.substr(0, val.length - 4);
$("#date-placeholder").val(val);
}
dateFormat: 'MM d yy',