我有一个Jquery datepicker,可让您选择日期和月份。年份是隐藏的。
除添加minDate
和添加maxDate
到datepicker设置外,其他所有功能均正常运行。
我设置这个的原因是他们不能更改年份,我也希望它允许leap年。因此,我将最小日期和最大日期设置为2012年(最后一个leap年),以便他们可以选择2月29日。
当我单击日期文本框时,即使设置的日期为4月23日,它也会显示为12月31日。删除日期文本框后minDate
,将maxDate
其删除并选择4月23日。
这是一个错误还是有什么我可以纠正的方法?
我的代码:
$('#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日并将其设置为值,但最终得到的结果完全相同。
$('#date').datepicker('setDate', new Date('04/23/2012'));
问题是,当您将值添加到输入中时,您没有指定年份。在beforeShow中添加警报将显示您实际上正在2014年(alert($(this).datepicker("getDate"));
。由于今年不在您的范围内,因此它默认为可能的最大日期。
从输入中删除值并添加默认日期将使其正常工作:
<input type="text" name="date" id="date" />
并在您的datepicker初始化中添加:
defaultDate: new Date(2012, 4-1, 23),
经过更多的挖掘之后,看来这是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>
这基本上是创建一个占位符,用于向用户显示信息。“ #date”输入设置为“可见性”:隐藏并绝对位于占位符上方(以使datepicker弹出在应有的位置)。我没有设置display:none,因为日期选择器将无法工作,但是jquery仍然认为能见度:隐藏为可见,因此它仍然可以工作。
然后在javascript中,我设置了一个新事件:
$("#date-placeholder").click(function () {
$("#date").datepicker("show");
});
当用户单击文本框时,这只是手动显示日期选择器。然后,在日期选择器的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',
该代码可以修复,但是看看小提琴,您将看到它是如何工作的。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句