我目前使用的是knockout.js和knockout.validation.js插件,它们在大多数情况下都能很好地工作。我一直在努力的是让验证在输入模糊时第一次触发,然后每次按键触发。我真的觉得下面的代码应该可以解决这个问题。
<input type="text" class="form-control"
data-bind="value: Name,
valueUpdate: Name.isModified() ? 'afterkeydown' : '',
style: { background: Name.isModified() ? 'red' : 'green'}"
/>
由于某些原因,当isModified()更改时,valueUpdate不会更改为afterkeydown,但背景颜色确实会像我预期的那样正确更改。(这行代码只是为了帮助调试)。
我做错了什么,使valueUpdate方法在isModified可观察到的变化时无法正确更新?
编辑:
我想我在问这个问题时可能做得不好。我想知道的是为什么这段代码没有:
<input type="text" class="form-control"
data-bind="value: Name,
valueUpdate: Name.isModified() ? 'afterkeydown' : ''"
/>
如下代码所示:
<!-- ko if: Name.isModified() -->
<input type="text"
class="form-control"
data-bind="value: Name, valueUpdate: 'afterkeydown'" />
<!-- /ko -->
<!-- ko if: !Name.isModified() -->
<input type="text" class="form-control" data-bind="value: Name" />
<!-- /ko -->
在我看来,您不能有条件地绑定到"valueUpdate“属性,我无法在任何淘汰文档中确认这一点。在第一种情况下,当Name.isModified更新时,valueUpdate不会更改为“afterkeydown”。怎么一回事?
发布于 2018-08-07 22:39:24
This是Knockout的value
绑定的定义。在14+行,您将开始看到附加到元素的初始事件处理程序。‘'change’与任何其他定义的处理程序一起附加,如valueUpdate
请求的处理程序。
不幸的是(或者不是)正如您所看到的,它们在输入初始化期间被获取并执行一次,所以当您尝试更改绑定的值时,它没有任何影响,Knockout中的任何东西都不会监视它。
您的第二个示例是当您想要动态更改绑定参数时的方法,但在您的示例中,我认为您的操作不正确。
Knockout-validation验证器附带了一个定义onlyIf
回调的选项,允许您运行/停止验证。您想要做的是在onlyIf
回调中计算一个可观察值,并在所需的情况下将该可观察值设置为true (在输入模糊或任何其他情况下) onlyIf docs
https://stackoverflow.com/questions/51713973
复制相似问题