AmazeUI的JS表单验证框架实战示例分享


Posted in HTML / CSS onAugust 21, 2020

1、需求

做一个内嵌到UTribe(一款Android App)的学生会活动报名系统前端页面,报名人数最少1人最多4人,表单动态增加最多四个,其中队名必填,队长的所有信息必填,队员的QQ、手机号码选填,参赛时间必选。

2、初步设计

这个项目只给了半天时间,而且之前没有在Android端调试页面的经验,而且没有调试布局的机会,只能一次做完部署上去看看效果如何。

3、问题

本人是小白,以前做表单验证都是在提交之前用js检查一下参数,但这个项目中参数较多,而且同一字段的校验方式不同(队长QQ、手机必填而队员不用),若再用之前的方法工作量显然较大,有没有更好的方法呢?这时候我看到了amazeUI的js验证框架,交互效果不错。

AmazeUI的JS表单验证框架实战示例分享

研究了下使用方法:

AmazeUI的JS表单验证框架实战示例分享

先将目标表单绑定一个validator函数,然后在需要验证的字段加上属性(required、pattern、mixlength等等),pattern除了HTML5中已有的email、url等正则,还可以自定义,最后填充function submit来确定表单信息都合法之后的操作。然后我把这个框架运用到了自己的项目上,添加了自定义正则表达式

AmazeUI的JS表单验证框架实战示例分享

这里的验证可以根据需求添加到对应字段上,如队长的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:

AmazeUI的JS表单验证框架实战示例分享

这啥意思呢?仔细一看,原来是解释器认不出你的validator方法把,应该是少了某个js引用,遂导包解决。

AmazeUI的JS表单验证框架实战示例分享

问题2:

由于队员表单的信息和队长的很像,但我总不能一条一条append上去吧?这会产生两个问题,第一是工作量大,第二是代码不简洁,维护起来麻烦,遂想到用clone一个写好的div模板的方法来解决。

问题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的JS表单验证框架实战示例分享

AmazeUI的JS表单验证框架实战示例分享

amazeui验证遇到的坑

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');

到此这篇关于AmazeUI的JS表单验证框架实战示例分享的文章就介绍到这了,更多相关AmazeUI的JS表单验证内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章,希望大家以后多多支持三水点靠木!

HTML / CSS 相关文章推荐
网页布局中CSS样式无效的十个重要原因详解
Aug 10 HTML / CSS
CSS3实现精美横向滚动菜单按钮
Apr 14 HTML / CSS
CSS3中的弹性布局em运用入门详解 1em等于多少像素
Feb 08 HTML / CSS
HTML5实现一个能够移动的小坦克示例代码
Sep 02 HTML / CSS
HTML5 DeviceOrientation实现手机网站摇一摇功能代码实例
Apr 24 HTML / CSS
详解HTML5中的拖放事件(Drag 和 drop)
Nov 14 HTML / CSS
HTML5中form如何关闭自动完成功能的方法
Jul 02 HTML / CSS
canvas绘制树形结构可视图形的实现
Apr 03 HTML / CSS
AmazeUI 输入框组的示例代码
Aug 14 HTML / CSS
amazeui时间组件的实现示例
Aug 18 HTML / CSS
关于webview适配H5上传照片或者视频文件的方法
Nov 04 HTML / CSS
使用CSS实现按钮边缘跑马灯动画
May 07 HTML / CSS
amazeui 验证按钮扩展的实现
Aug 21 #HTML / CSS
前端H5 Video常见使用场景简介
Aug 21 #HTML / CSS
前后端结合实现amazeUI分页效果
Aug 21 #HTML / CSS
AmazeUI 加载进度条的实现示例
Aug 20 #HTML / CSS
AmazeUI图片轮播效果的示例代码
Aug 20 #HTML / CSS
AmazeUI折叠式卡片布局,整合内容列表、表格组件实现
Aug 20 #HTML / CSS
AmazeUI 平滑滚动效果的示例代码
Aug 20 #HTML / CSS
You might like
php 文件上传代码(限制jpg文件)
2010/01/05 PHP
将一维或多维的数组连接成一个字符串的php代码
2010/08/08 PHP
PHP将整个网站生成HTML纯静态网页的方法总结
2012/02/05 PHP
PHP提示Warning:phpinfo() has been disabled函数禁用的解决方法
2014/12/17 PHP
thinkphp实现分页显示功能
2016/12/03 PHP
PHP设计模式之单例模式原理与实现方法分析
2018/04/25 PHP
写出更好的JavaScript之undefined篇(上)
2009/11/22 Javascript
jQueryUI写一个调整分类的拖放效果实现代码
2012/05/10 Javascript
js获取滚动距离的方法
2015/05/30 Javascript
通过js获取上传的图片信息(临时保存路径,名称,大小)然后通过ajax传递给后端的方法
2015/10/01 Javascript
JS组件Bootstrap按钮组与下拉按钮详解
2016/05/10 Javascript
H5手机端多文件上传预览插件
2017/04/21 Javascript
原生JS实现层叠轮播图
2017/05/17 Javascript
用JavaScript做简易的购物车的代码示例
2017/10/20 Javascript
JavaScript高阶教程之“==”隐藏下的类型转换
2019/04/11 Javascript
微信小程序点击按钮动态切换input的disabled禁用/启用状态功能
2020/03/07 Javascript
js实现无刷新监听URL的变化示例代码详解
2020/06/03 Javascript
React实现阿里云OSS上传文件的示例
2020/08/10 Javascript
WebStorm无法正确识别Vue3组合式API的解决方案
2021/02/18 Vue.js
[16:19]教你分分钟做大人——风暴之灵
2015/03/11 DOTA
[04:56]经典回顾:前Ehome 与 前LGD
2015/02/26 DOTA
[55:32]2018DOTA2亚洲邀请赛 4.4 淘汰赛 EG vs LGD 第二场
2018/04/05 DOTA
Python中的map、reduce和filter浅析
2014/04/26 Python
python实现的解析crontab配置文件代码
2014/06/30 Python
WINDOWS 同时安装 python2 python3 后 pip 错误的解决方法
2017/03/16 Python
Python3结合Dlib实现人脸识别和剪切
2018/01/24 Python
浅析Python3爬虫登录模拟
2018/02/07 Python
Python实现合并excel表格的方法分析
2019/04/13 Python
最新创业融资计划书
2014/01/19 职场文书
校园十佳歌手策划书
2014/01/22 职场文书
《我为你骄傲》教学反思
2014/02/20 职场文书
保研推荐信范文
2015/03/25 职场文书
违规违纪检讨书范文
2015/05/06 职场文书
Python实战之用tkinter库做一个鼠标模拟点击器
2021/04/27 Python
详解gantt甘特图可拖拽、编辑(vue、react都可用 highcharts)
2021/11/27 Vue.js
分享几种python 变量合并方法
2022/03/20 Python