如何在“datetime-local”元素中输入不完整的日期/时间值?

时间:2016-07-13 17:51:49

标签: javascript html datetime knockout.js

Knockout提供textInput绑定用于立即更新observable,而不是在元素值更改时(仅在元素模糊时才会发生)。不幸的是,当Chromium中的输入类型为datetime-local时,这不起作用。

我试图编写一个模仿textInput行为的自定义绑定;我需要能够在用户输入时获得datetime-local元素的工作值。

Chromium对这种元素的行为是奇怪的。 input事件仅在输入完整日期时间后发生。更重要的是,如果输入在输入完整日期之前失去焦点,则该值保持为空,就好像根本没有输入任何内容一样。

另外,在我的情况下,使用完整有效的值初始化元素不是一个选项,因为我需要区分实际从空白值输入的日期/时间值。

供参考,以下是我正在处理的代码:

ko.bindingHandlers.date = {
    init: (element, valueAccessor) => {
        ko.utils.registerEventHandler(element, "input", () => {
            var value = valueAccessor();
            if (!!element.value) {
                value(new Date(element.value).toISOString());
            } else {
                value("");
            }
         });
    },
    update: (element, valueAccessor) => {
        var value: any = ko.utils.unwrapObservable(valueAccessor());
        var output: any = "";
        if (!!value) {
            output = value.toISOString();
        }
        element.value = output;
    }
};

1 个答案:

答案 0 :(得分:1)

我遇到了同样的问题。虽然它可能不一定对您的情况有所帮助,但我已考虑分为timedate,所以至少如果他们碰巧输入{{1}},您将获得{{1}}。