Ext的Field.isValid()函数

也许你也遇到过这种情况:先用markInvalid()函数把某个输入域标示为inValid状态,之后你调用这个输入域的isValid()函数,你期待它返回false,实际上确实true。
这是为什么呢?

官方的文档中对这个函数的描述是这样的:
[quote]Returns whether or not the field value is currently valid by validating the processed value of the field. Note: disabled fields are ignored.[/quote]
这个函数会调用已经定义的校验规则来验证输入框中的值,如果通过则返回true。而markInvalid()函数只是给输入框加上了invalid标志,并不影响校验结果,于是这种奇怪的现象就出现了。

当然,我们可以通过预设校验规则来做所有的验证,而不用markInvalid这个函数,这样可以避免发生这种情况。但是,如果你也像我一样,喜欢用markInvalid函数标示某个控件为invalid,并且期望之后调用isValid时返回false,那么,下面的这段代码就派上用场了。

Ext.override(Ext.form.Field, {
isValid : function(preventMark){
if(this.disabled){
return true;
}
if(this.getEl().hasClass(this.invalidClass)){
return false;
}
var restore = this.preventMark;
this.preventMark = preventMark === true;
var v = this.validateValue(this.processValue(this.getRawValue()));
this.preventMark = restore;
return v;
}
})

你可能感兴趣的:(Ext的Field.isValid()函数)