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;
}
};
答案 0 :(得分:1)
我遇到了同样的问题。虽然它可能不一定对您的情况有所帮助,但我已考虑分为time
和date
,所以至少如果他们碰巧输入{{1}},您将获得{{1}}。