5

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

}

4

1 回答 1

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/

于 2013-11-07T00:41:24.787 回答