我正在使用带有淘汰赛的https://eonasdan.github.io/bootstrap-datetimepicker/日期选择器,并使用淘汰赛验证框架的 ISODate 验证。
我对日期选择器的发现是,如果使用键盘输入了无效日期(keepInvalid:true),则选择器会引发 dp.error 事件。如果我然后用键盘更正日期,则选择器不会引发 dp.change 事件。这是选择器的预期和正确行为吗?如果是这样,我是否可以使用一种解决方法来解决我的用户的问题,如下所述?
使用日期选择器时,ISODate 验证将永远不会触发。但我希望选择器不会自动更正用户在文本框中键入的内容。我需要做的是使用无效条目更新底层可观察对象,然后让淘汰验证触发,这将使用错误验证状态更新 UI。
我收到有关自动更正使用键盘输入的无效日期的投诉,因为没有通知表明日期值已被静默更改。
所以我使用带有选项 keepInvalid: true 的选择器。绑定处理程序更新 dp.change 事件中的 observable。我更新了建议的绑定处理程序,也更新了 dp.error 事件中的 observable。
这几乎可以满足我的需要。但是当我执行以下操作时:
- 使用选择器选择今天的日期,导致“2016-04-22”被放入文本框中(并且可观察到)。
- 使用键盘插入无效字符,因此我们在文本框中(并且可观察到)中有“2016-0a4-22”。淘汰赛验证触发,这是所需的行为。
- 现在通过删除无效字符使用键盘更正日期,将文本框放回“2016-04-22”。淘汰赛验证未清除。这是因为在更新文本框以删除不正确的值时不会触发“dp.change”事件。此时文本框有 '2016-04-22' 但底层 observable 仍然有无效的 '2016-0a4-22'
如果我要使用选择器而不是键盘来更正日期,则会触发 dp.change 事件并且验证错误状态消失。但如果我用键盘纠正事情就不会了。