Ext数据校验

本文详细介绍了在使用Ext.js框架进行表单开发时,如何实现数据校验、限制输入长度、借助Vtype验证、后台校验以及自定义校验规则等功能。通过实例展示了如何在前端进行有效数据校验,确保用户输入符合预期格式和规则,同时在提交前避免无效数据的发送。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在firefox中,如果校验失败是不会执行提交操作的;但是在IE中则会提交,需要用form.isValid()来判断。

在提交前调用判断是否数据校验OK:

//数据校验

if (!form.getForm().isValid()){

    Ext.Msg.alert('信息','有些必输项未输入!');

    return;

}

 

要想提示,需要把Ext.QuickTips.init();打开,否则看到的就是红色的波浪线,没文字提示。

20.1输入不能为空

继承自Ext.form.TextField的控件都支持非空校验,它们是:TextField、NumberField、TextArea、TriggerField、Combobox、DateField、TimerField。

举例:

var textfield = new Ext.form.TextField({

        fieldLabel:"Username",

        allowBlank:false,

        emptyText:"请输入数据",

        blankText:"此项为必输项!",

        name:"username",

        minLength:6,

        maxLength:16

});

页面加载后输入框中提示“请输入数据”,如果没有输入数据,则在提交时或焦点离开输入框时提示“此项为必输项!”。

 

20.2限制输入长度

代码:

var textfield = new Ext.form.TextField({

        fieldLabel:"Username",

        allowBlank:false,

        emptyText:"请输入数据",

        blankText:"此项为必输项!",

        name:"username",

        minLength:6,

        minLengthText:"最少输入6位!",

        maxLengthText:"最多输入16位!",

        maxLength:16

});

 

20.3借助Vtype验证

Ext提供了一套默认的验证方案,如果使用它们就只需要记住vtype即可,就不需要记住一长串的正则表达式了,然后在控件中配置即可。

例如:

var email = new Ext.form.TextField({

        fieldLabel:"Email",

        allowBlank:false,

        emptyText:"请输入数据",

        name:"email",

        minLength:6,

        maxLength:16,

        vtype:"email"

});

这些信息定义在Ext.form.Vtype中,默认支持4vtype:

1.  email:电子邮件格式

2.    url:网址

3.    alpha:英文字母

4.    alphanum:英文字母+数字

 

如果要扩展自己的vtype,可以这样:

Ext.apply(Ext.form.VTypes, {

        IPAddress: function(v) {

            return/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/.test(v);

        },

        IPAddressText: 'Must be a numeric IP address'

    });

这样就扩展了一种vtype:IPAddress

 

这样使用就可以了:

var ip = new Ext.form.TextField({

        fieldLabel:"Ip",

        allowBlank:false,

        emptyText:"请输入数据",

        name:"ip",

        minLength:6,

        maxLength:16,

        vtype:"IPAddress"

    });

 

20.4自定义校验

其实上面扩展vtype也算是自定义校验规则。自定义校验就是允许使用regex来验证。

例如:

var hanzi = new Ext.form.TextField({

        fieldLabel:"汉字",

        allowBlank:false,

        emptyText:"请输入数据",

        name:"hanzi",

        minLength:6,

        maxLength:16,

        regex:/^[\u4E00-\u9FA5]+$/,

        regexText:"只能输入汉字!"

    });

 

20.5后台校验

在后台返回的消息中,只要返回错误消息errors,并把它放到正确的地方,Ext会自动将错误信息显示到相应的位置。

示例:

// 后台校验

Ext.onReady(function() {

    Ext.QuickTips.init();

   

    var serverText = new Ext.form.TextField({

        fieldLabel:"后台校验",

        name:"houtai"

    });

   

    var form = new Ext.form.FormPanel({

        title:"Ext默认表单提交方式",

        width:800,

        labelAlign:"right",

        labelWidth:100,

        url:'/myExt2.3/AjaxSubmitForm.do',

        renderTo:document.body,

        items:[

               serverText

        ],

        buttons:[

                 {

                 text:"提交",

                 handler:function() {

                         //数据校验

                         if (!form.getForm().isValid()) {

                             Ext.Msg.alert('信息','有些必输项未输入!');

                             return;

                         }

                      

                      form.getForm().submit({

                            success: function(form,action) {

                                Ext.Msg.alert('提示',action.result.msg);

                            },

                            failure: function(form,action) {

                                //Ext.Msg.alert('提示','提交失败!');

                                if (action.failureType == Ext.form.Action.SERVER_INVALID) {// 业务错误

                                    //Ext.Msg.alert('提示','提交失败!');

                                }

                                else { // 网络问题

                                    Ext.Msg.alert('提示','网络连接故障!');

                                }

                            }

                         });

                 }

                 }

        ]

    });

});

 

Servlet

Stringhoutai = request.getParameter("houtai");

if(houtai.replace("","").length() == 0) {

    response.getWriter().write("{success:false,errors:{houtai:'后台提示不能为空!'}}");

}

else {

    response.getWriter().write("{success:true,msg:'表单提交成功!'}");

}

 

A. 不输入任何内容,单击提交按钮

这里的提示信息就是后台返回的提示信息,在Servlet返回的errors中定义的。

B.  输入内容,单击提交按钮、

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值