Я пытаюсь реализовать валидаций с использованием Knockout и попытались пример «Боб» из hereИзготовление Нокаут валидация не срабатывают на странице загрузки
<p data-bind="css: { error: firstName.hasError }">
<input data-bind='value: firstName, valueUpdate: "afterkeydown"' />
<span data-bind='visible: firstName.hasError, text: firstName.validationMessage'> </span>
</p>
<p data-bind="css: { error: lastName.hasError }">
<input data-bind='value: lastName, valueUpdate: "afterkeydown"' />
<span data-bind='visible: lastName.hasError, text: lastName.validationMessage'> </span>
</p>
Исходный код: Модельное
ko.extenders.required = function(target, overrideMessage) {
//add some sub-observables to our observable
target.hasError = ko.observable();
target.validationMessage = ko.observable();
//define a function to do validation
function validate(newValue) {
target.hasError(newValue ? false : true);
target.validationMessage(newValue ? "" : overrideMessage || "This field is required");
}
//initial validation
validate(target());
//validate whenever the value changes
target.subscribe(validate);
//return the original observable
return target;
};
function AppViewModel(first, last) {
this.firstName = ko.observable(first).extend({ required: "Please enter a first name" });
this.lastName = ko.observable(last).extend({ required: "" });
}
ko.applyBindings(new AppViewModel("Bob","Smith"));
CSS:
.validationError{
border:solid 1px red;
}
При загрузке начальной страницы в текстовых полях не будет никаких данных. Поэтому я удалил жестко обозначенные имена. Теперь сообщение проверки отображается при загрузке страницы, а не когда пользователь покидает текстовые поля. Как-то KO думает во время загрузки страницы, что значение текстового поля изменилось и активировало код проверки.
Как остановить это?
Здесь используется прецедент, который я пытаюсь сделать. У меня есть два текстовых поля, нужно отобразить красную рамку без сообщения, а другой нужно показать сообщение о проверке.
Спасибо.
, если вы используете 'ko.extenders.required 'со связанной страницы просто удалите строку '// начальная проверка validate (target());' строка, чтобы отключить начальную проверку – nemesv
@nemesv, это удаляет начальную проверку, но теперь проверка не срабатывает, даже когда пользователь уходит текстовое поле. – Codehelp
Можете ли вы создать для него jsfiddle? – JotaBe