Ext TextField默认提示信息,并支持中文按2个长度计算

本文介绍了一种针对ExtJS框架中的TextField组件进行中文字符长度验证的方法。通过对原有验证函数的重写,使得该组件能够准确计算包含中文字符的字符串长度,并支持自定义提示信息。
/**
 * @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;
                }
        }
});
Ext JS 是一个用于构建交互式 Web 应用程序的 JavaScript 框架,其 `textfield` 是一个常用的 UI 组件,用于接收用户的文本输入。以下是关于 `textfield` 的使用示例和配置方法: ### 基本用法 `textfield` 是 Ext JS 中 `Ext.form.field.Text` 类的实例,用于创建文本输入框。以下是一个简单的示例: ```javascript Ext.create('Ext.form.Panel', { title: 'Simple Form', bodyPadding: 10, width: 300, items: [{ xtype: 'textfield', name: 'name', fieldLabel: 'Name', allowBlank: false // 不允许为空 }], buttons: [{ text: 'Submit', formBind: true, disabled: true, handler: function() { var form = this.up('form').getForm(); if (form.isValid()) { form.submit({ success: function(fp, o) { Ext.Msg.alert('Success', 'Form submitted successfully!'); } }); } } }], renderTo: Ext.getBody() }); ``` ### 配置选项 `textfield` 提供了丰富的配置选项来定制其行为和外观。以下是一些常见的配置选项: - `fieldLabel`: 设置输入框的标签。 - `name`: 设置输入框的名称属性。 - `value`: 设置输入框的初始值。 - `allowBlank`: 设置是否允许输入为空。 - `maxLength`: 设置输入框允许的最大字符数。 - `minLength`: 设置输入框允许的最小字符数。 - `regex`: 设置输入框的正则表达式验证。 - `validator`: 设置自定义验证函数。 ### 事件处理 `textfield` 支持多种事件,可以通过监听这些事件来实现特定的功能。以下是一些常见的事件: - `change`: 当输入框的值发生变化时触发。 - `focus`: 当输入框获得焦点时触发。 - `blur`: 当输入框失去焦点时触发。 - `specialkey`: 当按下特殊键(如回车键)时触发。 ### 示例代码 以下是一个示例,展示了如何为 `textfield` 添加事件监听器: ```javascript Ext.create('Ext.form.Panel', { title: 'Text Field Events', bodyPadding: 10, width: 300, items: [{ xtype: 'textfield', name: 'name', fieldLabel: 'Name', listeners: { change: function(field, newValue, oldValue) { console.log('Value changed from "' + oldValue + '" to "' + newValue + '"'); }, focus: function(field) { console.log('Field gained focus'); }, blur: function(field) { console.log('Field lost focus'); } } }], renderTo: Ext.getBody() }); ``` ### 自定义验证 除了内置的验证选项外,还可以通过 `validator` 属性实现自定义验证逻辑。以下是一个示例: ```javascript Ext.create('Ext.form.Panel', { title: 'Custom Validation', bodyPadding: 10, width: 300, items: [{ xtype: 'textfield', name: 'email', fieldLabel: 'Email', validator: function(value) { // 简单的电子邮件验证 if (/^\w+@[a-zA-Z_]+?\.[a-zA-Z]{2,3}$/.test(value)) { return true; } else { return '请输入有效的电子邮件地址'; } } }], buttons: [{ text: 'Validate', handler: function() { var form = this.up('form').getForm(); if (form.isValid()) { Ext.Msg.alert('Success', 'Form is valid!'); } else { Ext.Msg.alert('Error', 'Form is invalid!'); } } }], renderTo: Ext.getBody() }); ``` 通过以上示例和配置选项,可以灵活地使用 `textfield` 来满足不同的需求。如果您有更多具体的需求或问题,欢迎继续提问。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值