Javascript JQuery Datepicker没有年份问题,带有minDate和maxDate集

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) (无

我有一个JQuery日期选择器,允许您选择日期和月份。这一年是隐藏的

除了我将
minDate
maxDate
添加到日期选择器设置时,所有操作都正常

我之所以设置这个,是因为它们不能改变年份,我也希望它允许闰年。所以我将最小和最大日期设置为2012年(最后一个闰年),这样他们可以选择2月29日

当我在日期文本框中单击时,它会选择12月31日,即使4月23日是设定的日期。当我删除
minDate
maxDate
时,当我选择日期文本框时,它会选择4月23日

  • (使用
    minDate
    maxDate
  • (无
    minDate
    maxDate
这是一个bug还是我可以做些什么来纠正它

我的代码:

$('#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',