Javascript arame或mustMatch示例的Knockoutjs验证
我正在尝试使用GitHub的Knockoutjs验证插件。它的大部分功能似乎都很好,但当我尝试使用扩展的验证mustEqual(password/confirm password)时,它似乎什么都没做。我错过了什么 我非常想学习这种扩展技术,以备将来使用 (如果与此有关,整个html和javascript也会通过AJAX调用加载到页面中。) 我的javascriptJavascript 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;
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()应该在定义所有自定义验证器后调用code>。因此,它可以在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
});