学习JQuery后的一个实际应用--页面表单验证(适合大规模应用)

该表达验证的功能如下:

1、针对每个表单输入控件,用户可设置自定义级别和基本级别的匹配表达式和相应的提示信息;

2、用户离开表单输入控件时会自动校验,如果校验非法,该控件的边框底色会变红

3、如果在保存按钮上注册检查所有表单输入控件的代码,则会在点击按钮保存时检查所有输入表单控件,校验不合法的底色变红,

      焦点自动定位到第1个输入非法的表达控件,也不会触发回发事件。

4、鼠标放在输入非法的表达控件上,会在输入控件的下方显示输入提示信息。

优势:1、验证表达式和提示信息可以通过服务器端属性注册实现,便于程序员使用,也便于扩展到从数据库获取设置信息;

2、替代使用aspnet提供的表达验证控件,既可以减少验证控件对布局的影响,因为验证和输入控件集成,增加了可维护性。

页面表单验证代码:

注:BaseRegExp为基本验证表达式,OrgRegExp为组织级正则表达式,EntRegExp为企业级验证表达式。一般的应用只要BaseRegExp即可.

(function(){
    var InvalidationCheck = function(){

    //输入匹配检测
    function CheckValidation(input,regexp)
    {
        if(!input)
        {
           input = "";
        }
        var theMatch =input.match(regexp);
        if(theMatch)
        {
           return true;
        }
        else
        {
           return false;
        }
    }

   //创建或获取提示框,如果表单控件的输入不合法,一是该控件的边框颜色会变,而是鼠标经过时会提示规则信息,对客户比较友好。
    function CreateMsgDiv(msg)
    {
        var theDiv = $('#MyMessageDiv');
        if(theDiv.length<=0)
        {
           theDiv = $("<div id='MyMessageDiv' class='MyTooltip' style='display:block'>"+msg+"</div>");
        }
        return theDiv;
    }
    //获取元素的位置.
    function GetElementPos(el)
    {
        var op = el[0];
        var theX = op.offsetLeft;
        var theY = op.offsetTop;
        while(op =op.offsetParent)
        {
           theX += op.offsetLeft;
           theY += op.offsetTop;
        }
        return [theX,theY];
    }
    //获取输入规则信息,用于提示用户.
    function GetInputRegulation(obj)
    {
       var theRet = obj.attr("inputregmsg");
       return ((theRet==null)?"":theRet);
    }

   //设置表单输入控件的状态,true表示输入合法,false表示输入非法.
    function SetInputState(obj,state)
    {
        if(state==false)
        {
           obj.attr("inputstate","false");
        }
        else
        {
           obj.attr("inputstate","true");
        }
    }

  //获取表达输入控件状态.
    function GetInputState(obj)
    {
       return (obj.attr("inputstate") != "false")?true:false;
    }

   //保存表单控件的样式,一旦输入合法后可恢复

    function SetOldClassName(obj)
    {
       var theOldStyle = obj.attr("oldclassname");
       if(theOldStyle==null)
       {
          var theClass = obj.attr("className");
          if(!theClass)
          {
             theClass="";
          }
          obj.attr("oldclassname",theClass);
       }
    }

    //获取当前样式类名
    function GetCurrClassName(obj,IsValid)
    {
      var theStyle = null;
      if(IsValid==true)
      {
          theStyle = obj.attr("oldclassname");
          if(!theStyle)
          {
            theStyle ="";
          }
      }
      else
      {
          theStyle = "InputIsInvalid";
      }
     
      return theStyle;
    }

   //设置当前显示样式.
    function SetCurrDisplayStyle(obj,IsValid)
    {
       obj.attr("className",GetCurrClassName(obj,IsValid));
    }

   //检查所有表单控件,适用于保存按钮.
    function CheckAllInput()
    {
        var theFirstInvalidObj = null;  
        //处理输入框
        var inputs = $(':text:enabled,textarea:enabled,select:enabled');
        for(var i=0;i<inputs.length;i++)
        {
           //获取OrgRegExp
           var theCurrInput =$(inputs[i]);
           var theCurrOK = true;
           SetOldClassName(theCurrInput);
           var theOrgRE = theCurrInput.attr("OrgRegExp");
           if(theOrgRE)
           {
               theCurrOK = CheckValidation(theCurrInput.val(),theOrgRE);
               SetCurrDisplayStyle(theCurrInput,theCurrOK);
               if(theCurrOK==false)
               {
                  SetInputState(theCurrInput,false);
                  if(!theFirstInvalidObj)
                  {
                     theFirstInvalidObj = theCurrInput;
                  }
                  continue;
               }
           }
           //获取基本的校验表达式
           var theBaseRE = theCurrInput.attr("BaseRegExp");
           if(theBaseRE)
           {
               theCurrOK = CheckValidation(theCurrInput.val(),theBaseRE);
               SetCurrDisplayStyle(theCurrInput,theCurrOK);
               if(theCurrOK == false)
               {
                  if(!theFirstInvalidObj)
                  {
                     theFirstInvalidObj = theCurrInput;
                  }
               }
           }
           SetInputState(theCurrInput,theCurrOK);
        }

        //获取第一个输入非法的表单控件,默认会自动定位到该控件.
        return theFirstInvalidObj;
    }
    this.ShowTooltipMsg =function(event)
    {
       var obj = $(this);
       if(GetInputState(obj)==false)
       {
          var Msg = GetInputRegulation(obj);
          if(Msg)
          {
             var theDiv = CreateMsgDiv(Msg);
             theDiv.appendTo('body');
             var thePos = GetElementPos(obj);
             theDiv.css("left",thePos[0] + event.offsetX + "px");
             theDiv.css("top",thePos[1] +23+ "px");
          }
       }
    }
    this.HiddenTooltipMsg =function(event)
    {
       var obj = $(this);
      if(GetInputState(obj)==false)
      {
        var theDiv = $("#MyMessageDiv");
        if(theDiv.length>0)
        {
           $("body")[0].removeChild(theDiv[0]);
        }
      }
    }
    this.DoValidationAlbert =function()
    {
        var theFirstObj = CheckAllInput();
        if(theFirstObj)
        {
           try
           {
              theFirstObj.focus();
           }
           catch(ex)
           {
           }
           return false;
        }
        return true;
    }
    this.CheckInputValidation=function()
    {
           //获取OrgRegExp
           var theCurrInput =$(this);
           var theCurrOK = true;
           //设置旧的样式类.
           SetOldClassName(theCurrInput);
           var theOrgRE = theCurrInput.attr("OrgRegExp");
           if(theOrgRE)
           {
              theCurrOK = CheckValidation(theCurrInput.val(),theOrgRE);
               SetCurrDisplayStyle(theCurrInput,theCurrOK);
           }
           if(theCurrOK==false)
           {
              SetInputState(theCurrInput,false);
              return;
           }
           //获取基本的校验表达式
           var theBaseRE = theCurrInput.attr("BaseRegExp");
           if(theBaseRE)
           {
               theCurrOK = CheckValidation(theCurrInput.val(),theBaseRE);
               SetCurrDisplayStyle(theCurrInput,theCurrOK);
           }
           SetInputState(theCurrInput,theCurrOK);
    }
    this.Init = function()
    {
       $(':text:enabled,textarea:enabled,select:enabled').mouseenter(this.ShowTooltipMsg)
      .mouseleave(this.HiddenTooltipMsg)
      .mousemove(this.ShowTooltipMsg)
      .keypress(this.HiddenTooltipMsg)
      .blur(this.CheckInputValidation);
      $(document.forms[0]).submit(this.DoValidationAlbert);
    }
  }
  $InputCheck = new InvalidationCheck();
})();
用法:要运行该代码,需要JQuery库。如果不需要中间回发,只需要调用Init初始化一下,验证正则表达式可通过服务器端服务控件注册属性的方式加入。

如果需要回发,则控件事件触发函数挂接,需要在服务器端来完成。

如果利用服务器控件,有两种方法完成验证表达式和提示信息的方式:一是通过对控件注册属性来完成,一是可以简单继承一下控件,将需要的信息作为服务器控件的属性,并输出到客户端属性。我个人偏向于后一种方法,因为这样,程序员既可以通过所见即所得的方式使用,而且这些验证信息可以从数据库读取,适合规模应用,而且事件的注册也可以在控件中自动完成,免除客户端注册或者手工设置的麻烦。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值