我刚刚开始使用ExtJS脚本而且我有一个具有
的ComboBoxallowBlank = false
和
forceSelection = true
我在列表中有一个项目作为默认消息,其中包含显示文本
Please select...
且无价值
''
当我在ComboBox上运行验证时,我得到 true 不明白为什么?
时的文件allowBlank = false
强制验证以检查value.length> 0 所以我在JS Console中完成了自己的测试
>> if (thisForm.controlManager.controlArray[2].allowBlanks) { if (thisForm.controlManager.controlArray[2].length >= 0) { true; } false; } else { if (thisForm.controlManager.controlArray[2].length > 0) { true; } false; }
并返回 false 所以我认为它可能是验证方法中的一个错误,所以我尝试了这个
>> thisForm.controlManager.controlArray[2].validateValue('')
得到了这个结果 true
任何人都对我可能做错的事情有任何想法,或者如果需要设置任何其他内容以使此验证在值为'时返回false。
PS。我也试过这个
>> thisForm.controlManager.controlArray[2].validateValue(' ')
并获得正确的结果 false 。这让我非常困惑,因为我通常期望''和''在验证中返回相同的值。
我知道解决方法是将我的价值设定为'',但我宁愿让它与''合作。
由于
答案 0 :(得分:2)
我刚刚碰巧遇到了同样的问题,经过一番调查后,设法找到了一个不需要覆盖Extjs标准功能的解决方案。
基本上,Ext.form.field.Text的后代有一个'validator'配置选项,它允许程序员为组件指定自定义验证函数(参见here)。
基本上,您的验证器函数在getErrors()的开头被调用,并在字段标准验证的其余部分之前进行评估。验证器函数接受一个参数(值),如果值有效则必须返回true,否则返回错误消息字符串。
以下配置最终适用于我的案例:
validator: function (value) {
return (value === '/*Your emptytext text*/') ? "blankText" : true;
}
答案 1 :(得分:1)
您必须使用emptyText配置 Ext有这个代码用于验证字段:
validate : function(){
if(this.disabled || this.validateValue(this.processValue(this.getRawValue()))){
this.clearInvalid();
return true;
}
return false;
}
和getRawValue的定义如下:
getRawValue : function(){
var v = this.rendered ? this.el.getValue() : Ext.value(this.value, '');
if(v === this.emptyText){
v = '';
}
return v;
}
所以,如果该值等于空文本,则返回值为''