【jQuery】利用表单的序列化根据name取表单,做表单的验证
在前台做表单的验证的方式有很多种,具体思想是你先要把表单的要验证项里面的值取出来,然后再脚本处进行判断,最后根据判断结果告警,然后给onsubmit="return XX()"那个函数,返回true与false的布尔值。整个过程,把表单的要验证项取出来是关键。在《【JavaScript】表单即时验证,不成功不让提交》(点击打开链接)中利用了id取每一个表单项的属性,这是最基础的,但是如果需要以name的方法取出表单的项呢?此时,你可以利用jQuery的序列化,根据name来取出表单的各个项。
一、基本目标
利用jQuery的序列化,根据name来取出表单的各个项,做表单验证。如下图。如果用户正确输入完表单,则弹出用户输入的所有信息。
二、HTML布局
先贴上这个表单的HTML布局代码。很简单。只是请各位注意到我只是给每一个表单项赋予了name属性,没有id属性。下面的Jquery脚本完全是根据name来取值的。
<!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" /> <script type="text/javascript" src="js/jquery-1.11.1.js"></script> <title>序列化</title> </head> <body> <form action="" method="post" onsubmit="return submitPreprocessing(this)"> <input type="text" name="user" /><br /> <input type="password" name="pwd" /><br /> <input type="password" name="pwd2" /><br /> <select name="nation"> <option value="China">China</option> <option value="England">England</option> <option value="USA">USA</option> </select><br /> r1:<input type="radio" name="r" value="r1" />r2:<input type="radio" name="r" value="r2" /><br /> c1:<input type="checkbox" value="Yes" name="c1" /><br /> <textarea name="ps" rows="2" cols="8" wrap="virtual"></textarea><br /> <input type="submit" value="Go!" /> </form> </body> </html>
三、Jquery脚本
1、整个脚本一开始,得到了form表单之后,先通过serialize()方法取出form中的所有值,serialize()方法的返回值是一个如何get方式提交的字符串,大家在上面的效果图,也可以看到了。之后,首先用split()方法,根据&来划分成数组rawParamArray,数组rawParamArray中的每一个元素都是paramName=paramValue的形式,就是user=sss这种形式。之后对数组rawParamArray进行遍历,遍历到rawParamArray的每一项,再次根据=来划分数组ParamArray,那么得到的数组ParamArray的第一项就是属性名,第二项就是属性值。之后该怎么判断就怎么判断。如果判断某一项判断失败,这一项的布尔值则会演变成false。
2、对于单选框radio、复选框checkbox,如果拿不到某一项的属性名,属性值则意味着这个单选框、复选框根本就没有选!
3、对于密码项,由于要判断与之后的密码项是否输入的一致,因此要同时取到下一个密码项才能判断,如果你觉得烦,可以在确定密码项,设置id,直接用id去取也是没有问题的。
<script> function submitPreprocessing(obj){ var inputTextOK=true; var passwordLength=false; var passwordCheck=false; var radioSelected=false; var checkboxSelected=false; var rawParamArray=$(obj).serialize().split("&"); for(var i=0;i<rawParamArray.length;i++){ var ParamArray=rawParamArray[i].split("="); if((ParamArray[0]=="user")||(ParamArray[0]=="pwd")||(ParamArray[0]=="ps")){ if(ParamArray[1]==""){ inputTextOK=false; } } if((ParamArray[0]=="pwd")){ if(ParamArray[1].length>5){ passwordLength=true; } if(ParamArray[1]+""==(rawParamArray[i+1].split("=")[1]+"")){ passwordCheck=true; } } if((ParamArray[0]=="r")){ radioSelected=true; } if((ParamArray[0]=="c1")){ checkboxSelected=true; } } if(!inputTextOK){ alert("用户名、密码、备注任一为空!"); } if(!passwordLength){ alert("你的密码长度少于6位!"); } if(!passwordCheck){ alert("两次输入的密码不一致!"); } if(!radioSelected){ alert("你的单选框还没有选上!"); } if(!checkboxSelected){ alert("你的c1复选框还没有选上!"); } if(inputTextOK&&passwordLength&&passwordCheck&&radioSelected&&checkboxSelected){ alert("谢谢你的填写"); alert($(obj).serialize()); return true; } else{ alert("你的表单还没有弄好!"); return false; } } </script>
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。