`
awaitdeng
  • 浏览: 216901 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

ExtJS中表单验证使用自定义vtype示例

 
阅读更多
引用

在ExtJS中,使用了四种自定义,分别是'alpha',alphanum,'email','url',分别用来验证表单中的值是否符合字母、字母数字、电子邮件、URL等格式。但在实际应用中,我们需要验证的格式或者规则还是很多的。由于ExtJS是开源的框架,因此,我们可以扩展vtype的功能,实现自定义的vtype。

    比如,在实战中,我们经常会遇到需要验证密码的问题,最常使用的,就是如何验证原密码跟重复密码是否一致的问题。为了实现这个功能,我们可以自定义一个vtype,命名为repetition。因此,或以编写扩展代码如下:



1 Ext.apply(Ext.form.VTypes, {
2     repetition: function(val, field) {
3      //代码逻辑在此
4     },
5     repetitionText: '两个指定组件的组件值不一样'
6 })


    Ext.apply方法,用以将新属性复制到原对象中,所以, 新的repetition,我们可以以一个JSON配置对象的形式,复制到Ext.form.VTypes中,借此扩展vtype的功能。注意,除了提供repetition的逻辑之外,你还需要提供一个repetitionText,用以实现当验证失败时,返回的错误信息,该信息会显示在组件的提示信息中。格式必须遵循vtypename + 'Text'的格式,所以,repetition的vtype,其验证失败信息,就是repetitionText。

    repetition验证函数也必须遵循一定的参数格式,一共需要提供两个参数,val参数,是宿主表单的的表单值,field是宿主表单自身,所以,我们可以快速地通过这两个参数,访问表单宿主及其表单值,以此来进行验证。

    接下来,可以编写实现逻辑如下:



1 Ext.apply(Ext.form.VTypes, {
2     repetition: function(val, field) {     //返回true,则验证通过,否则验证失败
3         if (field.repetition) {               //如果表单有使用repetition配置,repetition配置是一个JSON对象,该对象提供了一个名为targetCmpId的字段,该字段指定了需要进行比较的另一个组件ID。
4             var cmp = Ext.getCmp(field.repetition.targetCmpId);   //通过targetCmpId的字段查找组件
5             if (Ext.isEmpty(cmp)) {      //如果组件(表单)不存在,提示错误
6                 Ext.MessageBox.show({
7                     title: '错误',
8                     msg: '发生异常错误,指定的组件未找到',
9                     icon: Ext.Msg.ERROR,
10                     buttons: Ext.Msg.OK
11                 });
12                 return false;
13             }
14             if (val == cmp.getValue()) {  //取得目标组件(表单)的值,与宿主表单的值进行比较。
15                 return true;
16             } else {
17                 return false;
18             }
19         }
20     },
21     repetitionText: '两个指定组件的组件值不一样'
22 })


至此,扩展功能已经结束,我们可以在表单中,使用repetition验证了。



1             new Ext.form.FieldSet({
2                 title: '注册信息',
3                 autoHeight: true,
4                 checkboxToggle: true,
5                 labelWidth: 55,
6                 items: [
7                     new Ext.form.TextField({
8                         fieldLabel: 'Email',
9                         vtype: 'email'
10                     }),
11                     new Ext.form.TextField({
12                         inputType: 'password',
13                         id: 'pass1',
14                         maxLength: 6,
15                         fieldLabel: '输入密码',
16                         allowBlank: false
17                     }),
18                     new Ext.form.TextField({
19                         inputType: 'password',
20                         id: 'pass2',
21                         maxLength: 6,
22                         fieldLabel: '重复密码',
23                         allowBlank: false,
24                         vtype: 'repetition',  //指定repetition验证类型
25                         repetition: { targetCmpId: 'pass1' }  //配置repetition验证,提供目标组件(表单)ID
26                     })
27                 ]
28             })


运行效果如图:




验证失败时,出现的提示信息,是我们在定义vtype时,所设置的默认值“两个指定组件的组件值不一样”这样的文字,如果需要改成另外的提示信息,可以通过重写repetitionText字段实现。

Ext.form.VTypes.repetitionText = '输入的两次密码不一样';



运行效果如图:


分享到:
评论

相关推荐

    EXT 表单验证EXT 表单验证

    通过阅读如"EXT 表单验证_journeylin_新浪博客.html"、"ExtJS中表单验证使用自定义vtype示例 - 芒果奶茶的日志 - 网易博客.mht"和"Ext表单验证 - 天行健的日志 - 网易博客.mht"这样的资源,你可以深入理解EXT表单...

    extjs表单验证特殊字符

    EXTJS表单验证主要依赖于`Ext.form.field.Base`组件,它是所有表单字段的基础类。每个表单字段都可以配置验证规则,通过`vtype`属性定义基本的验证类型,或者使用`validators`属性自定义验证函数。对于特殊字符的...

    Jquery、YUI、ExtJs 三大javascript框架表单验证带提示功能的demo

    在提供的"demo"压缩包中,你可能会找到三个不同的文件夹,分别对应Jquery、YUI和ExtJs的表单验证示例。这些示例通常会包含HTML文件展示表单结构,CSS文件用于样式控制,以及JavaScript文件实现验证逻辑。你可以通过...

    JS表单验证数字字母汉字邮箱.pdf

    为了显示错误提示,代码中使用了`regexText`属性自定义正则表达式验证失败时的提示信息,并通过`Ext.QuickTips.init()`初始化快速提示功能,使得鼠标悬停在红色警告标记上时可以显示提示信息。 总结来说,这个示例...

    ext form小例子

    - 自定义验证:除了内置的验证类型,还可以通过`vtype`属性自定义验证函数,实现更复杂的数据验证逻辑。 3. `Ext.form.Vtype`扩展: - Vtype(Validation Type)是EXTJS中用于表单字段验证的一种机制,它是一组预...

    extjs总结.pdf

    **自定义验证**: - 若要创建自定义 `vtype`,需要提供正则表达式、输入掩码和错误消息。 - 示例:创建一个验证导演姓名的 `vtype`,要求由两个以大写字母开头的单词组成,单词间用空格分隔。 - 定义 `nameVal`, `...

    extjs实践大量实例讲解

    ### 示例 3:表单验证 ```javascript var form = Ext.create('Ext.form.Panel', { title: 'Basic Form', width: 300, bodyPadding: 10, renderTo: Ext.getBody(), items: [{ xtype: 'textfield', fieldLabel...

    extjs与系统切分模块设计

    - **面向对象编程**:ExtJS鼓励使用面向对象的编程模式,便于代码的管理和维护。例如: ```javascript Ext.namespace('demo'); demo.User = Ext.extend(Ext.Panel, { getName: function() { // 实现方法 } })...

    ext-3-TextField-sample.rar_ext_ext TextField_ext textfield inp

    - `regex`: 正则表达式,自定义验证规则。 - `emptyText`: 输入框默认显示的提示文本,当输入框为空时显示。 3. **事件处理**: TextField支持多种事件,如`focus`, `blur`, `change`, `specialkey`等。例如,...

    学习ExtJS form布局

    ExtJS 提供了强大的表单验证机制,每个表单字段可以有自己的验证规则,例如`vtype`属性可以设定字段的验证类型,`allowBlank`用来控制字段是否允许为空。`FormPanel`对象也提供了`getForm()`方法获取表单实例,可以...

Global site tag (gtag.js) - Google Analytics