jquery datepicker在用户更改月份时更改年份

时间:2013-11-04 14:38:12

标签: c# jquery datepicker

我正在使用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'],
        });
    }
}

}

1 个答案:

答案 0 :(得分:1)

我做了很多假设,因为你确实提供了关于html的任何清晰度。要获得更好的答案,请发布html。

我认为你想要完成的事情: 当您专注于具有datepicker属性的输入元素时,您正在尝试激活日期选择器。如果它是只读元素,则不希望显示日期选择器。

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

修复:

  $("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在评论中所说,只需设置一次datepicker。

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

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