字母验证控件

时间:2014-09-18 07:18:16

标签: javascript knockout.js

我尝试对字母输入进行验证控制。验证以某种方式不起作用。有谁知道我在我的代码中错过了什么。以下是便于查看的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());

1 个答案:

答案 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
});

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

Demo Fiddle