jquery.validate使用详解


Posted in Javascript onJune 02, 2016

一、简单应用实例:

1.用class样式进行验证,用法简单,但不能自定义错误信息,只能修改jquery-1.4.1.min.js中的内置消息,也不支持高级验证规则。

<script type="text/javascript" language="javascript" src="https://3water.com/Scripts/jquery-1.4.1.min.js"></script>
<script type="text/javascript" language="javascript" src="https://3water.com/Scripts/jquery.validate.min.js"></script>
<h2>ValidateTest</h2>
<form id="loginForm" action="post">
 <table border="0" cellpadding="0" cellspacing="0">
  <tr>
   <td>
 
<input type="text" id="UserEmail" class="required email" /></td>
  </tr>
  <tr>
   <td>
 

<input type="password" id="Password" class="required" /></td>
  </tr>
  <tr>
   <td>
    <input type="submit" value="submit" onclick="checkInput();" />
   </td>
  </tr>
 </table>
</form>
<script language="javascript" type="text/javascript">
 function checkInput() {
  if ($("#loginForm").valid()) {
   return true;
  }
  return false;
 }
</script>

当然,如果不希望使用onclick事件进行提交验证,也可以在页面加载时加上jQuery的监控,代码如下:

$(document).ready(function () {
 jQuery("#loginForm").validate();
});

这时就不需要在提交按钮上加 onclick="checkInput();"这个事件了。

2.使用Json字符串验证,使用该规则验证,必须额外引入jquery.metadata.pack.js文件

修改上面的两个INPUT如下:

<input type="text" id="UserEmail" class="{validate:{ required:true,email:true }}" />
<input type="password" id="Password" class="{validate:{required:true,minlength:6,messages:{required:'请输入密码 ',minlength:'密码至少6位'}}}" />

可以看到,我们已经可以自定义错误消息了。

另外必须在页面中加上以下代码:

$(document).ready(function () {
 $("#loginForm").validate({
  meta: "validate"
 });
});

二、验证规则的应用

1.使用class验证的规则:

在class中可以使用:required,email,number,url,date,dateISO,dateDE,digits,creditcard,phoneUS

可以增加属性:minlength,maxlength,min,max,accept,remote(注:请检查是否返回是bool还是xml),equalTo='#password'

没有找到使用办法的内置方法:required(dependency-expression),required(dependency-callback),range,rangelength

2.使用Json对象验证的规则:

在class中进行如下定义:class=“{validate:{required:true,minlength:6,messages:{required:'请输入密码',minlength:'密码太短啦至少6位'}}}”

我们仍可进行以下定义:number:true, email:true, url:true, date:true, dateISO:true, dateDE:true, digits:true, creditcard:true, phoneUS:true

min:3, max:10, minlength:3, maxlength:10,required: '#other:checked'【此处表达式函数为required(dependency-expression)】

相比使用class来说,我们已经可以使用range方法了,可定义为数字range:[3,10],字符串长度rangelength:[3,10],remote:url,accept:'.csv|.jpg|.doc|.docx', equalTo:'#Password'

没有找到使用方法的内置方法:required(dependency-callback)

三、高级验证方法

在前面说到的简单验证中,使用起来非常简单,有些傻瓜式的味道,但毕竟有些内置规则不能使用。但要想做到灵活运用,还是需要通过JS编码来完成。这样不但所有的内置规则可以使用,而且我们还可以自定义验证规则。以下实例我从易到难逐个列出:

1.编写JS的简单方法

仍以登录验证为例:

<script type="text/javascript" language="javascript" src="https://3water.com/Scripts/jquery-1.4.1.min.js"></script>
<script type="text/javascript" language="javascript" src="https://3water.com/Scripts/jquery.validate.min.js"></script>
<h2>Validate-High</h2>
<form action="" id="loginForm" method="post">
 <table border="0" cellpadding="0" cellspacing="0">
  <tr>
   <td>
    <input type="text" id="UserEmail" />
   </td>
  </tr>
  <tr>
   <td>
   <input type="password" id="Password" />
   </td>
  </tr>
  <tr>
   <td>
   <input type="submit" value="submit"/>
   </td>
  </tr>
 </table>
</form>

<script language="javascript" type="text/javascript">

$(document).ready(function () {
 var validateOpts = {
  rules: {
   UserEmail: {
    required: true,
    email: true
   },
   Password: {
    required: true 
   }
  },
  messages: {
   UserEmail: {
    required: "请输入邮箱地址",
    email: "邮箱地址不正确"
   },
   Password: {
    required: "请输入密码" 
   }
  }
 };

 $("#loginForm").validate(validateOpts);
});
</script>

我们只需设置validate的参数即可。

2.equalTo的使用,一般在注册时会用到

