1、需求 做一个内嵌到UTribe(一款Android App)的门生会活动报名体系前端页面,报名士数最少1人最多4人,表单动态增长最多四个,此中队名必填,队长的所有信息必填,队员的QQ、手机号码选填,参赛时间必选。 2、开端设计 这个项目只给了半天时间,而且之前没有在Android端调试页面的经验,而且没有调试结构的机遇,只能一次做完部署上去看看结果如何。 3、问题 本人是小白,以前做表单验证都是在提交之前用js检查一下参数,但这个项目中参数较多,而且同一字段的校验方式差别(队长QQ、手机必填而队员不用),若再用之前的方法工作量显然较大,有没有更好的方法呢?这时间我看到了amazeUI的js验证框架,交互结果不错。 研究了下利用方法: 先将目的表单绑定一个validator函数,然后在必要验证的字段加上属性(required、pattern、mixlength等等),pattern除了HTML5中已有的email、url等正则,还可以自定义,末了添补function submit来确定表单信息都正当之后的操作。然后我把这个框架运用到了自己的项目上,添加了自定义正则表达式 这里的验证可以根据需求添加到对应字段上,如队长的QQ、手机号码添加验证而队员的不用添加。 [code] <input type="text" class="js-pattern-qq" data-validation-message="QQ号不符合规范噢" name="qq" placeholder="输入QQ号" required>[/code] [code] <input type="text" class="js-pattern-mobile" data-validation-message="手机号码不符合规范噢" name="mobile" placeholder="输入手机号码" required>[/code]问题1: 这啥意思呢?仔细一看,原来是表明器认不出你的validator方法把,应该是少了某个js引用,遂导包办理。 问题2: 由于队员表单的信息和队长的很像,但我总不能一条一条append上去吧?这会产生两个问题,第一是工作量大,第二是代码不简洁,维护起来麻烦,遂想到用clone一个写好的div模板的方法来办理。 问题3: 由于要将每个队员的数据整合成json数组的形式传递到后台,在检验请求参数时发现只有队长有gender属性而队员没有,后来发现是由于radio一个name只有一个值,以是要动态改变clone模板的队员的表单的radio的name属性来实现差别队员间gender的差别。 [code] var radios = template.find('input[type=radio]'); radios.each(function(){ $(this).attr('name','gender'+g_index); })[/code]然后就能正常接收差别队员的性别属性了。 问题4: 覆写完submit方法提交表单后,本来以为到这基本完成了,但测试时发现若表单字段不正当,页面会主动革新,提示信息闪现后消失,已填入的数据也没了,这显然不符合利用逻辑。后来发现问题出在 [code] <button type="submit" style="width: 100%;height: 100% " class="am-btn am-btn-default">报名</button>[/code]留意这里button的范例是submit而不是button,submit会在提交后主动革新页面,办理办法很简朴,在validator对象的submit函数中检验参数时,若不正当则return false,如许页面就不会主动革新了。 [code] submit:function(){ var formValidity = this.isFormValid(); if(formValidity){ if(!member.postMembers()){ return false; } }else{ alert("输入信息不正当!"); return false; } }[/code]完成结果展示: amazeui验证遇到的坑 [code] jsp样例: form加上data-am-validator才能使验证生效: <form id="addPopuForm" class="add-popu-form" data-am-validator> <div class="inputItem"> <div class="inputName">姓名</div> <!--required必填,minlength最小长度--> <input type="text" id="name" name="name" class="" required minlength="2" maxlength="64" placeholder="请输入2-64位字符" autocomplete="off"> </div> <div class="inputItem"> <!--required必填--> <div class="inputName">性别</div> <select type="text" id="sex" name="sex" class="" required> <option selected value="">请选择</option> <option value="0">男</option> <option value="1">女</option> </select> </div> <div class="inputItem"> <div class="inputName">年龄</div> <!--required必填,pattern正则表达式验证--> <input type="text" required pattern="^([1-9]\d{0,1}|100|[1]\d{0,2}|200)$" id="age" name="age" class="" placeholder="请输入2-100" autocomplete="off"> </div> </form> js: //留意下面的坑,两个共同才能生效 $("#addPopuForm").validator('destroy');//初始化,销毁之前的验证 $('#addPopuForm').validator({validateOnSubmit: true});//初始化参数,可以有多个,详细见参考文档http://amazeui.org/javascript/validator,提交时验证,共同上面的销毁实现销毁 //重置表单 $("#addPopuForm")[0].reset(); //提交时举行表单验证,formValidity为true通过验证 var formValidity = $('#addPopu').validator('isFormValid'); [/code]到此这篇关于AmazeUI的JS表单验证框架实战示例分享的文章就先容到这了,更多相干AmazeUI的JS表单验证内容请搜索脚本之家以前的文章或继承浏览下面的相干文章,希望大家以后多多支持脚本之家! 来源:https://www.jb51.net/html5/741775.html 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |
|手机版|小黑屋|梦想之都-俊月星空
( 粤ICP备18056059号 )|网站地图
GMT+8, 2025-7-2 02:40 , Processed in 0.035732 second(s), 18 queries .
Powered by Mxzdjyxk! X3.5
© 2001-2025 Discuz! Team.