jQuery扩展+xml实现表单验证功能的方法


Posted in Javascript onDecember 25, 2016

本文实例讲述了jQuery扩展+xml实现表单验证功能的方法。分享给大家供大家参考,具体如下:

此处表单验证jQuery 引用jquery.1.8.2.js,md5.js

扩展提示信息,扩展验证方法(如果有正则表达式的话可以用默认方法)

String.prototype.trim=function(){return this.replace(/(^\s*)|(\s*$)/g,"");};//ie下解决trim 方法问题
(function($) {
  $.elementVal = new Array();
  /**
   ********************************************************************************************************************************************
   * ========自定义提示语==============================================================================================================
   * ========regex、如果有正则表达式的话===============================================================================================
   * ========successMsg、验证成功时====================================================================================================
   * ========errorMsg、验证失败时======================================================================================================
   * promptMsg、提示语=================================================================================================================***********************
    **/
  $.vfData = {
    errorhtml:'<img src="images/cuo_biao.png"> ',
    successhtml:'<img src="images/dui_biao.png" /> ',
    pormpthtml:'<img src="images/tishi_biao.png"> ',
    _null : {
      //successMsg : "",
      errorMsg : "不能为空!",
      promptMsg : "不能为中文"
    },
    _firstpwd:{
      regex:/^[a-z0-9_-]{6,18}$/,
      //successMsg : "",
      errorMsg : "密码格式不正确!",
      promptMsg : "6-16位字符(字母或数字),区分大小写"
    },
    _code:{
      regex:/^[a-z0-9_-]{6,18}$/,
      //successMsg : "",
      errorMsg : "机构代码不正确!",
      promptMsg : "机构代码为自填项!"
    },
    _secondpwd:{
      //successMsg : "",
      errorMsg : "两次密码不一致!,请确保初次密码格式正确",
      promptMsg : "请再次输入密码"
    },
    _email : {
      regex:/^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/,
      //successMsg : "",
      errorMsg : "邮箱地址格式不正确!",
      promptMsg : "邮箱格式为www@xxx.com"
    },
    _companyname : {
      //successMsg : "",
      errorMsg : "没有你输入的机构!",
      promptMsg : "请在所在的机构中选择"
    },
    _phone:{
      regex :/^1[3|4|5|8][0-9]\d{4,8}$/,
      successMsg : "",
      errorMsg : "你输入的手机号格式不正确!",
      promptMsg : "输入你的的手机号码!"
    },
    _tel:{
      //regex :/^[0][1-9]{2,3}[-][1-9]{1}[0-9]{8}$/,
      regex :/^[0-9]{3,4}[-]?[0-9]{9}$/,
      successMsg : "",
      errorMsg : "你输入的电话格式不正确!",
      promptMsg : "格式固定 例如 010-88888888!"
    },
    _loginname:{
      regex:/^[a-zA-Z]{1,1}[a-z0-9A-Z]{5,16}$/,
      successMsg : "",
      errorMsg : "你输入的用户名格式不正确!",
      promptMsg : "6-12位字符(字母、数字、汉字),首位必须为字母,区分大小写"
    },
    _captcha:{
      regex:/^[a-z0-9A-Z]{4}$/,
      successMsg : "",
      errorMsg : "你输入的验证码格式不正确!",
      promptMsg : "请输入验证码!"
    }
  };
   /**
   * ============================================================================================================================
   * =========自定义验证方法验证方法==============================================================================================
   * ============================================================================================================================
   * */
  $.firstpwd="";
  $.verification = {
    // 提示信息 0:正常、1:错误 、2:提示
    _def:{//如果没有自定义的验证的话直接调用就可以了$.verification._def(obj);
      vf:function(obj){
        var num = 0;
        if ($.utilfun.regexcheck(obj)) {
          num = 0;
        } else {
          num = 1;
        }
        return $.utilfun.showPrompt(num, obj);
      }
    },
    _null : {//判断是否为空
      vf:function(obj){
        var num=0;
        if(obj.val.trim() == ""){
          num=1;
        }
        return $.utilfun.showPrompt(num, obj,$.vfData["_null"]);
      }
    },
//===================================================需要特殊判断的=================================================================
    _companyname : {// 机构名称验证
      vf : function(obj) {
        var num = 1;
        for(var key in $.indexdata){
          if(obj.val.trim()==key){
            num=0;
            break;
          }
        }
        return $.utilfun.showPrompt(num, obj);
      }
    },
    _firstpwd:{
      vf : function(obj) {
        var num = 0;
        if ($.utilfun.regexcheck(obj)) {
          $.firstpwd=obj.val;
          num = 0;
        }else{
          num=1;
        }
       return $.utilfun.showPrompt(num, obj);
      }
    },
    _secondpwd:{
      vf : function(obj) {
        var num = 0;
        var md5val=hex_md5(obj.val);
        if ($.firstpwd!=obj.val&&$.firstpwd!="") {
          num = 1;
        }else{
          $("#YHMM").val(md5val.toUpperCase());
        }
        return $.utilfun.showPrompt(num, obj);
      }
    },
    _loginname:{//校验登录名的唯一性
      vf : function(obj) {
        if($.verification._def.vf(obj)){//先验证格式
          var params={type:1,value:obj.val};
          var num=$.utilfun.ajaxvf("/registeruserverify.go",params);
          var msg={errorMsg : "用户名已存在!"};
          return $.utilfun.showPrompt(num, obj,msg);
        }
      }
    },
    _email : {
      vf : function(obj) {//校验邮箱的的唯一性
        if($.verification._def.vf(obj)){//先验证格式
          var params={type:2,value:obj.val};
          var num=$.utilfun.ajaxvf("/registeruserverify.go",params);
          var msg={errorMsg : "此邮箱已经注册,请更换邮箱!"};
          return $.utilfun.showPrompt(num, obj,msg);
          }
      }
    },
    _phone:{
      vf:function(obj){//验证手机号的唯一性
        if($.verification._def.vf(obj)){//先验证格式
          var params={type:3,value:obj.val};
          var num=$.utilfun.ajaxvf("/registeruserverify.go",params);
          var msg={errorMsg : "此手机号已经注册,请更换手机号!"};
          return $.utilfun.showPrompt(num, obj,msg);
          }
      }
    },
//===================================================能够直接用正则表达式判断的=====================================================
    _code:{
      vf:function(obj){
        return $.verification._def.vf(obj);
      }
    },
    _captcha:{
      vf:function(obj){
        return $.verification._def.vf(obj);
      }
    },
    _tel:{
      vf:function(obj){
        return $.verification._def.vf(obj);
      }
    }
  };
  /**
   * =================================================================================================================================
   * ================公共方法=========================================================================================================
   * =================================================================================================================================
   */
  $.utilfun = {
    // 显示提示信息
    showPrompt : function(re, obj, vfData) {
      vfData = (vfData == null ? $.vfData[obj.fun]
          : vfData);//获取提示信息
      var formElement = $("#" + obj.id).parent().parent().find("p");
      try {
        switch (re) {
        case 0:
          formElement.html($.vfData.successhtml+(vfData.successMsg==null?"":vfData.successMsg));
          return true;
        case 1:
          formElement.css("color", "red");
          formElement.html($.vfData.errorhtml+vfData.errorMsg+"<a id='"+obj.id+"' name='"+obj.id+"'></a>");
          return false;
        case 2:
          formElement.css("color", "green");
          formElement.html($.vfData.pormpthtml+vfData.promptMsg);
          break;
        default:
          formElement.html("");
          return true;
        }
      } catch (e) {
      }
    },
    regexcheck : function(obj) {// 正则表达式验证
      var regex = $.vfData[obj.fun].regex;
      if (regex == null)
        return false;
      regex = new RegExp(regex);
      return regex.test(obj.val.trim());
      return regex.test(obj.val);
    },
    createElementJson : function(obj) {// 根据表单的属性创建json对象以便以调用
      var json = eval("({'val':'" + obj.val() + "'," + "'id':'"
          + obj.attr("id") + "'," + "'regex':'" + obj.attr("regex")
          + "'," + "'fun':'" + obj.attr("fun") + "','must':'"
          + obj.attr("must") + "'})");
      return json;
    },
    getFormElement : function(obj) {// 把需要验证的表单元素加到数组中
      $.elementVal = new Array();
      obj.find("input[id*='reg_']").each(function() {
        $.elementVal.push($.utilfun.createElementJson($(this)));
      });
    },
    verification : function() {// 遍历验证
      var size = $.elementVal.length;
      var vfresult=true;
      for (var i = size - 1; i >= 0; i--) {
        var elementJson = $.elementVal[i];
        var elementvfresult=$.utilfun.doverification(elementJson);
        console.info(elementJson.id);
        if(!elementvfresult){//给错误的表单元素添加锚点
         $("#point").attr("href","#"+elementJson.id);
        }
        vfresult=vfresult&&elementvfresult;
      }
      return vfresult;
    },
    evalmodth : function(obj) {
      var funpakger = "$.verification.";
      var thispakger = obj.fun;
      var thismodth = ".vf(obj)";
      var themodth = funpakger + thispakger + thismodth;
      return eval(themodth);
    },
    doverification : function(obj) {// 执行验证方法
      if(obj.must == "true"){//为必填项时
         var valisnull=$.verification._null.vf(obj);
         if(valisnull&&obj.fun != "undefined"){//如果有验证方法的话
            if($.utilfun.defaultverification(obj)){
                return $.utilfun.evalmodth(obj);
            }
          }else {
            if(obj.val.trim()==""){
              return false;
            }else{
              return true;
            }
          }
       }else{//不为必填项时
         if(obj.fun != "undefined"){//如果有验证方法的话
            if(obj.val.trim()!=""){
              if($.utilfun.defaultverification(obj)){
                return $.utilfun.evalmodth(obj);
              }
            }else{
              $.utilfun.showPrompt(3, obj,$.vfData["_null"]);
              return true;
            }
          }else{
            return true;
          }
       }
    },
    defaultverification : function(obj) {// 必须验证的方法
      var vfresult = true;
    // vfresult = $.verification._null.vf(obj);//添加每个表单必须检验的方法
      return vfresult;
    },
    ajaxvf:function(url,params){//需要接口请求验证的
      var num=0;
        $.ajax({
          type :"post",
          url : url,
          dataType:"xml",
          async : false,
          data : params,
        // contentType : "application/x-www-form-urlencoded; charset=utf-8",
          success:function(data){
            var xmlobj= $.xml(data);
            var result= $.getnode("CODE",xmlobj.find("RETURNINFO"));
            if("0"!=result){
              num=1;
            }
          }
        });
        return num;
    }
  };
  /**
   * ===============================================================================================================
   * ==========  验证入口  =================================================================================
   * ===============================================================================================================
   *
   * */
  $.fn.regattrs = function() {
    $.utilfun.getFormElement($(this));
    var vfresult=$.utilfun.verification();
    if(vfresult){
      $(this).submit();
    }else{
      $("#point")[0].click();
    }
  };
  /*
   * 单个验证
   */
  $.fn.regattr = function() {
    $(this).blur(function() {
      var elementJson = $.utilfun.createElementJson($(this));
      $.utilfun.doverification(elementJson);
    });
    $(this).find("input[type!='password']").keyup(function() {
      var elementJson = $.utilfun.createElementJson($(this));
      $.utilfun.doverification(elementJson);
    });
  };
  /*
   * 获取光表时提示
   */
  $.fn.prompt = function() {
    $(this).focus(function() {
      var elementJson = $.utilfun.createElementJson($(this));
      if (elementJson.must) {
        $.utilfun.showPrompt(2, elementJson);
      }
    });
  };
  /**
   * ===============================================================================================================
   * ==========  解决xml加载问题  =================================================================================
   * ===============================================================================================================
   *
   * */
  $.xml=function(data){
    var xmlobj=null;
    if(window.ActiveXObject){
       var xml;
      xml = new ActiveXObject("Microsoft.XMLDOM");
      xml.async = false;
      xml.loadXML(data);
      xmlobj=$(xml);
   }else{
     xmlobj=$(data);
   }
    return xmlobj;
  };
  //获取节点
  $.getnode=function(key,obj){
    var nodevalue=obj.children(key).text();
    return nodevalue;
  };
}(jQuery));

