为什么最初不需要 Knockout 验证?
Why Doesn't Knockout Validation Required Work Initially?
查看以下 fiddle 在简单表单上使用 knockoutjs 和 knockout-validation。如果您最初单击 "go",为什么不显示验证消息?
Javascript:
var viewmodel = function() {
var self = this;
self.name = ko.observable(null).extend({
required: true
});
self.validation = ko.validatedObservable({
name: self.name
});
self.go = function() {
console.log(self.name());
self.name.isValid();
};
}
ko.applyBindings(new viewmodel());
HTML:
<input type="text" data-bind="value:name" />
<button type="button" data-bind="click:go">
go
</button>
我认为这里的问题是目前没有任何东西可以触发验证器运行。
默认情况下,KO 验证器插件在更改值时触发。在初始加载时,您输入的值为空,并且定义的点击事件不会更改此值,从而强制触发验证器。
相反,在您的点击事件中,如果某些内容无效,请尝试调用 showAllMessages:
var viewmodel = function() {
var self = this;
self.name = ko.observable(null).extend({
required: true
});
self.validation = ko.validation.group([self.name]);
self.go = function() {
if(self.name.isValid()){
console.log("I'm valid!");
console.log("Name: " + self.name());
}else{
self.validation.showAllMessages();
}
};
}
ko.applyBindings(new viewmodel());
查看以下 fiddle 在简单表单上使用 knockoutjs 和 knockout-validation。如果您最初单击 "go",为什么不显示验证消息?
Javascript:
var viewmodel = function() {
var self = this;
self.name = ko.observable(null).extend({
required: true
});
self.validation = ko.validatedObservable({
name: self.name
});
self.go = function() {
console.log(self.name());
self.name.isValid();
};
}
ko.applyBindings(new viewmodel());
HTML:
<input type="text" data-bind="value:name" />
<button type="button" data-bind="click:go">
go
</button>
我认为这里的问题是目前没有任何东西可以触发验证器运行。
默认情况下,KO 验证器插件在更改值时触发。在初始加载时,您输入的值为空,并且定义的点击事件不会更改此值,从而强制触发验证器。
相反,在您的点击事件中,如果某些内容无效,请尝试调用 showAllMessages:
var viewmodel = function() {
var self = this;
self.name = ko.observable(null).extend({
required: true
});
self.validation = ko.validation.group([self.name]);
self.go = function() {
if(self.name.isValid()){
console.log("I'm valid!");
console.log("Name: " + self.name());
}else{
self.validation.showAllMessages();
}
};
}
ko.applyBindings(new viewmodel());