<script type="text/javascript" language="javascript" src="https://3water.com/Scripts/jquery-1.4.1.min.js"></script>
<script type="text/javascript" language="javascript" src="https://3water.com/Scripts/jquery.validate.min.js"></script>
<h2>ValidateHigh</h2>

<form action="" id="loginForm" method="post">
 <table border="0" cellpadding="0" cellspacing="0">
  <tr>
   <td>
    <input type="text" id="UserEmail" /> 
   </td>
  </tr>
  <tr>
   <td>
    <input type="password" id="Password" />
   </td>
  </tr>
  <tr>
   <td>
    <input type="password" id="RePassword" />
   </td>
  </tr>
  <tr>
   <td>
    <input type="submit" value="submit"/>
   </td>
  </tr>
 </table>
</form>

<script language="javascript" type="text/javascript">
 $(document).ready(function () {
  var validateOpts = {
   rules: {
    UserEmail: {
     required: true,
     email: true
    },
    Password: {
     required: true
    },
    RePassword: {
     equalTo: "#Password"
    }
   },
   messages: {
    UserEmail: {
     required: "请输入邮箱地址",
     email: "邮箱地址不正确"
    },
    Password: {
     required: "请输入密码"
    },
    RePassword: {
     equalTo: "两次输入密码必须相同"
    }
   }
  };
  $("#loginForm").validate(validateOpts);
 });
</script>

3.required(dependency-callback)的使用,绿色字体。

var validateOpts = {
 rules: {
  age: {
   required: true,
   min: 3
  },
  parent: {
   required: function (element) {
    return $("#age").val() < 13;
   }
  }
 }
}

4.自定义规则,使用addMethod方法,如下:

//方法接收三个参数(value,element,param)
//value是元素的值,element是元素本身 param是参数,我们可以用addMethod来添加除built-in Validation methods之外的验证方法
//比如有一个字段,只能输一个字母,范围是a-f,写法如下

$.validator.addMethod("af", function (value, element, params) {
 if (value.length >1) {
  returnfalse;
 }
 if (value >=params[0] && value <=params[1]) {
  returntrue;
 } else {
  returnfalse;
 }
}, "必须是一个字母,且a-f");

这样我们就可以在rules中加上这个规则,如下

var validateOpts = {
 rules: {
  selectorId: {
   af: ["a","f"]//如果只有一个参数,直接写,如果af:"a",那么a就是这个唯一的参数,如果多个参数,用在[]里,用逗号分开
  }
 }
}

另外,经过试验,在Json方式中,我们可以使用af:['a','f'],这个验证可以起作用,在class方式中,在某个元素上增加af='af',验证也可以起到作用。

5.ajax验证,使用remote

remote: {
 url:"CheckEmail",
 type:"post",
 dataType:"json"
}

如果我们验证的方法是返回Boolean类型,这个方法是没有问题的。但很多时候我们可能返回的信息会更多,或者返回其它类型,这时我们可以重新定义一个新的remote方法,示例如下(返回一个Json对象):

$.validator.addMethod("jsonremome", function (value, element, param) {
 if (this.optional(element))
  return"dependency-mismatch";

 var previous =this.previousValue(element);
 if (!this.settings.messages[element.name])
  this.settings.messages[element.name] = {};

 previous.originalMessage =this.settings.messages[element.name].remote;
 this.settings.messages[element.name].remote = previous.message;

 param =typeof param =="string"&& { url: param} || param;

 if (previous.old !== value) {

  previous.old = value;
  var validator =this;
  this.startRequest(element);
  var data = {};
  data[element.name] = value;

  $.ajax($.extend(true, {
   url: param,
   mode: "abort",
   port: "validate"+ element.name,
   dataType: "json",
   data: data,
   success: function (response) {
    validator.settings.messages[element.name].remote = previous.originalMessage;
    //var valid = response === true;
    var valid = response.Result ===true;
    if (valid) {
     var submitted = validator.formSubmitted;
     validator.prepareElement(element);
     validator.formSubmitted = submitted;
     validator.successList.push(element);
     validator.showErrors();
    } else {
     var errors = {};
     //var message = (response.Message || validator.defaultMessage(element, "jsonremote"));
     var message = response.Message ||"远程验证未通过";
     errors[element.name] = $.isFunction(message) ? message(value) : message;
     validator.showErrors(errors);
    }
    previous.valid = valid;
    validator.stopRequest(element, valid);
   }
  }, param));
  return"pending";
 } elseif (this.pending[element.name]) {
  return"pending";
 }
 return previous.valid;

});

服务器端方法如下(MVC中):

public JsonResult CheckEmail(string UserEmail)
{
 returnnew JsonResult { Data =new { Result =false, Message="Please change the filed" } };
}

