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

实现要点

       利用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)});

            }

            );

                    

  

    }

);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值