【发布时间】:2014-11-04 10:16:06
【问题描述】:
检查这个小提琴:
我试图做两件事:
首先:当字段为空时不验证。我知道有一个 onlyif 选项.. 但是有什么更简单的吗?
第二:当我点击提交时,我需要一些东西来运行验证(如果你测试我的小提琴,错误消息会弹出,但不会应用 errorClass css)
谢谢:D
css:
input.error {
color: red;
border-color: red;
}
js:
ko.validation.configure({
insertMessages: false,
decorateElement: true,
errorElementClass: 'error',
messagesOnModified: false
});
function SignInViewModel() {
var self = this;
self.userName = ko.observable().extend({
required: true
});
self.password = ko.observable().extend({
required: true
});
self.errors = ko.validation.group(self);
self.login = function (e) {
if (self.errors().length == 0) {
alert('No errors');
} else {
this.errors().forEach(function(data) {
alert(data);
});
//self.errors.showAllMessages(true);
}
}
}
$(function () {
ko.applyBindings(new SignInViewModel());
});
html:
<form>
<fieldset>
<legend>User: <span data-bind='text: errors().length'></span> errors</legend>
<label>User name: <input data-bind='value: userName' type="text"/></label><br/>
<label>Password: <input data-bind='value: password' type="password"/></label>
</fieldset>
<button type="button" data-bind='click: login'>Login</button>
</form>
【问题讨论】:
-
你的第一个问题真的没有意义。您希望这些字段是必需的,但仅验证它们是否为空。这违背了
required检查的目的;只有当字段为空时它才会失败。所以请再澄清一点:) 第二个问题可以通过在您的字段组上使用ko.validatedObservable并在提交之前调用isValid()来解决。这将检查表单是否填写正确,还会显示现有错误并添加错误类等。见github.com/Knockout-Contrib/Knockout-Validation#getting-started -
感谢您的回答,我的第一个问题是关于如何仅在检查 isValid() 时应用 css?因为我可以将设置为 false 的消息处理为 insertMessages(失去焦点的元素不会显示验证)。你有什么主意吗? :D
-
啊,现在我明白了。但不幸的是,我不知道你是如何做到这一点的。
标签: knockout.js knockout-validation