当用户更改月份时,jquery datepicker 更改年份

Posted

技术标签:

【中文标题】当用户更改月份时,jquery datepicker 更改年份【英文标题】:jquery datepicker changes year when user changes month 【发布时间】:2013-11-15 05:03:56 【问题描述】:

我正在使用 jquery datepicker,但是当用户更改月份时,它会自动将年份更改为设置为最小日期的年份。 我不明白为什么会发生这种情况,而且似乎也是随机发生的。

这是我的功能:

function DatePickerShort() 
$(":input[datepicker]").each(function () 
    ShowPicker($(this));
    $(this).bind('focus', function () 
        ShowPicker($(this));
    );

);

function ShowPicker(obj) 
    if ($(obj).is('[readonly]')) 
        $(obj).datepicker('destroy');
    
    else 
        $(obj).datepicker('destroy');
        var fecha = new Date();

        $(obj).datepicker(
            changeMonth: true,
            changeYear: true,
            minDate: new Date(2000, 08, 01),
            firstDay: 1,
            dayNamesMin: ['Do', 'Lu', 'Ma', 'Mi', 'Ju', 'Vi', 'Sa'],
            dateFormat: 'dd/mm/yy',
            monthNamesShort: ['Ene', 'Feb', 'Mar', 'Abr', 'May', 'Jun', 'Jul', 'Ago', 'Sep', 'Oct', 'Nov', 'Dic'],
        );
    

【问题讨论】:

你不是每次获得焦点时都重新创建日期选择器吗? 你想用你的代码实现什么?例如,您为什么不以 $("input").datepicker(); 之类的常用方式使用 datepicker? 你能创建一个 jsfiddle 吗? 【参考方案1】:

我做了很多假设,因为您确实提供了有关 html 的任何清晰度。如需更好的答案,请同时发布 html。

我认为您正在努力实现的目标: 当您专注于具有 datepicker 属性的输入元素时,您正在尝试激活 datepicker。如果它是只读元素,则不希望显示日期选择器。

你实际上在做什么: 您正在查找所有标有 datepicker 属性的输入元素并创建一个 datepicker。虽然,老实说,如果不查看您的 html,我不确定选择器是如何工作的。然后,每次输入获得焦点时,日期选择器都会被销毁,而您正在创建一个全新的选择器。当用户选择一个日期时,输入失去焦点。当日期选择器放回日期时,它会获得焦点并且新的日期选择器会再次被替换。这可能是间歇性的,具体取决于焦点事件(创建新的日期选择器)是在填充输入框之前还是之后发生的。

修复:

  $("input[datepicker]:not([readonly])").datepicker(
      changeMonth: true,
      changeYear: true,
      minDate: new Date(2000, 08, 01),
      firstDay: 1,
      dayNamesMin: ['Do', 'Lu', 'Ma', 'Mi', 'Ju', 'Vi', 'Sa'],
      dateFormat: 'dd/mm/yy',
      monthNamesShort: ['Ene', 'Feb', 'Mar', 'Abr', 'May', 'Jun', 'Jul', 'Ago', 'Sep', 'Oct', 'Nov', 'Dic']
  );

正如 JazZRo 在他的评论中所说,只需设置一次日期选择器。

我的偏好是使用类标记日期选择器并将其用作选择器。它表现更好,更清晰。如果可以,只需用类标记日期选择器,不要标记只读的。

请记住,如果 readonly 为 false,它仍然不会获取 datepicker,因为选择器只是检查 readonly 属性的存在(与 datepicker 属性相同)。有关示例,请参见此 JSfiddle: http://jsfiddle.net/DanCaveman/RBtY5/4/

【讨论】:

以上是关于当用户更改月份时,jquery datepicker 更改年份的主要内容,如果未能解决你的问题,请参考以下文章

JQuery UI datepicker onChangeMonthYear 获取 td

jquery UI datepicker 月份和年份只有 css 定位问题

jQueryUI 内联 DatePicker 直到我更改月份后才起作用

Jquery Datepicker 返回错误的月份 JSF

WPF DatePicker 更改月份时抛出异常

如果超出范围,防止 jQuery UI datepicker 更改文本字段的值