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): ...
随机推荐
- [HAOI2007,P2216,BZOJ1047]理想的正方形单调队列解法
题目描述 有一个 \(a \times b\) 的整数组成的矩阵,现请你从中找出一个 \(n \times n\) 的正方形区域,使得该区域所有数中的最大值和最小值的差最小. 输入格式 第一行为 \( ...
- Grafana系列-统一展示-10-Explore Jaeger
系列文章 Grafana 系列文章 Explore Jaeger 你可以通过Explore查询和显示 Jaeger 的 trace.有 3 种方法: Query by search Query by ...
- SpringBoot常用注解整理
@SpringBootApplication 定义在main方法入口类处,用于启动sping boot应用项目 @Target(ElementType.TYPE) @Retention(Retenti ...
- 电脑开机时报错No Bootable Device找不到索引的解决方法
本文介绍笔记本电脑出现No Bootable Device错误提示,且无法开机的多种解决办法. 1 问题产生 最近,笔记本电脑正在正常使用时,突然蓝屏,出现你的设备遇到问题,需要重启.的提示: ...
- 在python中实现二叉树
二叉树设计 定义节点类 class Node: # 修改初始化方法 def init(self,value): self.value = value # 节点值 self.left = None # ...
- 全局模型可解释之部分依赖图:Partial Dependence Plot
本部分是来自大纲 模型可解释的一个子分支. 部分依赖图可以表示1个或者2个特征对模型的预测结果所能产生的边际效应.同时也能展示1个特征和label直接是否具有:线性相关性.单调性等. 当我们把pdp应 ...
- 结构化数据上的 TopN 运算
1. 最大值 / 最小值 最大值 / 最小值可以理解为 TopN 查询中,N 等于 1 时的情况,因为很常用所以单独拿出来讲一下.取最大值 / 最小值是很常见的需求,例如一班数学最高分是多少, ...
- NOI 2024省选OIFC模拟21 蒲巴巴 超繁做法
题目描述 一年一度的 PuBaBa 杯开始了! 今年的 PuBaBa 杯总共有 \(n\) 个选手来参加,编号分别为 \(1,2,\cdots,n\),他们的水平按编号依次递增,所以他们过的题目数量单 ...
- vscode设置语法错误时在文件名显示报错
- 力扣594(java&python)-最长和谐子序列(简单)
题目: 和谐数组是指一个数组里元素的最大值和最小值之间的差别 正好是 1 . 现在,给你一个整数数组 nums ,请你在所有可能的子序列中找到最长的和谐子序列的长度. 数组的子序列是一个由数组派生出来 ...