Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript arame或mustMatch示例的Knockoutjs验证_Javascript_Jquery_Knockout.js - Fatal编程技术网

Javascript arame或mustMatch示例的Knockoutjs验证

Javascript arame或mustMatch示例的Knockoutjs验证,javascript,jquery,knockout.js,Javascript,Jquery,Knockout.js,我正在尝试使用GitHub的Knockoutjs验证插件。它的大部分功能似乎都很好,但当我尝试使用扩展的验证mustEqual(password/confirm password)时,它似乎什么都没做。我错过了什么 我非常想学习这种扩展技术,以备将来使用 (如果与此有关,整个html和javascript也会通过AJAX调用加载到页面中。) 我的javascript function UserAccount(data) { var self = this;

我正在尝试使用GitHub的Knockoutjs验证插件。它的大部分功能似乎都很好,但当我尝试使用扩展的验证mustEqual(password/confirm password)时,它似乎什么都没做。我错过了什么

我非常想学习这种扩展技术,以备将来使用

(如果与此有关,整个html和javascript也会通过AJAX调用加载到页面中。)

我的javascript

    function UserAccount(data) {
        var self = this;
        self.Password = ko.observable(data.Password).extend({ required: true, minlength: 6, message: "Password is required", maxLength: 12 });

        self.Firstname = ko.observable(data.Firstname).extend({ required: true, minlength: 6, message: "Firstname is required", maxLength: 40 });
        self.Lastname = ko.observable(data.Lastname).extend({ required: true, minlength: 6, message: "Lastname is required", maxLength: 40 });
        self.Email = ko.observable(data.Email).extend({ required: true, minlength: 6, message: "Email is required", email: true, maxLength: 90 });
        self.ConfirmPassword = ko.observable().extend({ mustEqual: self.Password()});
        ...........................Other Code............
        }

    ko.validation.rules['mustEqual'] = {
        validator: function (val, otherVal) {
            alert("Hello");
            return val === otherVal;
        },
        message: 'The field must equal {0}'
    };
    $(document).ready(function () {


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

    });

您的自定义验证程序代码正常。但是您没有正确调用
ko.validation.registerExtenders()方法

虽然没有明确说明,但您需要调用
ko.validation.registerExtenders()在您正在调用的
ko.applyBindings
之前

因此,要修复代码,只需编写:

$(document).ready(function () {
    ko.validation.registerExtenders();
    ko.applyBindings(new UserAccount(initdata), $("#UserAccount").get(0));
});
但您将面临另一个问题:
mustEqual
验证器用于与静态值进行比较,因此,如果要比较两个属性(如password和confirm password),它将不起作用

您需要的是以下内容:

您可以使用的功能包括:

self.Password = ko.observable(data.Password).extend({
    required: true,
    minlength: 6,
    message: "Password is required",
    maxLength: 12
});
self.ConfirmPassword = ko.observable().extend({
    areSame: self.Password
});

演示。

效果不错。起初我实际上是在使用areSame函数,但无法使其工作。我换成了mustEqual,因为它看起来更简单。如果ko.validation。。。和ko.applyBindings始终位于$(文档)中。准备好了吗?加载DOM后应调用
ko.applyBindings
,因此
$(文档)。准备好了吗。
ko.validation.registerExtenders()。因此,它可以在
ko.validation.rules['AreName']={}
之后直接调用,因此无需在
$(文档).ready
中调用它。如何在页面首次加载时停止启动验证?
self.Password = ko.observable(data.Password).extend({
    required: true,
    minlength: 6,
    message: "Password is required",
    maxLength: 12
});
self.ConfirmPassword = ko.observable().extend({
    areSame: self.Password
});