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 相关文章推荐
dojo 之基础篇(二)之从服务器读取数据
Mar 24 Javascript
js查错流程归纳
May 04 Javascript
js 判断一个元素是否在页面中存在
Dec 27 Javascript
详解JS 比较两个Json对象的值是否相等的实例
Nov 20 Javascript
javaScript中with函数用法实例分析
Jun 08 Javascript
javascript实现超炫的向上滑行菜单实例
Aug 03 Javascript
jQuery简单实现仿京东商城的左侧菜单效果代码
Sep 09 Javascript
基于JavaScript实现快速转换文本语言(繁体中文和简体中文)
Mar 07 Javascript
jQuery异步提交表单的两种方式
Sep 13 Javascript
详解基于Node.js的微信JS-SDK后端接口实现代码
Jul 15 Javascript
jQuery 点击获取验证码按钮及倒计时功能
Sep 20 jQuery
react项目如何使用iconfont的方法步骤
Mar 13 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 正则学习实例
2008/07/30 PHP
php的list()的一步操作给一组变量进行赋值的使用
2011/05/18 PHP
使用PHP导出Redis数据到另一个Redis中的代码
2014/03/12 PHP
php中__destruct与register_shutdown_function执行的先后顺序问题
2014/10/17 PHP
了解PHP的返回引用和局部静态变量
2015/06/04 PHP
php 开发中加密的几种方法总结
2017/03/22 PHP
php实现简单四则运算器
2020/11/29 PHP
图片自动缩小 点击放大
2008/07/07 Javascript
jquery tools 系列 scrollable学习
2009/09/06 Javascript
javascript中创建对象的几种方法总结
2013/11/01 Javascript
简单的代码实现jquery定时器
2013/11/17 Javascript
网站接入QQ登录的两种方法
2014/07/22 Javascript
纯javascript实现四方向文本无缝滚动效果
2015/06/16 Javascript
多个js毫秒倒计时同时进行效果
2016/01/05 Javascript
vue.js 使用v-if v-else发现没有执行解决办法
2017/05/15 Javascript
Angular2 之 路由与导航详细介绍
2017/05/26 Javascript
理解 Node.js 事件驱动机制的原理
2017/08/16 Javascript
node.js 模块和其下载资源的镜像设置的方法
2018/09/06 Javascript
详解vue数组遍历方法forEach和map的原理解析和实际应用
2018/11/15 Javascript
8个有意思的JavaScript面试题
2019/07/30 Javascript
js模拟F11页面全屏显示
2019/09/17 Javascript
TensorFlow 模型载入方法汇总(小结)
2018/06/19 Python
对Python的zip函数妙用,旋转矩阵详解
2018/12/13 Python
Django自带的加密算法及加密模块详解
2019/12/03 Python
浅谈keras的深度模型训练过程及结果记录方式
2020/01/24 Python
俄罗斯最大的在线珠宝大卖场:Nebo
2019/12/08 全球购物
新员工欢迎词
2014/01/12 职场文书
租房合同协议书
2014/04/09 职场文书
烹饪大赛策划方案
2014/05/26 职场文书
银行求职自荐书
2014/06/25 职场文书
群众路线领导对照材料
2014/08/23 职场文书
2014旅游局党组书记党建工作汇报材料
2014/11/02 职场文书
行政上诉状范文
2015/05/23 职场文书
收入证明范本
2015/06/12 职场文书
小学英语听课心得体会
2016/01/14 职场文书