jQuery Validate初步体验(一)


Posted in Javascript onDecember 12, 2015

jQuery 是一个快速、简单的JavaScript library, 它简化了HTML 文件的traversing,事件处理、动画、Ajax 互动,从而方便了网页制作的快速发展。 jQuery 是为改变你编写JavaScript 的方式而设计的。

jQuery Validate 插件为表单提供了强大的验证功能,让客户端表单验证变得更简单。

但是在学习的过程中,我也遇到了疑惑,网上的很多例子貌似都是依赖jquery.metadata.js这个库,然后在标签里写成class=”required remote” 这样的形式,class本身是呈现样式的,现在被附上各种校验的规则,看上去有些乱。那如果不依赖jquery.metadata.js,又该怎么写。

1、只引入jquery.js(具体版本自己选择)和jquery.validate.js

<!DOCTYPE html>
<html>
<head>
<script src="js/jquery.js"></script>
<script src="js/jquery.validate.js"></script>
<script>
 $().ready(function() {
 $("#registerForm").validate();
 });
</script>
</head>
<body>
 <form id="registerForm" method="get" action="">
 <fieldset>
  <p>
  <label for="cusername">用户名</label> 
  <input id="cusername" name="username" type="text" required="true" rangelength="[2,10]">
  </p>
  <p>
  <label for="cpassword">密码</label>
  <input id="cpassword" name="password" type="password" required="true" minlength="6">
  </p>
  <p>
  <label for="cconfirmpassword">确认密码</label> 
  <input id="cconfirmpassword" name="confirmpassword" type="password" required="true" equalTo="#cpassword">
  </p>
  <p>
  <label for="cemail">邮箱</label> 
  <input id="cemail" name="email" required="true" email="true"> </input>
  </p>
  <p>
  <input type="submit" value="提交">
  </p>
 </fieldset>
 </form>
</body>
</html>

事实证明,只引入上面的两个JS文件也能完成简单的表单验证。

2、不过由于默认的提示信息是英文的,为了能有一个友好的提示,所以,接下来要做的就是让提示信息显示成中文了。

方法一、通过javascript自定义提示信息。

<!DOCTYPE html>
<html>
<head>
<script src="js/jquery.js"></script>
<script src="js/jquery.validate.js"></script>
<script>
 $().ready(function() {
 $("#registerForm").validate({
  rules : {
  username : {
   required : true,
   rangelength:[2,10]
  },
  password : {
   required : true,
   minlength:6
  },
  confirmpassword : {
   required : true,
   equalTo:"#cpassword"
  },
  email : {
   required : true,
   email : true
  }
  },
  messages : {
  username : {
   required : '请输入姓名',
   rangelength:'长度在 {0} 到 {1} 之间'
  },
  password : {
   required : '请输入密码',
   minlength:'密码不能少于 {0}位'
  },
  confirmpassword : {
   required : '请再次输入密码',
   equalTo:'两次输入的密码不一致'
  },
  email : {
   required :'请输入邮箱',
   email : '请输入有效的电子邮件地址'
  }
  }
 });
 });
</script>
</head>
<body>
 <form id="registerForm" method="get" action="">
 <fieldset>
  <p>
  <label for="cusername">用户名</label> 
  <input id="cusername" name="username" type="text"/>
  </p>
  <p>
  <label for="cpassword">密码</label> 
  <input id="cpassword" name="password" type="password"/>
  </p>
  <p>
  <label for="cconfirmpassword">确认密码</label> 
  <input id="cconfirmpassword" name="confirmpassword" type="password"/>
  </p>
  <p>
  <label for="cemail">邮箱</label>
  <input id="cemail" name="email" type="email"/>
  </p>
  <p>
  <input type="submit" value="提交">
  </p>
 </fieldset>
 </form>
</body>
</html>

首先这里有一个方法调用: $("#registerForm").validate([options]) ,这是用来验证选择的表单,方法的参数是可选项,可以输入0个或者多个键值对(key/value),这个方法是为了处理例如:submit , focus ,  keyup , blur, click 触发验证的,对象是整个表单的元素,或者是单个元素,使用 rules 和 messages 定义验证的元素,使用errorClass, errorElement, wrapper, errorLabelContainer, errorContainer, showErrors, success, errorPlacement, highlight, unhighlight, ignoreTitle去控制非法元素的错误信息显示。其中rules里也可以输入0个或者多个键值对,他的key对应的是元素的name属性值,例如username,confirmpassword等等。而他的value里则是一些验证规则。messages同rules一样可以输入0个或者多个键值对,他的key也是对应的元素的name属性值,而他的value里则是验证错误的提示信息。简而言之,rules{}中定义验证规则的方法。 messages{}中定义错误输出。

