В моем приложении Knockout.js я хочу проверить ввод пользователя.Я использовал пользовательскую проверку
Ниже приведен код, который я использовал для циклического прохождения каждого элемента в массиве.
result.Settings.filter(function (element) {
element.DisplayMobile = ko.observable(element.PointsForMobile).extend({ required: { message: 'This field cannot be empty' }, useNumberFloatOnly: "abc", maximumValue: 'abc'});
element.DisplayWeb = ko.observable(element.PointsForWeb).extend({ required: { message: 'This field cannot be empty' }, useNumberFloatOnly: "abc", maximumValue: 'abc'});
element.Error = ko.observable(false);
});
ниже приведен ввод в представлении
<input type="number" data-bind="value:$data.DisplayWeb,valueUpdate: ['afterkeydown', 'input'],,change:TestValidPoint" class="positiveno" min="0" />
<input type="number" data-bind="value:$data.DisplayMobile,valueUpdate: ['afterkeydown', 'input']" class="positiveno" min="0" />
ниже указан валидатор useNumberFloatOnly
, который работает для меня.
ko.validation.rules['useNumberFloatOnly'] = {
validator: function (val, othervalue) {
var numStr = /^\d*[0-9]\d*$/;
if (othervalue === "abc") {
Settings().filter(function (element) {
if (element.DisplayMobile() == "" || element.DisplayWeb() == "") {
element.Error(true);
}
if ((element.DisplayMobile() == val || element.DisplayWeb() == val ) && !numStr.test(val)) {
element.Error(true);
}
else if ((element.DisplayMobile() == val || element.DisplayWeb() == val) && numStr.test(val)) {
element.Error(false);
}
});
}
return numStr.test(val);
},
message: 'Enter only positive values.Decimals not allowed'
};
при нажатии кнопки сохранения, я хочу проверить, нет ли ошибок в каком-либо из полей.две проблемы, с которыми я сталкиваюсь
1) Как отследить изменения входного значения?какое событие использовать для этого?это для отслеживания, если на входе есть ошибка, и если я могу отключить кнопку сохранения.
2) Второе, что я попробовал, это событие нажатия кнопки сохранения при циклическом прохождении массива: Ошибка observable всегда ложно, хотя в валидаторе я устанавливаю значение true.
Пожалуйста, укажите
Спасибо