【发布时间】:2014-11-07 03:53:55
【问题描述】:
我正在尝试创建一个自定义 javascript 表单验证器。我从创建一个输入验证器基类开始,我正在扩展这个基类以处理更具体的输入类型。例如,收入和邮政编码。
当前结构如下:Base Class = InputValidator, Sub Classes: Income, ZipCode
当我只创建一个 Income 实例时,一切正常。但是,如果我还创建了一个 ZipCode 实例,它似乎会覆盖 Income 的基类。为了看到这一点,我创建了一个 JSFiddle。 http://jsfiddle.net/tpdietz/wy274ymb/3/
如果您在年收入输入中输入的不是数字,您应该会在收入输入上方看到一个警告下拉菜单。这就是我要的。但是,如果您取消注释 jsfiddle 中的第 48 行,请重新运行它,然后尝试相同的操作。您将看到输入不正确的年收入内容会引发邮政编码警告。正如预期的那样,为邮政编码输入除数字以外的其他内容会产生同样的效果。
这是我声明子类的方式:
var Income = function (incomeElement, warningElement) {
InputValidator.call(this, incomeElement, warningElement, isInteger);
this.isValid = function() {
return valid;
}
}
var ZipCode = function (zipCodeElement, warningElement) {
InputValidator.call(this, zipCodeElement, warningElement, isInteger);
this.isValid = function() {
return valid && ele.val().length < 6 && ele.val().length > 2;
}
}
这是我声明基类的方式:
var InputValidator = function (element, warningElement, validatorIn) {
this.name = name;
ele = element;
warning = warningElement;
validator = validatorIn;
valid = false;
ele.keyup(function() {
if(!validator($(this).val())) {
showWarning();
valid = false;
} else {
hideWarning();
valid = true;
}
});
function showWarning() {
warning.slideDown();
}
function hideWarning() {
warning.slideUp();
}
}
有人知道为什么会这样吗?我想我已经掌握了它应该如何工作。
谢谢。
【问题讨论】:
标签: javascript jquery inheritance subclass