我正在使用敲除验证,这是我的模型的样子
function SignInViewModel() {
var self = this;
self.userName = ko.observable('').extend({
required: true,
pattern: {
message: 'Username must be a valid email address',
params: /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/
}
});
self.password = ko.observable('').extend({
required: true
});
self.errors = ko.validation.group(self);
self.login = function (e) {
if (self.errors().length == 0) {
$.post("/account/jsonlogin", { userName: self.userName(), password: self.password(), returnUrl: "/" })
.done(function (result) {
redirect(result.redirect);
}).error(function () {
});
} else {
self.errors.showAllMessages();
}
}
}
ko.validation.configure({
insertMessages: true,
decorateElement: true,
errorElementClass: 'error'
});
$(function () {
ko.applyBindings(new SignInViewModel());
});
当我在userName
中输入无效的电子邮件地址并通过单击我的提交按钮调用登录时,则敲除会在元素旁边附加一条错误消息,但它会设置为不显示。有什么问题。
由于
答案 0 :(得分:0)
你能用这个小提琴重现你的问题:
http://jsfiddle.net/jearles/hRa2h/
-
这对我有用。您将立即看到错误计数为2,按“登录”将显示错误。键入无效的电子邮件会显示电子邮件。
====
HTML
<fieldset>
<legend>User: <span data-bind='text: errors().length'></span> errors</legend>
<label>User name: <input data-bind='value: userName'/></label><br/>
<label>Password: <input data-bind='value: password' type="password"/></label>
</fieldset>
<button type="button" data-bind='click: login'>Login</button>
JS
ko.validation.configure({
insertMessages: true,
decorateElement: true,
errorElementClass: 'error',
messagesOnModified: false
});
function SignInViewModel() {
var self = this;
self.userName = ko.observable().extend({
required: true,
pattern: {
message: 'Username must be a valid email address',
params: /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/
}
});
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 {
self.errors.showAllMessages(true);
}
}
}
$(function () {
ko.applyBindings(new SignInViewModel());
});
答案 1 :(得分:0)
问题是由于bootstrap,因为bootstrap有一个类
.input-append, .input-prepend {
margin-bottom: 5px;
font-size: 0;
white-space: nowrap;
}
这font-size:0
造成了问题。淘汰赛正如预期的那样正常。
答案 2 :(得分:0)
从代码中删除''
self.userName = ko.observable('').extend({
代码
以上一行应该更像这样:
self.userName = ko.observable().extend({
错误消息将显示在span标记中。