调用方式

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>表单验证</title>
=====引入=======表单验证 js
</head>
<body>
<!-- 锚点 -->
<a id="aaa" name="aaa"></a>
<!-- 锚点 -->
<div id="content">
  <div class="content_top">
    <div class="register_jigou">机构用户注册</div>
    <div class="content_top_login">我已经注册,现在就<a href="/zzlc/jsp/login/login.jsp">登录</a></div>
  </div>
  <!-- 表单开始  -->
  <form id="regform" method="post" action="/userregister.go">
    <div class="form_item">
      <span class="label fl">机构简称:</span>
      <div class="item_input fl">
        <input disabled="disabled" autocomplete="off" id="reg_companysimplename" name="JGJC_SV" type="text" class="text" />
        <input type="hidden" autocomplete="off" id="reg_companysimplename_form" name="JGJC_SV"/>
      </div>
      <p class="dui fl"></p>
    </div>
    <div class="form_item">
      <span class="label fl">组织机构代码:</span>
      <div class="item_input fl">
        <input disabled="disabled" autocomplete="off"  id="reg_companycode" name="ZZJGDM_SV"  type="text" class="text" />
        <input type="hidden" autocomplete="off" id="reg_companycode_form" name="ZZJGDM_SV"/>
        <a name="ZCDZ_SV"></a>
      </div>
      <p class="cuo fl"></p>
    </div>
    <div class="form_item">
      <span class="label fl">机构类别:</span>
      <div class="item_input fl" >
        <input disabled="disabled" autocomplete="off" id="reg_companytype" name="DWLX_SV" type="text" class="text"/>
        <input type="hidden" autocomplete="off" id="reg_companytype_form" name="DWLX_SV"/>
      </div>
      <p class="dui fl"></p>
    </div>
    <div class="form_item">
      <span class="label fl">注册地址:</span>
      <div class="item_input fl">
        <input disabled="disabled" autocomplete="off" id="reg_regaddress" name="ZCDZ_SV" type="text" class="text" />
        <input type="hidden" autocomplete="off" id="reg_regaddress_form" name="ZCDZ_SV"/>
      </div>
      <p class="dui fl"></p>
    </div>
    <h3>个人信息</h3>
    <div class="form_item">
      <span class="label fl"><b>*</b>登录名:</span>
      <div class="item_input fl">
        <input id="reg_loginname" fun="_loginname" value="wangjunadmin" name="YHM" must="true" type="text" class="text" />
      </div>
      <p class="dui fl"></p>
    </div>
    <input id="YHMM" value="" type="hidden" name="YHMM"></input>
    <div class="form_item">
      <span class="label fl"><b>*</b>登录密码:</span>
      <div class="item_input fl">
        <input id="reg_pwd" autocomplete="off" value="" type="password" fun="_firstpwd" must="true" class="text" />
      </div>
      <p class="dui fl"></p>
    </div>
    <div class="form_item">
      <span class="label fl"><b>*</b>密码确认:</span>
      <div class="item_input fl">
        <input md5="" autocomplete="off" id="reg_secondpwd" value="" fun="_secondpwd" must="true" type="password" class="text" />
      </div>
      <p class="dui fl"></p>
    </div>
    <div class="form_item">
      <span class="label fl"><b>*</b>姓名:</span>
      <div class="item_input fl">
        <input name="XM" id="reg_name" value="" must="true" type="text" class="text" />
      </div>
      <p class="dui fl"></p>
    </div>
    <div class="form_item">
      <span class="label fl"><b>*</b>性别:</span>
      <div class="item_input fl" style="text-align: center;">
      <input  type="hidden" class="text" value="男" name="XB_SV" id="XB_SV"/>
        <select name="XB" id="reg_sex">
          <option value="1">男</option>
          <option value="2">女</option>
          </select>
      </div>
      <p class="dui fl"></p>
    </div>
    <div class="form_item">
      <span class="label fl"><b>*</b>电话:</span>
      <div class="item_input fl">
        <input name="DH" must="true" value="010-888888888" id="reg_tel" fun="_tel" type="text" class="text" />
      </div>
      <p class="dui fl"></p>
    </div>
    <div class="form_item">
      <span class="label fl"><b>*</b>手机:</span>
      <div class="item_input fl">
        <input name="PHONE" must="true" value="18610740826" id="reg_phone" fun="_phone"  type="text" class="text" />
      </div>
      <p class="dui fl"></p>
    </div>
    <div class="form_item">
      <span class="label fl"><b>*</b>电子邮箱:</span>
      <div class="item_input fl">
        <input id="reg_email" fun="_email" value="wj_dreamfly@163.com" name="MAIL" must="true" type="text" class="text" />
      </div>
      <p class="dui fl"></p>
    </div>
    <div class="form_item">
      <span class="label fl"><b>*</b>联系地址:</span>
      <div class="item_input fl">
        <input id="reg_homeaddress" name="LXDZ" type="text" value="朝阳区" must="true" class="text" />
      </div>
      <p class="dui fl"></p>
    </div>
    <div class="form_item">
      <span class="label fl"><b>*</b>部门:</span>
      <div class="item_input fl">
        <input id="reg_emp" name="BM" type="text" value="信息部" must="true" class="text" />
      </div>
      <p class="dui fl"></p>
    </div>
    <div class="form_item">
      <span class="label fl"><b>*</b>职务:</span>
      <div class="item_input fl">
        <input id="reg_duty" name="ZW" type="text" value="开发" must="true" class="text" />
      </div>
      <p class="dui fl"></p>
    </div>
    <div class="form_item">
      <span class="label fl" style="color:#FFF">。</span>
      <div class="login_btn fl">
        <a href="javascript:void(0)" id="submit">
        <span style="width:270px; line-height:3em; text-align: center; background-image:url(images/regbut1216.png); display:block;color: white; ">提交</span>
        </a>
      </div>
    </div>
  </form>
 <!-- 表单结束  -->
    <a href="#aaa" id="point"></a>
