javascript - 使用 jquery ui datepicker 重新聚焦相同的 datepicker 输入时显示错误的月份和年份

标签 javascript jquery jquery-ui datepicker jquery-ui-datepicker

我只想显示月份和年份。如果我在选择日期后重新聚焦相同的输入,它会显示错误的月份和年份,而不会显示之前选择的月份和年份。例如,我选择 2010 年 12 月,然后重新聚焦显示 2015 年 4 月的相同输入,如下图所示。我该怎么办?

enter image description here

HTML

<input type="text" class="dp" readonly="true">

CSS

.ui-datepicker-calendar {
    display: none;
}

JS

$('.dp').datepicker({
    changeMonth: true,
    changeYear: true,
    showButtonPanel: true,
    dateFormat: 'mm.yy',
    onClose: function (dateText, inst) {
        $(this).datepicker('setDate', new Date(inst.selectedYear, inst.selectedMonth, inst.selectedDay));
    }
});

http://jsfiddle.net/46tx62vu/

最佳答案

日期选择器希望能够将显示的日期版本解析为 javascript 日期对象。

执行此操作的一种方法是为您的特殊日期格式添加自定义 parseDate 函数。下面的代码查找“mm.yy”的特殊格式,如果找到,则将值解析为日期。如果格式是其他格式,则将处理传递给原始的 datepicker.parseDate。

var standardParseDate = $.datepicker.parseDate;

function customParseDate( format, value, options ) {
    if (format === 'mm.yy') {
        var dt = (value + ".").split(".");

        var month = parseInt(dt[0]) - 1;
        var year = parseInt(dt[1]);

        if (year < 100) {
            year += 2000;
        }

        if (isNaN(month) || isNaN(year)) {
            return null;
        }

        return new Date(year, month, 1);
    } else {
        return standardParseDate(format,value,options);
    }
}

$.datepicker.parseDate = customParseDate;

JSFiddle:http://jsfiddle.net/3drfd35t/

关于javascript - 使用 jquery ui datepicker 重新聚焦相同的 datepicker 输入时显示错误的月份和年份,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29650802/

相关文章:

javascript - 为什么放置一个空的 src 属性比不放置任何属性更快?

jquery-ui - 检测 Facebox 何时关闭

javascript - 事件菜单样式的动态主体类

javascript - 如何将内置函数作为对象属性返回?

javascript - 您将如何在同一行中将 Math.abs 和 toLocaleString() 链接在一起?

javascript - 带 class 的 div 的 jquery 选择器

javascript - jsPDF 将 html 转换为 pdf

javascript - 如何在 Vue 3 中访问 $children 以创建 Tabs 组件?

javascript - 无法使标题可编辑

jQuery - UI slider 鼠标禁用和重新启用鼠标