淘汰显示错误的验证消息?

时间:2013-02-21 04:42:05

标签: javascript jquery validation knockout.js

我正在使用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),而不是当我在字段中输入第二个字符时,它显示我消息(Must be 6 chars long)。这种行为适用于我应用验证的所有字段。有人可以告诉我问题在哪里吗?

1 个答案:

答案 0 :(得分:1)

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

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

From documentation for value binding

  

如果你的绑定还包含一个名为valueUpdate的参数,那么这个   定义KO应该用来检测更改的其他浏览器事件   除了改变事件。以下字符串值最多   通常有用的选择:

     
      
  • “keyup” - 在用户释放密钥时更新您的视图模型
  •   
  • “keypress” - 在用户键入密钥时更新您的视图模型。与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(not validatedObservable;注意:单击“使用js运行”按钮)