</div>
<div id="footer"></div>
</body>
</html>
$(document).ready(function() {
  $("#point").click();//用锚点自动定位第一个验证失败的表单
  $("#submit").click(function() {//提交按钮
    $("#regform").regattrs();//注册方法自动验证表单中所有的元素
  });
  $("input").regattr();//失去光标时验证
  $("input").prompt();//获取光标是提示信息
});
Javascript 相关文章推荐
在修改准备发的批量美化select+可修改select时,在非IE下发现了几个问题
Jan 09 Javascript
jquery 模拟类搜索框自动完成搜索提示功能(改进)
May 24 Javascript
读jQuery之八 包装事件对象
Jun 21 Javascript
Js-$.extend扩展方法使方法参数更灵活
Jan 15 Javascript
jquery中ready()函数执行的时机和window的load事件比较
Jun 22 Javascript
js验证身份证号有效性并提示对应信息
Oct 19 Javascript
javascript判断firebug是否开启的方法
Nov 23 Javascript
Koa2 之文件上传下载的示例代码
Mar 29 Javascript
Koa2微信公众号开发之消息管理
May 16 Javascript
支付宝小程序tabbar底部导航
Nov 06 Javascript
浅谈layer的Icon样式以及一些常用的layer窗口使用方法
Sep 11 Javascript
JS对日期操作封装代码实例
Nov 08 Javascript
js实现图片切换(动画版)
Dec 25 #Javascript
根据Bootstrap Paginator改写的js分页插件
Dec 25 #Javascript
jQuery基于xml格式数据实现模糊查询及分页功能的方法
Dec 25 #Javascript
jQuery实现圣诞节礼物传送(花式轮播)
Dec 25 #Javascript
js判断iframe中元素是否存在的实现代码
Dec 24 #Javascript
jQuery Validate验证表单时多个name相同的元素只验证第一个的解决方法
Dec 24 #Javascript
web 屏蔽BackSpace键实例代码
Dec 24 #Javascript
You might like
PHP使用pcntl_fork实现多进程下载图片的方法
2014/12/16 PHP
linux中cd命令使用详解
2015/01/08 PHP
PHP中phar包的使用教程
2017/06/14 PHP
Laravel 实现Controller向blade前台模板赋值的四种方式小结
2019/10/22 PHP
PhpStorm连接服务器并实现自动上传功能
2020/12/09 PHP
Javascript中产生固定结果的函数优化技巧
2013/01/16 Javascript
JavaScript中prototype为对象添加属性的误区介绍
2013/10/15 Javascript
js实现鼠标经过时图片滚动停止的方法
2015/02/16 Javascript
js下拉选择框与输入框联动实现添加选中值到输入框的方法
2015/08/17 Javascript
微信小程序实现图片轮播及文件上传
2017/04/07 Javascript
js canvas实现擦除效果示例代码
2017/04/26 Javascript
JS实现简单的天数计算器完整实例
2017/04/28 Javascript
Node.js编写CLI的实例详解
2017/05/17 Javascript
create-react-app 修改为多入口编译的方法
2018/08/01 Javascript
js中对象和面向对象与Json介绍
2019/01/21 Javascript
Vue路由之JWT身份认证的实现方法
2019/08/26 Javascript
浅析vue-router实现原理及两种模式
2020/02/11 Javascript
JavaScript console的使用方法实例分析
2020/04/28 Javascript
解决vant中 tab栏遇到的坑 van-tabs
2020/11/04 Javascript
Python六大开源框架对比
2015/10/19 Python
Python+Selenium自动化实现分页(pagination)处理
2017/03/31 Python
python验证码识别实例代码
2018/02/03 Python
Python搭建代理IP池实现检测IP的方法
2019/10/27 Python
解决阿里云邮件发送不能使用25端口问题
2020/08/07 Python
Python实现手势识别
2020/10/21 Python
python图片合成的示例
2020/11/09 Python
加拿大在线隐形眼镜和眼镜店:VisionPros
2019/10/06 全球购物
音乐表演专业毕业生求职信
2013/10/14 职场文书
《火烧云》教学反思
2014/04/12 职场文书
学校四风对照检查材料
2014/08/28 职场文书
2014年班级工作总结范文
2014/12/23 职场文书
婚礼答谢词
2015/01/04 职场文书
先进个人主要事迹范文
2015/11/04 职场文书
演讲稿之开卷有益
2019/08/07 职场文书
python实现求纯色彩图像的边框
2021/04/08 Python
MySQL 数据类型选择原则
2021/05/27 MySQL