前端表单验证(AmazeUI的JS表单验证框架实战示例分享)
前端表单验证
AmazeUI的JS表单验证框架实战示例分享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、手机号码添加验证而队员的不用添加。
<input type="text" class="js-pattern-qq" data-validation-message="QQ号不符合规范噢" name="qq" placeholder="输入QQ号" required>
<input type="text" class="js-pattern-mobile" data-validation-message="手机号码不符合规范噢" name="mobile" placeholder="输入手机号码" required>
问题1:
这啥意思呢?仔细一看,原来是解释器认不出你的validator方法把,应该是少了某个js引用,遂导包解决。
问题2:
由于队员表单的信息和队长的很像,但我总不能一条一条append上去吧?这会产生两个问题,第一是工作量大,第二是代码不简洁,维护起来麻烦,遂想到用clone一个写好的li模板的方法来解决。
问题3:
由于要将每个队员的数据整合成json数组的形式传递到后台,在检验请求参数时发现只有队长有gender属性而队员没有,后来发现是因为radio一个name只有一个值,所以要动态改变clone模板的队员的表单的radio的name属性来实现不同队员间gender的差异。
var radios = template.find('input[type=radio]'); radios.each(function(){ $(this).attr('name','gender'+g_index); })
然后就能正常接收不同队员的性别属性了。
问题4:
覆写完submit方法提交表单后,原本以为到这基本完成了,但测试时发现若表单字段不合法,页面会自动刷新,提示信息闪现后消失,已填入的数据也没了,这显然不符合使用逻辑。后来发现问题出在
<button type="submit" style="width: 100%;height: 100% " class="am-btn am-btn-default">报名</button>
注意这里button的类型是submit而不是button,submit会在提交后自动刷新页面,解决办法很简单,在validator对象的submit函数中检验参数时,若不合法则return false,这样页面就不会自动刷新了。
submit:function(){ var formValidity = this.isFormValid(); if(formValidity){ if(!member.postMembers()){ return false; } }else{ alert("输入信息不合法!"); return false; } }
完成效果展示:
amazeui验证遇到的坑
jsp样例: form加上data-am-validator才能使验证生效: <form id="addPopuForm" class="add-popu-form" data-am-validator> <li class="inputItem"> <li class="inputName">姓名</li> <!--required必填,minlength最小长度--> <input type="text" id="name" name="name" class="" required minlength="2" maxlength="64" placeholder="请输入2-64位字符" autocomplete="off"> </li> <li class="inputItem"> <!--required必填--> <li class="inputName">性别</li> <select type="text" id="sex" name="sex" class="" required> <option selected value="">请选择</option> <option value="0">男</option> <option value="1">女</option> </select> </li> <li class="inputItem"> <li class="inputName">年龄</li> <!--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"> </li> </form> js: //注意下面的坑,两个配合才能生效 $("#addPopuForm").validator('destroy');//初始化,销毁之前的验证 $('#addPopuForm').validator({validateOnSubmit: true});//初始化参数,可以有多个,具体见参考文档http://amazeui.org/javascript/validator,提交时验证,配合上面的销毁实现销毁 //重置表单 $("#addPopuForm")[0].reset(); //提交时进行表单验证,formValidity为true通过验证 var formValidity = $('#addPopu').validator('isFormValid');
到此这篇关于AmazeUI的JS表单验证框架实战示例分享的文章就介绍到这了,更多相关AmazeUI的JS表单验证内容请搜索开心学习网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持开心学习网!
- amaze如何创建作品(AmazeUI 网格的实现示例)
- amaze开发者(AmazeUI中各种的导航式菜单与解决方法)
- 前端表单验证(AmazeUI的JS表单验证框架实战示例分享)
- 导航app开发的技术(AmazeUI导航的示例代码)
- amazeui图标(AmazeUI 折叠面板的实现代码)
- amazeui怎么设置侧边栏(AmazeUI 等分网格的实现示例)
- amaze软件(amazeui时间组件的实现示例)
- ui页面动效怎么落地开发(AmazeUI 点击元素显示全屏的实现)
- 自定义ui组件的三个重要方法(AmazeUI 面板的实现示例)
- 前端树结构数据很多怎么展示(amazeui树节点自动展开折叠面板并选中第一个树节点的实现)
- 2020app前端ui框架(amazeui页面分析之登录页面的示例代码)
- 后端ui框架排名(前后端结合实现amazeUI分页效果)
- 前端模态框数据(amazeui模态框弹出后立马消失并刷新页面)
- 小程序推荐ui库(AmazeUI 列表的实现示例)
- 前端轮播图效果(AmazeUI图片轮播效果的示例代码)
- ui界面的测试用例(AmazeUI 模态窗口的实现代码)
- 8月再见 9月你好(8月再见)
- 魔兽世界 设计师爆料,原始版本并无PVP,跨阵营属于返璞归真(魔兽世界设计师爆料)
- 吐槽完《弧光大作战》之后,我们和设计师聊了聊魔兽首款手游的立项初衷和未来(吐槽完弧光大作战之后)
- 魔兽争霸3自定义战役少年杰雷 2(魔兽争霸3自定义战役少年杰雷)
- 今日菜价 芥兰涨幅最高 1.33 ,花菜降幅最高 3.10(今日菜价芥兰涨幅最高)
- 今日菜价 椰菜涨幅最高 3.25 ,水空心菜降幅最高 2.58(今日菜价椰菜涨幅最高)
热门推荐
- dedecms命名规则(DEDECMS织梦文章文档属性增加推荐特荐图标)
- phpstudy安装教程详解学习(phpstudy下载安装简明图文教程)
- navicat怎么和mysql连接(Navicat Premium远程连接MySQL数据库的方法)
- angular兄弟组件调用方法(Angular封装WangEditor富文本组件的方法)
- dedecms会员入驻(dedecms会员注册成功后直接跳转到验证的邮箱地址)
- docker进入容器的命令(Docker 最常用的镜像命令和容器命令详解)
- python直接查询mongodb(pymongo中聚合查询的使用方法)
- 织梦cms内容模型管理详解(织梦CMS系统TAG标签页面包屑导航的调用方法)
- html em标签
- python关闭程序强制退出线程(python多线程调用exit无法退出的解决方法)