字母表验证控制

Alphabet validation control

本文关键字:控制 验证 字母表      更新时间:2023-09-26

我试图对字母表输入进行验证控制。验证不知何故不起作用。有人知道我在代码中遗漏了什么吗。以下是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());

目前的情况是,当值发生变化时,执行正则表达式比较的代码将不会被调用,因为它不在方法中。

self.name的值发生更改时,您可以使用Knockout subscribe方法得到通知。因此,这就是您订阅Knockout observable的方式:

self.name = ko.observable('');
self.name.subscribe(function (newValue) {
    // newValue is the updated value
    // run the checks on new value here
});

工作Fiddle

标记

<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');
    }
});

演示Fiddle