在applyBindings(init / onload)期间停止Knockoutjs验证

时间:2013-09-23 21:19:02

标签: javascript jquery validation knockout.js

如何在首次加载页面时停止验证?我希望验证在文本框被编辑时触发,或者具有焦点并失去焦点,但不是在页面首次加载时触发。

我的加载代码:

    $(document).ready(function () {

         ko.validation.configure({
             registerExtenders: true,
             messagesOnModified: false,
             decorateElement: true,
             errorClass: 'error',
             insertMessages: true,
             parseInputAttributes: true,
             messageTemplate: 'customMessageTemplate'
         });


        ko.applyBindings(new UserAccount(initdata), $("#UserAccount").get(0));

    });

   function UserAccount(data) {
        var self = this;


        self.UserName = ko.observable(data.UserName).extend({ required: { message: "Username is required" }, minlength: 6, maxLength: 12 });
        self.Password = ko.observable(data.Password).extend({ required:  { message: "Password is required" }, minlength: 6, maxLength: 12 });
        self.Firstname = ko.observable(data.Firstname).extend({ required: { message: "Firstname is required" }, minlength: 6, maxLength: 40 });
        ...... other code .....
     }

我一直在努力研究这个问题,但似乎没有任何问题可行。我认为ko.validation.configuration'messageOnModified:false'中可能存在某些内容(我尝试了,并将其全部删除)。

1 个答案:

答案 0 :(得分:3)

您走在正确的轨道上:您需要设置messagesOnModified: true,否则验证消息也会在加载时显示。

但是它不适合您,因为您需要使用messageTemplate中的validationMessage binding,否则它将无法遵守messagesOnModified设置。

所以你需要改变你的模板:

<script type="text/html" id="customMessageTemplate">
    <span data-bind="validationMessage: field"></span>
</script>

演示JSFiddle