2013-02-21 48 views
0

我正在使用knokcout.js和knockout.validation插件。我的代码中存在验证消息。我申请2验证上观察到的领域(比如密码),如:错误的验证消息是通过敲除显示?

在JS代码

.. 
this.Password = ko.observable().extend({ 
     required: { message: "Enter password" }, 
     minLength: { params: 6, message: "Must be 6 chars long" } 
}); 
.. 

在HTML中

<input type="password" data-bind="value: Password, valueUpdate:'afterkeypress" 
    placeholder="Password" /> 

现在我的问题是,当我进入单个字符提交的密码比而不是显示验证消息(Must be 6 chars long)它显示我的消息(Enter password)并比当我输入第二个字符在fie ld比它显示我的消息(Must be 6 chars long)。这种行为是与我应用验证的所有领域。任何人都可以告诉我问题在哪里?

+0

用onBlur事件替换afterkeypress事件检查它。 – akeeseth 2013-02-21 06:01:32

+0

我已经用keypress,keyup和onBlur检查过了,但没有工作 – gaurav 2013-02-21 06:09:24

回答

1

该代码似乎是对'按键'而不是'afterkeypress'作出反应。您在示例html中的'afterkeypress'后缺少单引号。

该文档没有真正列出'afterkeypress'作为updateValue选项,但它在我的测试中确实有效。

From documentation for value binding

如果您还结合包含一个名为valueUpdate参数,这 定义了额外的浏览器事件KO应该用它来检测变化 除了改变事件。以下字符串值是最 很常用的选择:

  • “KEYUP” - 更新您的视图模型当用户释放的关键
  • “按键” - 当用户输入的键更新您的视图模型。与按键不同,当用户按下按键时,此功能会重复更新。
  • “afterkeydown” - 只要用户开始输入字符,就会更新您的视图模型。这通过捕获浏览器的keydown事件 并异步处理事件来工作。

这些选项中,“afterkeydown”是最好的选择,如果你想 保持您的视图模型实时更新。

该文件建议使用'afterkeydown'的选择最好的结果,我发现情况是如此。

我创建了一个使用'keypress','afterkeypress'和'afterkeydown'的示例。

见:http://jsbin.com/anerop/3/edit(validatedObservable;注:点击 “与JS运行” 按钮)

绑定到 'afterkeydown' 似乎提供最佳的用户体验。 'afterkeypress'不会更新,直到控件失去焦点。

采样数据绑定:

<input type="password" data-bind="value: Password, valueUpdate:'afterkeydown'" 
    placeholder="Password" /> 

我创建了没有使用validatedObservable另一个例子,得到了类似的结果。

见:http://jsbin.com/itatic/1/edit(不validatedObservable;注:点击按钮 “与JS运行”)

相关问题