Javascript 在“datetime local”元素中输入不完整的日期/时间值时,如何捕获这些值?
Knockout提供了Javascript 在“datetime local”元素中输入不完整的日期/时间值时,如何捕获这些值?,javascript,html,datetime,knockout.js,Javascript,Html,Datetime,Knockout.js,Knockout提供了textInput绑定,用于立即更新可观测值,而不是在元素值更改时(仅在元素模糊时发生)。不幸的是,在Chromium中,当输入类型为datetime local时,这不起作用 我正在尝试编写一个自定义绑定,它模仿textInput行为;我需要能够在用户输入时获得datetime local元素的工作值 铬对这种元素的行为很奇怪。input事件仅在输入完整日期和时间后发生。更重要的是,如果输入在输入完整日期之前失去焦点,该值将保持为空,就好像根本没有输入任何内容一样 另外,
textInput
绑定,用于立即更新可观测值,而不是在元素值更改时(仅在元素模糊时发生)。不幸的是,在Chromium中,当输入类型为datetime local
时,这不起作用
我正在尝试编写一个自定义绑定,它模仿textInput
行为;我需要能够在用户输入时获得datetime local
元素的工作值
铬对这种元素的行为很奇怪。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;
}
};
我遇到了同样的问题。虽然这对你的情况可能没有帮助,但我已经考虑过将日期和时间分开,这样,如果他们碰巧输入日期,至少你会得到日期。KO还提供了值绑定。将其与[type=text]输入一起使用(不使用
valueUpdate
)将在模糊事件上更新绑定的观察值。值
绑定不起作用。我想立即更新观测值,而不仅仅是在模糊之后。我还想将它用于[type=datetime local]
。这是一个很好的解决方法建议。不幸的是,在我正在进行的特定项目中,它对我来说太昂贵了。