修改EXT的TextField的验证属性(allowBlank和maxLength)的提示信息.
TextField本身验证长度时把中文当1位来计算的,这样针对像oracle数据库的varchar2(10)这种数据类型在前台作长度限制时就不太好控制.EXT也没相关的可以设置的属性,当然可以用TextField的表达式验证来判断.我喜欢偷懒,所以直接重写TextField,顺便把blankText和maxLengthText属性默认成TextField的FieldLabel+提示信息.
/** * @class Ext.form.TextField * @override Ext.form.TextField * @description 修改TextField的默认提示信息,并支持中文2位的计算 */ Ext.override(Ext.form.TextField,{ //重写验证涵数 validateValue : function(value){ if(this.allowBlank == false){ //不允许为空 if(value == null || value == ''){ this.markInvalid(String.format(this.blankText,value)); return false; } } var maxLen = this.maxLength; var maxLenText = this.maxLengthText; if(maxLenText.indexOf('{0}') != -1){ if(maxLen != null && maxLen != 'undefined' && maxLen > 0){ var regex = /[^\x00-\xff]/g; //中文正则 var len ; if(value instaceof String){ //将中文替换成2位字符 len = value.replace(regex,'**').length; }else{ len = value.length; } var label = this.fieldLabel; if(label != null && label != 'undefined'){ //去掉fieldLabel中生成的不必要字符 if(label.indexOf('</') != -1 ){ label = label.substring(label.lastIndexOf('>')+1, label.length); } if(len > maxLen){ //验证未通过,并设置提示信息 this.markInvalid(String.format(label+'长度不能大于'+maxLen+'位!(中文占2位)')); return false; } return true; } } }else{ var len = value.length; if(len > maxLen){ this.markInvalid(String.format(maxLenText ,value)); return false; } return true; } } });