18

我有很多客户抱怨当他们在 JQuery Datepicker 上更改日期时,它不会更新日期......这是因为他们更改了月份/年份并希望它在不选择日期的情况下更新日期。

所以我想我会帮助他们并使用 onChangeMonthYear() 函数自动更新他们的日期。

我的代码如下。当我更改月份或年份时,它会带我到 2017 年或 1987 年......我不明白出了什么问题。我错过了什么吗?

$('#member_birthday_full').datepicker({ 
    altField: '#member_birthday',
    altFormat: 'yy-mm-dd',
    changeMonth: true,
    changeYear: true,
    dateFormat: 'DD, d MM yy',
    showAnim: 'slideDown',
    yearRange: '-125:+0',
    onChangeMonthYear:function(y, m, i){                                
        var d = i.selectedDay + '';                       
        if (d.length < 2) 
            d = '0' + d;                       
        var m = m + '';                       
        if (m.length < 2) 
            m = '0' + m;   
        $(this).datepicker( "setDate", y + '-' + m + '-' + d ); 
    }
});​

http://jsfiddle.net/3YQZV/

4

1 回答 1

29

最简单的解决方案(参见演示)是使用 Date 对象设置新日期:

onChangeMonthYear:function(y, m, i){                                
    var d = i.selectedDay;
    $(this).datepicker('setDate', new Date(y, m - 1, d));
}

来自精美手册

setDate(date)
[...]
date
类型:字符串日期
新日期。

但是您在altFormat. 然后日期选择器尽最大努力yy-mm-dd使用该DD, d MM yy格式解析日期,而您最终在 1887 年感到茫然和困惑,想知道您的 DeLorean 在哪里。

您还需要决定如果他们试图从 1 月 31 日到 2 月搬家,您将要做什么。您可能想去 2 月 28 日(或闰年的 29 日)。如果你从 1 月 29 日、1 月 30 日、5 月 31 日开始,……然后再往前一个月,就会出现类似的问题;如果您从 6 月 30 日开始并尝试返回一个月,则会出现稍微不同的问题。我将把它作为练习留给读者。

于 2012-05-01T04:29:53.510 回答