上面有一点需要注意的就是  equalTo:"#cpassword",这个键值对里的value是元素的ID值(如果注意到#号就应该能察觉到)。

通过上面的写法,你就可以自定义提示信息了。或许你会有疑问了,难道我每次验证表单的时候都要重新自定义提示信息吗?当然不是了,你还可以Ctrl C+Ctrl V。这当然是玩笑话。。。不过,接下来的方法二会解决你的疑问。

方法二、自定义一份提示信息,然后保存成JS文件。把他作为模板,然后在需要的页面直接引入就行。我是从网上下载了一份。

(function( factory ) {
 if ( typeof define === "function" && define.amd ) {
 define( ["jquery", "../jquery.validate"], factory );
 } else {
 factory( jQuery );
 }
}(function( $ ) {
/*
 * Translated default messages for the jQuery validation plugin.
 * Locale: ZH (Chinese, 中文 (Zhōngwén), 汉语, ?h?)
 */
$.extend($.validator.messages, {
 required: "这是必填字段",
 remote: "请修正此字段",
 email: "请输入有效的电子邮件地址",
 url: "请输入有效的网址",
 date: "请输入有效的日期",
 dateISO: "请输入有效的日期 (YYYY-MM-DD)",
 number: "请输入有效的数字",
 digits: "只能输入数字",
 creditcard: "请输入有效的信用卡号码",
 equalTo: "你的输入不相同",
 extension: "请输入有效的后缀",
 maxlength: $.validator.format("最多可以输入 {0} 个字符"),
 minlength: $.validator.format("最少要输入 {0} 个字符"),
 rangelength: $.validator.format("请输入长度在 {0} 到 {1} 之间的字符串"),
 range: $.validator.format("请输入范围在 {0} 到 {1} 之间的数值"),
 max: $.validator.format("请输入不大于 {0} 的数值"),
 min: $.validator.format("请输入不小于 {0} 的数值")
});
}));

页面的代码和JV1.HTML几乎是一模一样,只是多引入了一份JS文件。

<!DOCTYPE html>
<html>
<head>
<script src="js/jquery.js"></script>
<script src="js/jquery.validate.js"></script>
<script src="js/messages_zh.js"></script> 
<script>
 $().ready(function() {
 $("#registerForm").validate();
 });
</script>
</head>
<body>
 <form id="registerForm" method="get" action="">
 <fieldset>
  <p>
  <label for="cusername">用户名</label> 
  <input id="cusername" name="username" type="text" required="true" rangelength="[2,10]">
  </p>
  <p>
  <label for="cpassword">密码</label>
  <input id="cpassword" name="password" type="password" required="true" minlength="6">
  </p>
  <p>
  <label for="cconfirmpassword">确认密码</label> 
  <input id="cconfirmpassword" name="confirmpassword" type="password" required="true" equalTo="#cpassword">
  </p>
  <p>
  <label for="cemail">邮箱</label> 
  <input id="cemail" name="email" required="true" email="true"> </input>
  </p>
  <p>
  <input type="submit" value="提交">
  </p>
 </fieldset>
 </form>
</body>
</html>

方法一和方法二并不互斥,两种方法是可以结合使用的。你可以先用方法二保存一份比较通用的模板,然后再用方法一去按具体情况来自定义提示。

以上就是我今天下午学习的收获了。据说在新版本中,又有了新的写法,既不需要依赖上面提到的jquery.metadata.js库,也不需要通过javascript自定义提示信息,而是在标签里以 data-rule-验证规则、data-msg-提示信息 这样的格式来重新定义。跃跃欲试......

下面是官网提供的默认校验规则。

(1)required:true 必输字段
(2)remote:"check.php" 使用ajax方法调用check.php验证输入值
(3)email:true 必须输入正确格式的电子邮件
(4)url:true 必须输入正确格式的网址
(5)date:true 必须输入正确格式的日期
(6)dateISO:true 必须输入正确格式的日期(ISO),例如:2009-06-23,1998/01/22 只验证格式,不验证有效性
(7)number:true 必须输入合法的数字(负数,小数)
(8)digits:true 必须输入整数
(9)creditcard: 必须输入合法的信用卡号
(10)equalTo:"#field" 输入值必须和#field相同
(11)accept: 输入拥有合法后缀名的字符串(上传文件的后缀)
(12)maxlength:5 输入长度最多是5的字符串(汉字算一个字符)
(13)minlength:10 输入长度最小是10的字符串(汉字算一个字符)
(14)rangelength:[5,10] 输入长度必须介于 5 和 10 之间的字符串")(汉字算一个字符)
(15)range:[5,10] 输入值必须介于 5 和 10 之间
(16)max:5 输入值不能大于5
(17)min:10 输入值不能小于10

好了,摸索了近两个小时,我的第一篇随笔到这也算是完成了。同时希望能给大家带来灵感。

下篇文章给大家介绍jQuery Validate初步体验(二),一起学习吧。

Javascript 相关文章推荐
JS 表单验证大全
Nov 23 Javascript
jq选项卡鼠标延迟的插件实例
May 13 Javascript
JS写的贪吃蛇游戏(个人练习)
Jul 08 Javascript
jquery实现动静态条形统计图
Aug 17 Javascript
使用jQuery判断浏览器滚动条位置的方法
May 30 Javascript
Bootstrap Navbar Component实现响应式导航
Oct 08 Javascript
JS基于面向对象实现的多个倒计时器功能示例
Feb 28 Javascript
老生常谈js中的MVC
Jul 25 Javascript
Angularjs上传图片实例详解
Aug 06 Javascript
vuex 使用文档小结篇
Jan 11 Javascript
JQuery animate动画应用示例
May 14 jQuery
echarts柱状图背景重叠组合而非并列的实现代码
Dec 10 Javascript
jQuery Uploadify 上传插件出现Http Error 302 错误的解决办法
Dec 12 #Javascript
jQuery同步提交示例代码
Dec 12 #Javascript
JavaScript匿名函数之模仿块级作用域
Dec 12 #Javascript
自定义Angular指令与jQuery实现的Bootstrap风格数据双向绑定的单选与多选下拉框
Dec 12 #Javascript
利用jQuery实现WordPress中@的ID悬浮显示评论内容
Dec 11 #Javascript
jQuery入门之层次选择器实例简析
Dec 11 #Javascript
jQuery使用$.ajax提交表单完整实例
Dec 11 #Javascript
You might like
php过滤所有恶意字符(批量过滤post,get敏感数据)
2014/03/18 PHP
ThinkPHP模板IF标签用法详解
2014/07/01 PHP
浅谈php命令行用法
2015/02/04 PHP
7个鲜为人知却非常实用的PHP函数
2015/07/01 PHP
jQuery ajax+PHP实现的级联下拉列表框功能示例
2019/02/12 PHP
thinkphp5 + ajax 使用formdata提交数据(包括文件上传) 后台返回json完整实例
2020/03/02 PHP
javaScript(JS)替换节点实现思路介绍
2013/04/17 Javascript
jquery实现图片滚动效果的简单实例
2013/11/23 Javascript
Javascript快速排序算法详解
2014/12/03 Javascript
javascript笛卡尔积算法实现方法
2015/04/08 Javascript
js实现密码强度检测【附示例】
2016/03/30 Javascript
详解如何将angular-ui的图片轮播组件封装成一个指令
2017/05/09 Javascript
JS实现多级菜单中当前菜单不随页面跳转样式而发生变化
2017/05/30 Javascript
AngularJS实现表单验证功能详解
2017/10/12 Javascript
浅谈vue中慎用style的scoped属性
2017/11/28 Javascript
用Cordova打包Vue项目的方法步骤
2019/02/02 Javascript
CKEditor 4.4.1 添加代码高亮显示插件功能教程【使用官方推荐Code Snippet插件】
2019/06/14 Javascript
vue移动端使用canvas签名的实现
2020/01/15 Javascript
vue学习笔记之过滤器的基本使用方法实例分析
2020/02/01 Javascript
vue+element实现图片上传及裁剪功能
2020/06/29 Javascript
微信小程序实现多行文字滚动
2020/11/18 Javascript
[01:48:04]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Elephant BO3 第一场 2月7日
2021/03/11 DOTA
python对日志进行处理的实例代码
2018/10/06 Python
Django实现网页分页功能
2019/10/31 Python
pip install 使用国内镜像的方法示例
2020/04/03 Python
python 将视频 通过视频帧转换成时间实例
2020/04/23 Python
OpenCV 之按位运算举例解析
2020/06/19 Python
Otticanet澳大利亚:最顶尖的世界名牌眼镜, 能得到打折季的价格
2018/08/23 全球购物
在weblogic中发布ejb需涉及到哪些配置文件
2012/01/17 面试题
门卫工作岗位职责
2013/12/17 职场文书
前台文员个人求职信范文
2014/01/05 职场文书
40岁生日感言
2014/02/15 职场文书
革命英雄事迹演讲稿
2014/09/13 职场文书
营业员岗位职责范本
2015/04/14 职场文书
小学运动会通讯稿
2015/07/18 职场文书
安全学习心得体会范文
2016/01/18 职场文书