layui表单验证抽离成单独模块手动调用
模块名:validateForm
验证添加方法和原来一样(lay-verify=''),可以多个表单一起验证,任何任何一个验证不通过就会返回。使用:
var boolResult = validateForm.validate("formId1","formId2",....)
模块定义如下:
1 /**
2 扩展一个 表单手动验证 模块
3 **/
4
5 layui.define(['layer','form'],function (exports) { //提示:模块也可以依赖其它模块,如:layui.define('mod1', callback);
6 var layer = layui.layer;
7 var form = layui.form;
8 var obj = {
9 hello: function (str) {
10 alert('Hello ' + (str || 'validateForm'));
11 },
12 //传入多个form的id。比如:('id1','id2','id3')
13 validate : function () {
14 var device = layui.device();
15 for (var i = 0; i < arguments.length; i++) {
16 var stop = null //验证不通过状态
17 , verify = form.config.verify //验证规则
18 , DANGER = 'layui-form-danger' //警示样式
19 , field = {} //字段集合
20 , formElem = $(`#${arguments[i]}`) //获取当前所在的 form 元素,如果存在的话
21 , verifyElem = formElem.find('*[lay-verify]') //获取需要校验的元素
22 var verifyElem = $(`#${arguments[i]}`).find('*[lay-verify]');
23 //开始校验
24 layui.each(verifyElem, function (_, item) {
25 var othis = $(this)
26 , vers = othis.attr('lay-verify').split('|')
27 , verType = othis.attr('lay-verType') //提示方式
28 , value = othis.val();
29
30 othis.removeClass(DANGER); //移除警示样式
31
32 //遍历元素绑定的验证规则
33 layui.each(vers, function (_, thisVer) {
34 var isTrue //是否命中校验
35 , errorText = '' //错误提示文本
36 , isFn = typeof verify[thisVer] === 'function';
37
38 //匹配验证规则
39 if (verify[thisVer]) {
40 var isTrue = isFn ? errorText = verify[thisVer](value, item) : !verify[thisVer][0].test(value)
41 //是否属于美化替换后的表单元素
42 , isForm2Elem = item.tagName.toLowerCase() === 'select' || /^checkbox|radio$/.test(item.type);
43
44 errorText = errorText || verify[thisVer][1];
45
46 if (thisVer === 'required') {
47 errorText = othis.attr('lay-reqText') || errorText;
48 }
49
50 //如果是必填项或者非空命中校验,则阻止提交,弹出提示
51 if (isTrue) {
52 //提示层风格
53 if (verType === 'tips') {
54 layer.tips(errorText, function () {
55 if (typeof othis.attr('lay-ignore') !== 'string') {
56 if (isForm2Elem) {
57 return othis.next();
58 }
59 }
60 return othis;
61 }(), { tips: 1 });
62 } else if (verType === 'alert') {
63 layer.alert(errorText, { title: '提示', shadeClose: true });
64 }
65 //如果返回的为字符或数字,则自动弹出默认提示框;否则由 verify 方法中处理提示
66 else if (/\bstring|number\b/.test(typeof errorText)) {
67 layer.msg(errorText, { icon: 5, shift: 6 });
68 }
69
70 //非移动设备自动定位焦点
71 if (!device.mobile) {
72 setTimeout(function () {
73 (isForm2Elem ? othis.next().find('input') : item).focus();
74 }, 7);
75 } else { //移动设备定位
76 $dom.scrollTop(function () {
77 try {
78 return (isForm2Elem ? othis.next() : othis).offset().top - 15
79 } catch (e) {
80 return 0;
81 }
82 }());
83 }
84
85 othis.addClass(DANGER);
86 return stop = true;
87 }
88 }
89 });
90 if (stop) return stop;
91 });
92
93 if (stop) return false;
94 }
95 }
96 };
97
98 //输出 validateForm 接口
99 exports('validateForm', obj);
100 });
layui表单验证抽离成单独模块手动调用的更多相关文章
- layui表单验证
layui表单元素的校验只需在元素上加入lay-verify,layui提供了以下值. required(必填项) phone(手机号) email(邮箱) url(网址) number(数字) da ...
- layui 表单验证汇总
1 表单自带校验 lay-verify:是表单验证的关键字有以下值供选择: required 必填项phone 手机号email 邮箱date 日期url 链接identity 身份证number 数 ...
- 00008 - layui 表单验证,需要验证,但非必输
当使用layui的验证规则,比如 手机, <input type="text" name="userName" lay-verify="phon ...
- es6 封装一个基础的表单验证
1, 需求分析 设计一个通用的表单验证,如果后期表单中添加了更多的需求,不需要更改之前的代码逻辑,最好不要改之前的代码,需要加什么直接加就好了. 2,代码分析 此表单验证最好返回一个函数,在api设计 ...
- 关于Web项目里的给表单验证控件添加结束时间不得小于开始时间的验证方法,日期转换和前台显示格式之间,还有JSON取日期数据格式转换成标准日期格式的问题
项目里有些不同页面间的日期显示格式是不同的, 第一个问题: 比如我用日期控件WdatePicker.js导包后只需在input标签里加上onClick="WdatePicker()" ...
- layui 自定义表单验证的几个实例
*注:使用本方法请先引入layui依赖的layu.js和layui.css 1.html <input type="text" name="costbudget&q ...
- 使用 layUI做一些简单的表单验证
使用 layUI做一些简单的表单验证 <form method="post" class="layui-form" > <input name ...
- layui之表单验证
这篇文章的表单验证我只是随便记录下,望各位看官理解 1.排序 验证 html代码 <div class="layui-form-item"> <label cla ...
- validate表单验证-单独验证
今天编写一个表单验证程序,我来说一下今天遇到的坑:程序不是通过submit按钮提交验证的,是在自己写的一个方法中提交的,出现了表单无法验证的情况.然后我就了解了一下jquery validate的验证 ...
- 表单验证插件之jquery.validate.js
提到表单验证的插件,第一个想到的就是jquery.validate.js,所以小生想在这里稍微详细地说一下这款插件的具体使用方法,便于理解,我直接附上整段demo的代码(没怎么调样式,主要是看js): ...
随机推荐
- Windows开发的瑞士军刀,NewSPYLite发布
宗旨:延续了SpyLite的方便易用,同时也丰富了更多的功能,更适合开发者使用. 在SpyLite的基础功能上,开发了更多人性化并且好用的功能,增强的信息的可读性,以及软件总体的可用性. New Sp ...
- Spring内存马分析
环境搭建 踩了很多坑....,不过还好最后还是成功了 IDEA直接新建javaEE项目,然后记得把index.jsp删了,不然DispatcherServlet会失效 导入依赖: <depend ...
- Dev 控件 gridControl教程
Dev 控件 gridControl教程:https://www.bilibili.com/video/BV1gz4y1R7Wk/?spm_id_from=333.788.recommend_more ...
- Solon 的事务管理工具类(TranUtils)
Solon 在编码上,是强调注解与手写并重的一个风格.它有个 @Tran 注解,用于事务管理(可以参考:<事务的全局控制及应用>).这里,主要是讲讲它的手动处理工具类 TranUtils. ...
- 如何在报表中绘制 SVG 统计图
SVG 作为一种矢量图形,具有任意缩放不失真.可被高质量打印.文件较小.交互性强等优势,正逐渐成为一种主流的图片格式.润乾报表一方面可以生成 SVG 格式的统计图,另一方面也可以在 HTML5 中直接 ...
- 英语 one day
前言 I do not know if it work,but just go. 内容 1.quote vt:摘要,引用 n:引语 He quote a passage from the presid ...
- mysql 必知必会整理—安全管理[十七]
前言 简单介绍一下安全管理. 正文 MySQL服务器的安全基础是:用户应该对他们需要的数据具有适当的访问权,既不能多也不能少. 换句话说,用户不能对过多的数据具有过多的访问权. 多数用户只需要对表进行 ...
- ICMP 概念
前言 打算从新整理网络这一块,那么我先把概念整理下来. 正文 ICMP是ip的一个组成.他传递差错报文以及其他需要注意的信息.主要用于反馈一些网络传输的问题.因为ip协议很容易丢包,那么icmp可以告 ...
- 使用OpenMMLab系列的开源库时,常用的脚本合集。
使用OpenMMLab系列的开源库时,常用的脚本合集. 开源仓库:gy-7/mmlab_scripts 脚本解释: anchor_visiual.py 生成的锚框可视化 aug_test.py 自动数 ...
- 【ssm】极简的极省力的开发方式——针对简单型EasyUI的增删改查的后台管理
需要具备技能点: ssm框架搭建,mybatis generator的熟练使用 1.控制器: import java.util.HashMap; import java.util.Map; impor ...