自己编写jQuery插件表单验证

吐个嘈先:最近状态不咋滴,真是什么都不想干,不想上班,做什么都没动力,觉得没意思。不想这样,不想这样,快让这种情绪消失吧,忽忽....

表单验证在项目中用的还是比较多的,公司当前正在做的项目就要用到,故此写了此插件,先给大家看下在项目中应用的效果图吧:

直接上插件实现代码了,围绕代码进行讲解比较容易点:

/*

描述:基于jquery的表单验证插件。

时间:2014-8-3

作者:similar(281542025@qq.com)

*/

(function ($) {

$.fn.checkForm = function (options) {

var root = this; //将当前应用对象存入root

var isok = false; //控制表单提交的开关

var pwd1; //密码存储

var defaults = {

//图片路径

img_error: "img/error.gif",

img_success: "img/success.gif",

//提示信息

tips_success: '', //验证成功时的提示信息,默认为空

tips_required: '不能为空',

tips_email: '邮箱地址格式有误',

tips_num: '请填写数字',

tips_chinese: '请填写中文',

tips_mobile: '手机号码格式有误',

tips_idcard: '身份证号码格式有误',

tips_pwdequal: '两次密码不一致',

//正则

reg_email: /^\w+\@[a-zA-Z0-9]+\.[a-zA-Z]{2,4}$/i,  //验证邮箱

reg_num: /^\d+$/,                                  //验证数字

reg_chinese: /^[\u4E00-\u9FA5]+$/,                 //验证中文

reg_mobile: /^1[3458]{1}[0-9]{9}$/,                //验证手机

reg_idcard: /^\d{14}\d{3}?\w$/                     //验证身份证

};

//不为空则合并参数

if(options)

$.extend(defaults, options);

//获取(文本框,密码框,多行文本框),当失去焦点时,对其进行数据验证

$(":text,:password,textarea", root).each(function () {

$(this).blur(function () {

var _validate = $(this).attr("check"); //获取check属性的值

if (_validate) {

var arr = _validate.split(' '); //用空格将其拆分成数组

for (var i = 0; i < arr.length; i++) {

//逐个进行验证,不通过跳出返回false,通过则继续

if (!check($(this), arr[i], $(this).val()))

return false;

else

continue;

}

}

})

})

//表单提交时执行验证,与上面的方法基本相同,只不过是在表单提交时触发

function _onSubmit() {

isok = true;

$(":text,:password,textarea", root).each(function () {

var _validate = $(this).attr("check");

if (_validate) {

var arr = _validate.split(' ');

for (var i = 0; i < arr.length; i++) {

if (!check($(this), arr[i], $(this).val())) {

isok = false; //验证不通过阻止表单提交,开关false

return; //跳出

}

}

}

});

}

//判断当前对象是否为表单,如果是表单,则提交时要进行验证

if (root.is("form")) {

root.submit(function () {

_onSubmit();

return isok;

})

}

//验证方法

var check = function (obj, _match, _val) {
       //根据验证情况,显示相应提示信息,返回相应的值

switch (_match) {

case 'required':

return _val ? showMsg(obj, defaults.tips_success, true) : showMsg(obj, defaults.tips_required, false);

case 'email':

return chk(_val, defaults.reg_email) ? showMsg(obj, defaults.tips_success, true) : showMsg(obj, defaults.tips_email, false);

case 'num':

return chk(_val, defaults.reg_num) ? showMsg(obj, defaults.tips_success, true) : showMsg(obj, defaults.tips_num, false);

case 'chinese':

return chk(_val, defaults.reg_chinese) ? showMsg(obj, defaults.tips_success, true) : showMsg(obj, defaults.tips_chinese, false);

case 'mobile':

return chk(_val, defaults.reg_mobile) ? showMsg(obj, defaults.tips_success, true) : showMsg(obj, defaults.tips_mobile, false);

case 'idcard':

return chk(_val, defaults.reg_idcard) ? showMsg(obj, defaults.tips_success, true) : showMsg(obj, defaults.tips_idcard, false);

case 'pwd1':

pwd1 = _val; //实时获取存储pwd1值

return true;

case 'pwd2':

return pwdEqual(_val, pwd1) ? showMsg(obj, defaults.tips_success, true) : showMsg(obj, defaults.tips_pwdequal, false);

default:

return true;

}

}

//判断两次密码是否一致(返回bool值)

var pwdEqual = function(val1, val2) {

return val1 == val2 ? true : false;

}

//正则匹配(返回bool值)

var chk = function (str, reg) {

return reg.test(str);

}

//显示信息

var showMsg = function (obj, msg, mark) {

$(obj).next("#errormsg").remove();//先清除

var _html = "<span id='errormsg' style='font-size:13px;color:gray;background:url(" + defaults.img_error + ") no-repeat 0 -1px;padding-left:20px;margin-left:5px;'>" + msg + "</span>";

if (mark)

_html = "<span id='errormsg' style='font-size:13px;color:gray;background:url(" + defaults.img_success + ") no-repeat 0 -1px;padding-left:20px;margin-left:5px;'>" + msg + "</span>";

$(obj).after(_html);//再添加

return mark;

}

}

})(jQuery);

注释已经讲解了大部分内容了,多数人一看就懂了。

实现原理:

  首先定义好正则,和相应的提示信息,

  加上自定义check属性,

  然后获取check属性的值,多个值用空格分开。利用split()将其拆分为数组,在逐个调用check()方法进行验证。

  之后通过验证的返回值来确定显示的信息。

这里有两个验证是比较特别的,就是:

1.验证是否为空 (required)

2.两次密码是否一致 (pwd2)

这两个都没有用到正则,因为根本就用不上。 两次密码是否一致 ,单独写了个方法 pwdEqual();

插件里的验证正则我只写了几个 ,如果不够用可以自行扩展添加。

扩展只需3步:

1.添加正则,

2.添加相应提示信息,

3.check()方法中添加相应 case 处理

插件使用说明:

  1.给表单下要进行验证的文本框,密码框 ,多行文本框加上自定义check属性

  2.多个格式验证用空格间隔,如(同时验证必填和邮箱): check="required email"

  3.如果要验证两次密码是否一致,则pwd1和pwd2一起使用,如下图:

   pwd1存储第一次输入的值,pwd2存储第二次输入的值,如果你只用pwd1还好。

   但如果只用了pwd2,则验证是始终无法通过的。

下面给出DEMO示例代码:

<!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>

<title>表单验证插件</title>

</head>

<body>

<form id="myform" method="post" action="success.html">

<ul>

<li>

邮箱:<input type="text" name="email" check="required email" />

</li>

<li>

密码:<input type="password" check="required pwd1" />

</li>

<li>

确认密码:<input type="password" check="required pwd2" />

</li>

<li>

手机:<input type="text" name="num" check="required mobile" />

</li>

<li>

数字:<input type="text" name="num" check="required num" />

</li>

<li>

地址:<textarea cols="5" rows="5" check="required"></textarea>

</li>

<li>

不加check验证的文本框:<input type="text" name="num" />

</li>

</ul>

<input type="submit" value="提交" />

</form>

<script src="js/jquery-1.4.4.min.js" type="text/javascript"></script>

<script src="js/jquery.similar.checkForm.js" type="text/javascript"></script>

<script type="text/javascript">

$("#myform").checkForm();

</script>

</body>

</html>

示例效果图片:

示例代码,成功提交是会跳转到success.html页面的,因此你要自己创建个success.html,里面可以什么都不写。

但是,只要有一个验证不通过,就不会成功跳转。

另外,你或许还需要2张图片:

//图片路径

img_error: "img/error.gif",

img_success: "img/success.gif",

上传在这了,自己右键另存为吧。

语文没学好,语言组织能力,及表达能力实在是欠缺。自己理解了,却无法很好的讲出来,无奈。

大家如果还有什么不明白的可以留言,或者对上面代码有什么建议的也请留言(讨论出最好结果),又或者发现了bug的,麻烦及时告知,谢谢!

转载于:https://www.cnblogs.com/taofx/p/4139924.html

自己编写jQuery插件之表单验证相关推荐

  1. jQuery 插件 Validation表单验证 使用步骤(详细的)

    之前一直专注于做公司的OA系统,很久没有好好学习了,,,, 下面就开始讲这个插件的使用步骤 1.现在界面引入插件 <script src="jquery.js">< ...

  2. 2013年jQuery Validation Engine 表单验证

    目录(?)[-] options 参数说明可选 使用方法 载入 CSS 文件 载入 JavaScript 文件 给表单加上 ID 给控件加上 ID 及 设置验证类型 设置验证 验证类型 API 方法 ...

  3. jquery validation Engine表单验证

    jQuery Validation Engine 表单验证来源 功能强大的 jQuery 表单验证插件,适用于日常的 E-mail.电话号码.网址等验证及 Ajax 验证,除自身拥有丰富的验证规则外, ...

  4. jQuery Validation Engine 表单验证踩过的一个坑

    jQuery Validation Engine表单验证是一个非常简单好用的前端验证插件,具体的使用手册可以参考: http://code.ciaoca.com/jquery/validation-e ...

  5. Spring MVC和JQuery用于Ajax表单验证

    在本教程中,我们将看到如何使用Ajax和Spring MVC和JQuery在服务器端验证表单. Spring MVC为通过注释驱动的配置采用Ajax提供了非常方便的过程. 我们将使用此注释驱动的配置以 ...

  6. bootstrap html5 表单验证,基于Bootstrap+jQuery.validate实现表单验证

    这大概是一种惯例,学习前台后台最开始接触的业务都是用户注册和登录.现在社会坚持以人为本的理念,在网站开发过程同样如此.User是我们面对较多的对象,也是较核心的对象.最开始的用户注册和登陆这块,也就尤 ...

  7. Jquery中使用Validate插件使表单验证更加简单

    场景 效果 介绍 jQuery Validate 插件为表单提供了强大的验证功能,让客户端表单验证变得更简单,同时提供了大量的定制选项,满足应用程序各种需求.该插件捆绑了一套有用的验证方法,包括 UR ...

  8. jquery的validate表单验证表单注册插件

    这款插件非常好用! 首先导入插件: <script src="js/jquery.validate.min.js" type="text/javascript&qu ...

  9. 使用 jQuery Validate 进行表单验证

    jQuery Validate简介 jQuery Validate 插件提供了强大的表单验证功能,能够让客户端表单验证变得更简单,同时它还提供了大量的可定制化选项,以满足应用程序的各种需求.该插件捆绑 ...

最新文章

  1. 事务隔离机制原理深入分析以及MySQL不同隔离级别分场景下实验对比
  2. 时间日期格式转换_JAVA
  3. 会导致所有者权益减少的项目是_处置固定资产而发生的净损失为什么会导致所有者权益减少...
  4. 基于GPU的K-Means聚类算法
  5. 数据分析常用Python库:数值计算、可视化、机器学习等领域
  6. 论文浅尝 | DeCLUTR: 无监督文本表示的深度对比学习
  7. [程序猿感悟] [悟] 两篇不错的文章 (转载自 stay4it )
  8. 【云速建站】后台配置邮费
  9. python操作mysql,增,删,改,查
  10. 字节跳动面试真题:java程序设计基础教程
  11. 交互式数据可视化的优势
  12. 1.1 API : LinearRegression、Ridge、LASSO、ElasticNet
  13. Acrobat Pro DC 教程,如何将纸质文档转换为可搜索的 PDF 文件?
  14. 20130331java语言基础学习笔记-语句_breakcontinue
  15. java基于微信小程序的学习打卡系统 uniapp 小程序
  16. Linux网络协议栈
  17. RNA甲基化修饰种类
  18. Android USB电源管理
  19. 免费主机 虚拟主机 香港虚拟主机
  20. 创建一个简单的后台教务管理系统,包含动态增删改查学生,年级和课程信息及查看登录日志等功能,包含表单验证.

热门文章

  1. 设计模式--依然创建者
  2. [转]如何将属性表嵌入对话框中显示
  3. cuda入门——改良第一个 CUDA程序
  4. LINQ体验(6)——LINQ to SQL语句之Join和Order By
  5. [转]SQL Server 索引基础知识(2)----聚集索引,非聚集索引
  6. RTL8111H-CG规格书 DATASHEET
  7. MySQL(2)数据库管理
  8. 云栖首日:智物智造宣布3年10亿目标
  9. 对话李飞飞,揭秘国际体育赛事风“云”背后的黑科技
  10. EDGE X Kubernetes Meetup·杭州站:云原生在边缘的实践与应用