我尝试对字母输入进行验证控制。验证以某种方式不起作用。有谁知道我在我的代码中错过了什么。以下是便于查看的jsfiddle http://jsfiddle.net/8fy408hL/1/。感谢
这是我的javascript
function valName (name) {
var self = this;
var letter = /^[A-Za-z]+$/;
self.name = ko.observable(name);
if(name.value.match(letter)) {
alert('Input accepted');
return true;
} else {
alert ('Input is numeric. Must be alphabet!');
return false;
}
}
ko.applyBindings (new valName());
答案 0 :(得分:1)
目前的情况是,当值发生变化时,不会调用执行正则表达式比较的代码,因为它不在方法中。
当self.name
的值发生变化时,您可以使用Knockout订阅方法进行通知。所以这就是你订阅Knockout observable的方式:
self.name = ko.observable('');
self.name.subscribe(function (newValue) {
// newValue is the updated value
// run the checks on new value here
});
<强>标记强>
<p>Name:
<input data-bind="value: name" />
</p>
<强> JS 强>
function valViewModel() {
var self = this;
var letter = /^[A-Za-z]+$/;
self.name = ko.observable('');
self.name.subscribe(function (newValue) {
if (newValue.match(letter)) {
alert('Input accepted');
} else {
alert('Input is not alphabet');
}
});
}
ko.applyBindings(new valViewModel());
更好的方法可能是使用computed
值,只要可观察到的更改,该值也会得到通知:
self.nameValid = ko.computed(function () {
if (self.name()) {
if (self.name().match(letter)) {
alert('Name is valid');
} else alert('Name not valid');
}
});