JQuery 简便实现页面元素数据验证功能


Posted in Javascript onMarch 24, 2007

ASP.NET提供了丰富的数据验证控件,但这个验证功能都必须运用在服务器控件中;在复合验证数据时使用也不是很方便(虽然拖放控件很方便,但拖放数增多和设置相关属性就变得很麻烦的事情)。为了更方便灵活地实现验证功能,于是采用了JQuery编写了一个简单验证组件,在使用时只需要简单的描述一下验证规则,并不需要写一句JavaScript就可以实现具备ASP.NET验证控件的功能(当然页面要引入相关JavaScript文件)。
功能目标
       通过简单的自定义属性值描述具体的验证功能,当Form提交自动拦载执行验证功能。如果所有成员验证成功就提交,否则取消提交。
       简单使用描述: 
       

<input id="Text1" type="text" validator="type:string;nonnull:true;tip:请输入用户名!;tipcontrol:nametip" />  
       <input id="Text2" type="text" validator="type:date;nonnull:true;tip:请输入正确的出生日期!;tipcontrol:birthtip;min:1950-1-1;max:2000-1-1" /> 

实现要点
       利用JQuery提供的素元查找功能,方便查找出需要验证的元素对象;通过$(document).ready事件进很验证代码的初始化和执行的切入工作。
       定义验证规则描述属性,在初始化时对相关验证描述进行分解和集成处理。
       拦载Form提交过程进行验证处理,根据情况确定是否提交数据。
       元素对象在发生onchange事件时自动执行验证处理功能。
       通过alert和自定义区域显示错误信息。
具体JavaScript代码
       实现代码并不复杂只有几百行,由于相关代码比较简单所以没有编写注解.
