使用带有敲除和敲除验证框架的日期选择器

时间:2016-04-22 17:27:24

标签: javascript validation date knockout.js eonasdan-datetimepicker

我使用https://eonasdan.github.io/bootstrap-datetimepicker/日期选择器与淘汰赛,并使用淘汰赛验证框架的ISODate验证。

我在日期选择器中发现的是,如果使用键盘输入无效日期(keepInvalid:true),则选择器会引发dp.error事件。如果我然后用键盘更正日期,则选择器不会引发dp.change事件。这是选择器的预期和正确行为吗?如果是这样,是否有解决方法可用于解决用户的问题,如下所述?

使用日期选择器时,ISODate验证永远不会触发。但我希望选择器不会自动更正用户在文本框中键入的内容。我需要做的是使用无效条目更新底层observable,然后让knockout验证触发,这将使用错误验证状态更新UI。

我收到有关使用键盘输入的无效日期自动更正的投诉,因为没有通知已默认更改日期值。

所以我使用选项keepInvalid:true的选择器。绑定处理程序更新dp.change事件中的observable。我已经更新了建议的绑定处理程序,以便更新dp.error事件中的observable。

几乎做我需要的。但是当我做以下事情时:

  1. 选择今天的日期与选择器,导致' 2016-04-22'放在文本框中(和可观察的)。
  2. 使用键盘插入无效字符,以便我们有' 2016-0a4-22'在文本框中(和可观察的)。淘汰赛验证会触发所需的行为。
  3. 现在通过删除无效字符来更正键盘的日期,将文本框放回' 2016-04-22'。淘汰验证未被清除。这是因为' dp.change'更新文本框以删除不正确的值时,不会触发事件。此时,文本框已经显示了2016-04-22'但潜在的观察者仍然有无效的' 2016-0a4-22'
  4. 如果我使用选择器而不是键盘更正日期,则会触发dp.change事件并且验证错误状态消失。但是,如果我使用键盘改正,那就不行了。

0 个答案:

没有答案