我们就可以使用jsonremote来取代remote方法了。当然,remote方法依然可以使用。

6.错误显示规则

var validateOpts = {
 wrapper: "div",// default has no wrapper
 errorClass: "invalid", // the default value is error
 errorElement: "em", // default value is lable
 errorLabelContainer: "#messageBox", // to gather all the error messages
}

以上就是本文的全部内容,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JQuery入门——事件切换之hover()方法应用介绍
Feb 05 Javascript
javascript ie6兼容position:fixed实现思路
Apr 01 Javascript
简介JavaScript中的getUTCFullYear()方法的使用
Jun 10 Javascript
JavaScript生成SQL查询表单的方法
Aug 13 Javascript
JavaScript获取IP获取的是IPV6 如何校验
Jun 12 Javascript
JS代码实现根据时间变换页面背景效果
Jun 16 Javascript
JS简单实现无缝滚动效果实例
Aug 24 Javascript
AngularJS实现网站换肤实例
Feb 19 Javascript
使用jquery给新生的th绑定hover事件的实例
Feb 10 Javascript
基于JavaScript中字符串的match与replace方法(详解)
Dec 04 Javascript
Layer组件多个iframe弹出层打开与关闭及参数传递的方法
Sep 25 Javascript
javascript全局自定义鼠标右键菜单
Dec 08 Javascript
jQuery ajax应用总结
Jun 02 #Javascript
JavaScript判断数字是否为质数的方法汇总
Jun 02 #Javascript
Jquery on方法绑定事件后执行多次的解决方法
Jun 02 #Javascript
EXT中单击button按钮grid添加一行(光标位置可设置)的实例代码
Jun 02 #Javascript
Javascript小技能总结(推荐)
Jun 02 #Javascript
Jquery为DIV添加click事件的简单实例
Jun 02 #Javascript
jquery中取消和绑定hover事件的实现代码
Jun 02 #Javascript
You might like
php录入页面中动态从数据库中提取数据的实现
2006/10/09 PHP
PHP学习散记_编码(json_encode 中文不显示)
2011/11/10 PHP
php中有关合并某一字段键值相同的数组合并的改进
2015/03/10 PHP
php通过array_push()函数添加多个变量到数组末尾的方法
2015/03/18 PHP
PHP 序列化和反序列化函数实例详解
2020/07/18 PHP
[原创]PHP正则删除html代码中a标签并保留标签内容的方法
2017/05/23 PHP
Gird组件 Part-3:范例RSSFeed Viewer
2007/03/10 Javascript
经常用的图片在容器中的水平垂直居中实例
2007/06/10 Javascript
lib.utf.js
2007/08/21 Javascript
JavaScript效率调优经验
2009/06/04 Javascript
js实现网页标题栏闪烁提示效果实例分析
2014/11/20 Javascript
js实现点击切换TAB标签实例
2015/08/21 Javascript
轻松实现JavaScript图片切换
2016/01/12 Javascript
原生js实现鼠标跟随效果
2017/02/28 Javascript
vue中如何去掉空格的方法实现
2018/11/09 Javascript
微信小程序实现slideUp、slideDown滑动效果及点击空白隐藏功能示例
2018/12/11 Javascript
详解Bootstrap 学习(一)入门
2019/04/12 Javascript
了解javascript中变量及函数的提升
2019/05/27 Javascript
Vue中正确使用Element-UI组件的方法实例
2020/10/13 Javascript
JavaScript动态生成表格的示例
2020/11/02 Javascript
[04:45]上海特级锦标赛主赛事第三日TOP10
2016/03/05 DOTA
[32:17]完美世界DOTA2联赛循环赛LBZS vs Forest第二场 10月30日
2020/10/31 DOTA
python 读取文件并把矩阵转成numpy的两种方法
2019/02/12 Python
Python正则表达式实现简易计算器功能示例
2019/05/07 Python
Windows上安装tensorflow  详细教程(图文详解)
2020/02/04 Python
css3+伪元素实现鼠标移入时下划线向两边展开的效果
2017/04/25 HTML / CSS
美体小铺瑞典官方网站:The Body Shop瑞典
2018/01/27 全球购物
英国在线药房:Express Chemist
2019/03/28 全球购物
世界上最大的皮肤科医生拥有和经营的美容网站:LovelySkin
2021/01/03 全球购物
车队司机自我鉴定
2014/03/02 职场文书
未婚证明书模板
2014/10/08 职场文书
2014年初一班主任工作总结
2014/11/08 职场文书
2014年保卫部工作总结
2014/11/21 职场文书
入党积极分子党支部意见
2015/06/02 职场文书
怒海潜将观后感
2015/06/11 职场文书
职业生涯规划书之大学四年
2019/08/07 职场文书