具体代码:
// JScript 文件  
//<validator>  
//type:int|number|date|string  
//nonnull:true|false  
//regex:^[-\+]?\d+$  
//min:0  
//max:999999999  
//campare:id  
//comparetype:eq,neq,leq,req,le,ri  
//tipcontrol:  
//tip:  
//</validator>  
var ErrorMessage;  
function FormValidate(form)  
{  
    ErrorMessage='';  
    var legality,items;  
    legality = true;  
    items = $(form).find("input[@validator]");  
    for(var i =0;i< items.length;i++)  
    {  
       if(legality)  
       {  
            legality = OnItemValidator($(items[i]));  
       }  
       else  
       {  
            OnItemValidator($(items[i]));      
       }  
    }  
    items = $(form).find("textarea[@validator]");  
    for(var i =0;i< items.length;i++)  
    {  
       if(legality)  
       {  
            legality = OnItemValidator($(items[i]));  
       }  
       else  
       {  
            OnItemValidator($(items[i]));      
       }  
    }  
    items = $(form).find("select[@validator]");  
    for(var i =0;i< items.length;i++)  
    {  
       if(legality)  
       {  
            legality = OnItemValidator($(items[i]));  
       }  
       else  
       {  
            OnItemValidator($(items[i]));      
       }  
    }  
    if(!legality)  
    {  
        if(ErrorMessage !='')  
            alert(ErrorMessage);  
    }  
    return legality;  
}  
function CreateValObject(validator)  
{  
    var valobj = {  type:'string',  
                    nonnull:false,  
                    regex:null,  
                    min:null,  
                    max:null,  
                    campare:null,  
                    comparetype:null,  
                    tipcontrol:null,  
                    tip:null};  
    var properties;  
    var execute;  
    var namevalue;  
    properties = validator.split(';');  
    for(i=0;i<properties.length;i++)  
    {  
        namevalue = properties[i].split(':');  
        execute ="valobj." + namevalue[0] +'=\''+ namevalue[1]+'\';';  
        eval(execute);  
    }  
    return valobj;  
}  
function OnItemValidator(control)  
{  
    var regex,maxvalue,minvalue,cvalue;  
    var valobj = CreateValObject(control.attr('validator'));  
    var value = control.val();  
    value = ValidatorConvert(value,valobj.type);  
    if(valobj.nonnull=="true")  
    {  
        if(value == null || value=="")  
        {  
            ValidatorError(valobj);  
            return false;  
        }  
    }  
    else  
    {  
        if(value == null || value=="")  
            return true;  
    }  
    if(valobj.regex != null)  
    {  
        regex =new RegExp(valobj.regex);  
        if(value.match(regex) == null)  
        {  
            ValidatorError(valobj);  
            return false;  
        }  
    }  
    if(valobj.min != null)  
    {  
        minvalue = ValidatorConvert(valobj.min,valobj.type);  
        if(!CompareValue(value,minvalue,"req"))  
        {  
            ValidatorError(valobj);  
            return false;  
        }  
    }  
    if(valobj.max != null)  
    {  
        maxvalue = ValidatorConvert(valobj.max,valobj.type);  
        if(!CompareValue(value,maxvalue,"leq"))  
        {  
            ValidatorError(valobj);  
            return false;  
        }  
    }  
    if(valobj.campare != null)  
    {  
        cvalue = $('#' + valobj.campare).val();  
        cvalue = ValidatorConvert(cvalue,valobj.type);  
        if(!CompareValue(value,cvalue,valobj.comparetype))  
        {  
            ValidatorError(valobj);  
            return false;  
        }  
    }  
    return true;  
}  
function ValidatorError(valobj)  
{  
    if(valobj.tipcontrol != null)  
        showTip($("#"+ valobj.tipcontrol));  
    else  
    {  
        if(ErrorMessage !='')  
            ErrorMessage += '\n';  
        ErrorMessage += valobj.tip;  
    }  
}  
function CompareValue(leftvalue,rightvalue,compareType)  
{  
    if(leftvalue == null || rightvalue == null)  
        return false;  
    if(compareType=="eq")  
    {  
        return leftvalue == rightvalue;  
    }  
    else if(compareType =="neq")  
    {  
        return leftvalue != rightvalue;  
    }  
    else if(compareType =="le")  
    {  
        return leftvalue < rightvalue;  
    }  
    else if(compareType =="leq")  
    {  
        return leftvalue <= rightvalue;  
    }  
    else if(compareType =="ri")  
    {  
        return leftvalue > rightvalue;  
    }  
    else if(compareType =="req")  
    {  
        return leftvalue >= rightvalue;  
    }  
    else  
    {  
        return false;  
    }  
}  
function showTip(control)  
{  
    if(control.attr('show') != 'on')  
    {  
        control.fadeIn("slow");  
        control.attr('show','on');  
    }  
}  
function hideTip(control)  
{  
    control.hide();  
    control.attr('show','');  
}  
function ValidatorConvert(value, dataType) {  
    var num,exp,m;  
    var year,month,day  
    if(value == null || value =="")  
        return null;  
    if(dataType=="int")  
    {  
        exp=/^[-\+]?\d+$/;  
        if (value.match(exp) == null)  
            return null;  
        num = parseInt(value, 10);  
        return (isNaN(num) ? null : num);  
    }  
    else if(dataType =="number")  
    {  
        exp=/^[-\+]?((\d+)|(\d+\.\d+))$/;  
        if (value.match(exp) == null)  
            return null;  
        num = parseFloat(value);  
        return (isNaN(num) ? null : num);  
    }  
    else if(dataType =="date")  
    {  
        exp=/^(\d{4})([-/]?)(\d{1,2})([-/]?)(\d{1,2})$/  
        m = value.match(exp);  
        if (m == null)  
        {  
            exp=/^(\d{1,2})([-/]?)(\d{1,2})([-/]?)(\d{4})$/  
            m = value.match(exp);  
            if(m== null)  
                return null;  
            year = m[5];  
            month = m[1];  
            day =m[3];  
        }  
        else  
        {  
            year = m[1];  
            month =m[3];  
            day = m[5];  
        }  
        try  
        {  
            num = new Date(year,month,day);  
        }  
        catch(e)  
        {  
            return null;  
        }  
        return num;  
    }  
    else  
    {  
        return value.toString();  
    }  
}  
$(document).ready(  
    function(){  
        $("[@validator]").each(function(i)  
                    {  
                        var valobj = CreateValObject($(this).attr('validator'));  
                        if(valobj.tipcontrol !=null)  
                        {  
                            $('#' + valobj.tipcontrol).addClass('ErrorTip');  
                            hideTip($('#' + valobj.tipcontrol));  
                            $("#"+ valobj.tipcontrol).html("<NOBR>"+valobj.tip+"</NOBR>");  
                        }  
                        $(this).change(function(){  
                           if(OnItemValidator($(this)))  
                           {  
                                if(valobj.tipcontrol !=null)  
                                {  
                                   hideTip($('#' + valobj.tipcontrol));    
                                }  
                           }  
                           else  
                           {  
                                if(valobj.tipcontrol !=null)  
                                {  
                                   showTip($('#' + valobj.tipcontrol));    
                                }  
                           }  
                        });  
                     }  
                );  
          $("form").each(function(id)  
            {  
                $(this).submit(function(){return FormValidate(this)});  
            }  
            );  
    }  
); 

