论坛首页 Web前端技术论坛

Ext的Field.isValid()函数

浏览 3980 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-12-12   最后修改:2009-12-12
也许你也遇到过这种情况:先用markInvalid()函数把某个输入域标示为inValid状态,之后你调用这个输入域的isValid()函数,你期待它返回false,实际上确实true。
这是为什么呢?

官方的文档中对这个函数的描述是这样的:
引用
Returns whether or not the field value is currently valid by validating the processed value of the field. Note: disabled fields are ignored.

这个函数会调用已经定义的校验规则来验证输入框中的值,如果通过则返回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;
    }
})

论坛首页 Web前端技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics