jquery實(shí)現(xiàn)表單驗(yàn)證簡(jiǎn)單實(shí)例演示
本文實(shí)例講述了jquery實(shí)現(xiàn)表單驗(yàn)證代碼。分享給大家供大家參考。具體如下:
運(yùn)行效果截圖如下:
具體代碼如下:
直接上插件實(shí)現(xiàn)代碼了,圍繞代碼進(jìn)行講解比較容易點(diǎn):
/* 描述:基于jquery的表單驗(yàn)證插件。 */ (function ($) { $.fn.checkForm = function (options) { var root = this; //將當(dāng)前應(yīng)用對(duì)象存入root var isok = false; //控制表單提交的開(kāi)關(guān) var pwd1; //密碼存儲(chǔ) var defaults = { //圖片路徑 img_error: "img/error.gif", img_success: "img/success.gif", //提示信息 tips_success: '', //驗(yàn)證成功時(shí)的提示信息,默認(rèn)為空 tips_required: '不能為空', tips_email: '郵箱地址格式有誤', tips_num: '請(qǐng)?zhí)顚?xiě)數(shù)字', tips_chinese: '請(qǐng)?zhí)顚?xiě)中文', tips_mobile: '手機(jī)號(hào)碼格式有誤', tips_idcard: '身份證號(hào)碼格式有誤', tips_pwdequal: '兩次密碼不一致', //正則 reg_email: /^\w+\@[a-zA-Z0-9]+\.[a-zA-Z]{2,4}$/i, //驗(yàn)證郵箱 reg_num: /^\d+$/, //驗(yàn)證數(shù)字 reg_chinese: /^[\u4E00-\u9FA5]+$/, //驗(yàn)證中文 reg_mobile: /^1[3458]{1}[0-9]{9}$/, //驗(yàn)證手機(jī) reg_idcard: /^\d{14}\d{3}?\w$/ //驗(yàn)證身份證 }; //不為空則合并參數(shù) if(options) $.extend(defaults, options); //獲取(文本框,密碼框,多行文本框),當(dāng)失去焦點(diǎn)時(shí),對(duì)其進(jìn)行數(shù)據(jù)驗(yàn)證 $(":text,:password,textarea", root).each(function () { $(this).blur(function () { var _validate = $(this).attr("check"); //獲取check屬性的值 if (_validate) { var arr = _validate.split(' '); //用空格將其拆分成數(shù)組 for (var i = 0; i < arr.length; i++) { //逐個(gè)進(jìn)行驗(yàn)證,不通過(guò)跳出返回false,通過(guò)則繼續(xù) if (!check($(this), arr[i], $(this).val())) return false; else continue; } } }) }) //表單提交時(shí)執(zhí)行驗(yàn)證,與上面的方法基本相同,只不過(guò)是在表單提交時(shí)觸發(fā) 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; //驗(yàn)證不通過(guò)阻止表單提交,開(kāi)關(guān)false return; //跳出 } } } }); } //判斷當(dāng)前對(duì)象是否為表單,如果是表單,則提交時(shí)要進(jìn)行驗(yàn)證 if (root.is("form")) { root.submit(function () { _onSubmit(); return isok; }) } //驗(yàn)證方法 var check = function (obj, _match, _val) { //根據(jù)驗(yàn)證情況,顯示相應(yīng)提示信息,返回相應(yīng)的值 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; //實(shí)時(shí)獲取存儲(chǔ)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);
先來(lái)說(shuō)一說(shuō)實(shí)現(xiàn)原理:
首先定義好正則,和相應(yīng)的提示信息,
加上自定義check屬性,
然后獲取check屬性的值,多個(gè)值用空格分開(kāi)。利用split()將其拆分為數(shù)組,在逐個(gè)調(diào)用check()方法進(jìn)行驗(yàn)證。
之后通過(guò)驗(yàn)證的返回值來(lái)確定顯示的信息。
這里有兩個(gè)驗(yàn)證是比較特別的,就是:
1.驗(yàn)證是否為空 (required)
2.兩次密碼是否一致 (pwd2)
這兩個(gè)都沒(méi)有用到正則,因?yàn)楦揪陀貌簧稀?兩次密碼是否一致 ,單獨(dú)寫(xiě)了個(gè)方法 pwdEqual();
插件里的驗(yàn)證正則我只寫(xiě)了幾個(gè) ,如果不夠用可以自行擴(kuò)展添加。
擴(kuò)展只需3步:
1.添加正則,
2.添加相應(yīng)提示信息,
3.check()方法中添加相應(yīng) case 處理
插件使用說(shuō)明:
1.給表單下要進(jìn)行驗(yàn)證的文本框,密碼框 ,多行文本框加上自定義check屬性
2.多個(gè)格式驗(yàn)證用空格間隔,如(同時(shí)驗(yàn)證必填和郵箱): check="required email"
3.如果要驗(yàn)證兩次密碼是否一致,則pwd1和pwd2一起使用,如下圖:
pwd1存儲(chǔ)第一次輸入的值,pwd2存儲(chǔ)第二次輸入的值,如果你只用pwd1還好,但如果只用了pwd2,則驗(yàn)證是始終無(wú)法通過(guò)的。
下面給出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>表單驗(yàn)證插件</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> 確認(rèn)密碼:<input type="password" check="required pwd2" /> </li> <li> 手機(jī):<input type="text" name="num" check="required mobile" /> </li> <li> 數(shù)字:<input type="text" name="num" check="required num" /> </li> <li> 地址:<textarea cols="5" rows="5" check="required"></textarea> </li> <li> 不加check驗(yàn)證的文本框:<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>
示例效果圖片:
示例代碼,成功提交是會(huì)跳轉(zhuǎn)到success.html頁(yè)面的,因此你要自己創(chuàng)建個(gè)success.html,里面可以什么都不寫(xiě)。
但是,只要有一個(gè)驗(yàn)證不通過(guò),就不會(huì)成功跳轉(zhuǎn)。
另外,你或許還需要2張圖片:
//圖片路徑
img_error: "img/error.gif",
img_success: "img/success.gif",
上傳在這了,自己右鍵另存為吧。
本文已被整理到了《jquery表單驗(yàn)證大全》 ,歡迎大家學(xué)習(xí)閱讀。
以上就是本文的全部?jī)?nèi)容,希望能夠幫助大家找更好的掌握jquery驗(yàn)證碼的實(shí)現(xiàn)方法。
- jquery validate.js表單驗(yàn)證的基本用法入門(mén)
- jquery表單驗(yàn)證使用插件formValidator
- 使用 jQuery 實(shí)現(xiàn)表單驗(yàn)證功能
- 基于Jquery實(shí)現(xiàn)表單驗(yàn)證
- jQuery 表單驗(yàn)證插件formValidation實(shí)現(xiàn)個(gè)性化錯(cuò)誤提示
- jQuery實(shí)現(xiàn)用戶注冊(cè)的表單驗(yàn)證示例
- jquery實(shí)現(xiàn)表單驗(yàn)證并阻止非法提交
- jquery 實(shí)現(xiàn)表單驗(yàn)證功能代碼(簡(jiǎn)潔)
- jquery表單驗(yàn)證插件(jquery.validate.js)的3種使用方式
- jQuery插件Validate實(shí)現(xiàn)自定義表單驗(yàn)證
- jQuery實(shí)現(xiàn)高度靈活的表單驗(yàn)證功能示例【無(wú)UI】
相關(guān)文章
jQuery 獲取對(duì)象 根據(jù)屬性、內(nèi)容匹配, 還有表單元素匹配
jQuery 練習(xí) 獲取對(duì)象(3) - 根據(jù)屬性、內(nèi)容匹配, 還有表單元素匹配2010-05-05jQuery實(shí)現(xiàn)可拖拽的許愿墻效果【附demo源碼下載】
這篇文章主要介紹了jQuery實(shí)現(xiàn)可拖拽的許愿墻效果,可實(shí)現(xiàn)拖拽圖片與層疊顯示功能,涉及jQuery插件的簡(jiǎn)單使用,并附帶demo源碼供讀者下載參考,需要的朋友可以參考下2016-09-09詳談jQuery Ajax(load,post,get,ajax)的用法
下面小編就為大家?guī)?lái)一篇詳談jQuery Ajax(load,post,get,ajax)的用法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-03-03Jquery動(dòng)態(tài)更改一張位圖的src與Attr的使用
用Jquery想動(dòng)態(tài)更改一張位圖的src發(fā)現(xiàn)css不好用而attr貌似是能操作所有屬性,包括Jquery未封裝的屬性,具體實(shí)現(xiàn)如下,感興趣的朋友可以參考下2013-07-07jQuery實(shí)現(xiàn)TAB選項(xiàng)卡切換特效簡(jiǎn)單演示
這篇文章主要為大家詳細(xì)介紹了jQuery實(shí)現(xiàn)TAB選項(xiàng)卡切換特效簡(jiǎn)單演示,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-03-03jquery通過(guò)closest選擇器修改上級(jí)元素的方法
這篇文章主要介紹了jquery通過(guò)closest選擇器修改上級(jí)元素的方法,實(shí)例分析了jQuery中closest選擇器的使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-03-03jQuery插件HighCharts繪制2D餅圖效果示例【附demo源碼下載】
這篇文章主要介紹了jQuery插件HighCharts繪制2D餅圖效果,結(jié)合完整實(shí)例形式分析了jQuery使用HighCharts插件繪制餅圖效果的操作步驟與相關(guān)實(shí)現(xiàn)技巧,并附帶demo源碼供讀者下載參考,需要的朋友可以參考下2017-03-03基于jquery實(shí)現(xiàn)左右按鈕點(diǎn)擊的圖片切換效果
這篇文章主要介紹了基于jquery實(shí)現(xiàn)左右按鈕點(diǎn)擊的圖片切換效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2015-11-11