Knockout.js 敲除验证插件-isValid()总是返回true

Knockout.js 敲除验证插件-isValid()总是返回true,knockout.js,knockout-validation,Knockout.js,Knockout Validation,我正在使用敲除验证,当尝试检查isValid属性时,它始终为true。任何建议都会得到很好的响应 我的html标记 <div class="login"> <h1> Customer login</h1> <form action="/Home/login" method="post"> <div class="fontStyle"> <

我正在使用敲除验证,当尝试检查isValid属性时,它始终为true。任何建议都会得到很好的响应

我的html标记

<div class="login">
        <h1>
            Customer login</h1>
        <form action="/Home/login" method="post">
        <div class="fontStyle">
            <fieldset>
                <legend></legend>
                <div>
                    <label for="User-id">
                        User Id</label>
                    <input id="User-id" name="username" data-bind='value:UserName, valueUpdate: "afterkeydown"'  type="text" value=""/>
                    <span data-bind='visible: UserName.hasError, text: UserName.validationMessage'> </span>
                </div>
                <div>
                    <label for="Password">
                        Password</label>
                    <input id="Password" name="password" data-bind='value:Password, valueUpdate: "afterkeydown"'  type="password" value="" />
                    <span data-bind='visible: Password.hasError, text: Password.validationMessage'> </span>
                </div>
                <div>
                    <label>
                        &nbsp;</label>
                    <input type="submit" data-bind='click:submit' class="button" value="Login" />
                </div>
            </fieldset>
        </div>

my javascript code block is 



    var loginModule = (function () {
    $(document).ready(function () {

        var userName = $('input:text[name=username]').val();
        var password = $('input:text[name=password]').val();
        ko.applyBindings(new viewmodel(userName, password));

    });

    ko.validation.registerExtenders();
    var viewmodel = function (username, password) {
        var that = this;
        that.UserName = ko.observable(username).extend({ required: "User Id required", minLength: 5, maxLength: 10 });
        that.Password = ko.observable(password).extend({ required: "Password required" });

        that.valid = ko.validatedObservable(that);
        that.submit = function () {

        //trying to check user name is valid or not
            alert(that.UserName.isValid());

        };
    };

    return {
        viewmodel: viewmodel
    }
})();

客户登录
用户Id
密码
我的javascript代码块是
var loginModule=(函数(){
$(文档).ready(函数(){
var userName=$('input:text[name=userName]')。val();
var password=$('input:text[name=password]')。val();
应用绑定(新视图模型(用户名、密码));
});
ko.validation.registerExtenders();
var viewmodel=函数(用户名、密码){
var=这个;
extend({required:“userid required”,minLength:5,maxLength:10});
that.Password=ko.observable(Password.extend({required:“Password required”});
that.valid=ko.validatedObservable(that);
that.submit=函数(){
//正在尝试检查用户名是否有效
警报(that.UserName.isValid());
};
};
返回{
viewmodel:viewmodel
}
})();

当用户单击submit按钮时,我希望通过检查isValid()方法进行验证。

您需要调用
ko.validation.registerExtenders()进行编码

因此,请在创建
视图模型之前移动此行:

$(document).ready(function () {
    var userName = $('input:text[name=username]').val();
    var password = $('input:text[name=password]').val();
    ko.validation.registerExtenders();
    ko.applyBindings(new viewmodel(userName, password));

});
演示

但是,如果您使用的是最新版本的验证插件,则不需要调用
ko.validation.registerExtenders()更多: