#validation #knockout.js #knockout-validation
#проверка #knockout.js #нокаут-проверка
Вопрос:
Я использую простую страницу входа для записи имени пользователя и пароля. Пока пользователь нажимает кнопку «Забыл пароль», я проверяю только текстовое поле для входа.
Он хорошо работает при начальной загрузке страницы. изначально, если я оставляю идентификатор пользователя пустым, а нажатие кнопки забыли пароль вызывает ошибку проверки, и если я исправлю это, я все равно получу нулевое значение в объекте error . Я не уверен, откуда взялось это нулевое значение.
мой код следует
Javascript
var loginModule = (function () {
$(document).ready(function () {
var userName = $('input:text[name=username]').val();
var password = $('input:text[name=password]').val();
ko.validation.registerExtenders();
ko.validation.init();
ko.applyBindings(new viewmodel(userName, password));
});
var viewmodel = function (username, password) {
var self = this;
self.UserName = ko.observable(username).extend({ required: { message: 'User Id is required.' }, minLength: 5, maxLength: 10 });
self.Password = ko.observable(password).extend({ required: { message: 'Password is required.' }, minLength: 5, maxLength: 10 });
self.forgotPassword = function () {
var fperrors = ko.validation.group(self.UserName, { deep: false});
if (fperrors().length > 0) {
$('#errorMsg').show();
fperrors.showAllMessages();
}
else {
//valid code
}
};
};
return {
viewmodel: viewmodel
}
})();
Если я изменю
var fperrors = ko.validation.group(self.Имя пользователя, {deep: false});
для изменения fperrors = ko.validation.group(self.Имя пользователя(), { deep: false});
это вообще не выдает ошибку проверки.
Html-разметка
<P>
<p>
<span class="error" data-bind='visible: UserName.hasError, text: UserName.validationMessage'></span>
</p>
<LABEL class="field-label" for="User-id">User ID / alias<EM class=mandatory>*</EM></LABEL><input id="User-id" name="username" class=field-stretch data-bind='value:UserName, valueUpdate: "afterkeydown"'
type="text" value="" /></P>
<P>
<p><span class="error" data-bind='visible: Password.hasError, text: Password.validationMessage'></span></p>
<LABEL class=field-label for=Password>Password<EM class=mandatory>*</EM></LABEL> <input id="Password" name="password" class=field-stretch data-bind='value:Password, valueUpdate: "afterkeydown"' type="password" value="" /></P>
<P class="text-left btn-wrap"><INPUT class="btn-primary" data-bind='click:submit' value="Logon" type=submit> amp;nbsp; <INPUT data-bind='click:forgotPassword' class=btn-primary value="Forgotten password?" type=submit> </P>
может ли кто-нибудь помочь, что с этим не так?
Комментарии:
1. Можете ли вы показать свой HTML-код?
Ответ №1:
Я не уверен, почему, но в моем тестировании мне пришлось передать наблюдаемое в виде массива, чтобы заставить его работать:
var fperrors = ko.validation.group([self.UserName], { deep: false});
Комментарии:
1. Спасибо, все работает нормально. не уверен, зачем мне нужно передавать observable в виде массива.