正在修改Pikaday默认值

时间:2015-10-23 11:09:33

标签: javascript pikaday

我有一个字段来设置日期。该字段可以具有格式为YYYYMMDD的默认值,并且它将被转换为正确的格式DD.MM.YYYY,这对于运营商来说是可以理解的。不要问我为什么,这是一个古老的系统,不,我不能重写它,因为它使用大后端。

我只需要在这些字段中添加简单的datepicker。我选择了Pikaday,它轻巧而简单,足以完成这项特殊任务。我的典型用例如下所示:

<input type="text" id="datepicker" value="20150515" customType="date">
<img src="img/icon.gif" id="datepicker-button" />

<link rel="stylesheet" href="css/pikaday.css">
<link rel="stylesheet" href="css/site.css">
<script src="js/moment.min.js"></script>
<script src="js/pikaday.js"></script>
<script>
    var picker = new Pikaday(
    {
        field: document.getElementById('datepicker'),
        trigger: document.getElementById('datepicker-button'),
        firstDay: 1,
        yearRange: [1900,2020],
        onSelect: function() {
            var date = document.createTextNode(this.getMoment().format('DD.MM.YYYY') + ' ');
            document.getElementById('selected').appendChild(date);
        }
    });
    field.parentNode.insertBefore(picker.el, field.nextSibling);
</script>

原始代码是输入标记。其余的是我的新datepicker功能。

现在,问题是什么。 问题是默认值。假设默认值为20151023. customType属性的正确日期应为23.10.2015,但以下Pikaday代码段的日期为20.03.1023。我不知道为什么。我不太了解javascript,但我想onSelect param只是一种匿名回调函数,只有在用户点击datepicker按钮时才会被调用。

有什么建议吗?

谢谢,JiKra

编辑:

似乎有一个不同的问题。如果有来自后端的任何值,它的值格式就像20151023.并且有一个古老的javascript文件,其中包含一些函数,它会解析值并创建一个正确的格式23.10.2015。问题是我的Pikaday构造函数是在那个古老的解析器之前被调用的。即使我使用jazZRo的有希望的片段在Pikaday调用之前修改值,那个古老的解析器也会因为期望YYYYMMDD格式而吓坏了。 所以,我需要的是在古老的解析器之后调用我的东西,或禁止Pikaday构造函数中的onSelect回调函数在页面加载时不运行。

这可能吗?

1 个答案:

答案 0 :(得分:0)

最简单的解决方案是在Pickaday使用输入之前使用momentjs转换输入值:

(function() {
    var moment = window.moment(document.getElementById('datepicker').value, 'DDMMYYYY');
    document.getElementById('datepicker').value = moment.format('YYYY-MM-DD');
})();

请参阅http://jsfiddle.net/05fyr368/3/