下载相关例程代码
Javascript 相关文章推荐
jQuery1.6 类型判断实现代码
Sep 01 Javascript
如何获取JQUERY AJAX返回的JSON结果集实现代码
Dec 10 Javascript
jquery获取被勾选的checked(选中)的那一行的3列和4列的值
Jul 04 Javascript
单击和双击事件的冲突处理示例代码
Apr 03 Javascript
使用ajax+jqtransform实现动态加载select
Dec 01 Javascript
关于JS 预解释的相关理解
Jun 28 Javascript
jQuery+Pdo编写login登陆界面
Aug 01 Javascript
详解VueRouter进阶之导航钩子和路由元信息
Sep 13 Javascript
在vue-cli中组件通信的方法
Dec 16 Javascript
JS随机数产生代码分享
Feb 24 Javascript
layui 表单标签的校验方法
Sep 04 Javascript
vue实践---根据不同环境,自动转换请求的url地址操作
Sep 21 Javascript
AutoSave/自动存储功能实现
Mar 24 #Javascript
用 javascript 实现的点击复制代码
Mar 24 #Javascript
基于逻辑运算的简单权限系统(实现) JS 版
Mar 24 #Javascript
用js实现的仿sohu博客更换页面风格(简单版)
Mar 22 #Javascript
漂亮的提示信息(带箭头)
Mar 21 #Javascript
自动生成文章摘要的代码[JavaScript 版本]
Mar 20 #Javascript
用roll.js实现的图片自动滚动+鼠标触动的特效
Mar 18 #Javascript
You might like
php session 检测和注销
2009/03/16 PHP
完整删除ecshop中获取店铺信息的API
2014/12/24 PHP
微信公众号开发之通过接口删除菜单
2017/02/20 PHP
javascript function、指针及内置对象
2009/02/19 Javascript
教你如何在 Javascript 文件里使用 .Net MVC Razor 语法
2014/07/23 Javascript
JS判断变量是否为空判断是否null
2014/07/25 Javascript
JavaScript保留关键字汇总
2015/12/01 Javascript
Select下拉框模糊查询功能实现代码
2016/07/22 Javascript
jQuery实现可展开折叠的导航效果示例
2016/09/12 Javascript
本地搭建微信小程序服务器的实现方法
2017/10/27 Javascript
使用vue根据状态添加列表数据和删除列表数据的实例
2018/09/29 Javascript
JS中使用react-tooltip插件实现鼠标悬浮显示框
2019/05/15 Javascript
element form 校验数组每一项实例代码
2019/10/10 Javascript
[32:36]完美世界DOTA2联赛PWL S3 LBZS vs CPG 第二场 12.12
2020/12/16 DOTA
PHP魔术方法__ISSET、__UNSET使用实例
2014/11/25 Python
Python 3中的yield from语法详解
2017/01/18 Python
使用python 和 lint 删除项目无用资源的方法
2017/12/20 Python
pandas series序列转化为星期几的实例
2018/04/11 Python
scrapy-redis的安装部署步骤讲解
2019/02/27 Python
Python qqbot 实现qq机器人的示例代码
2019/07/11 Python
python BlockingScheduler定时任务及其他方式的实现
2019/09/19 Python
tensorflow实现打印ckpt模型保存下的变量名称及变量值
2020/01/04 Python
详解python破解zip文件密码的方法
2020/01/13 Python
python print 格式化输出,动态指定长度的实现
2020/04/12 Python
pyspark给dataframe增加新的一列的实现示例
2020/04/24 Python
python切割图片的示例
2020/11/12 Python
多重CSS背景动画实现方法示例
2014/04/04 HTML / CSS
html5表单及新增的改良元素详解
2016/06/07 HTML / CSS
毕业生简单求职信
2013/11/19 职场文书
教师党员公开承诺事项
2014/05/28 职场文书
食品安全处置方案
2014/06/14 职场文书
党员教师批评与自我批评发言稿
2014/10/15 职场文书
2014年第四季度入党积极分子思想汇报(十八届四中全会)
2014/11/03 职场文书
违纪学生保证书
2015/02/27 职场文书
积极心理学课程心得体会
2016/01/22 职场文书
Python基础之Socket通信原理
2021/04/22 Python