模块名: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表单验证抽离成单独模块手动调用的更多相关文章

  1. layui表单验证

    layui表单元素的校验只需在元素上加入lay-verify,layui提供了以下值. required(必填项) phone(手机号) email(邮箱) url(网址) number(数字) da ...

  2. layui 表单验证汇总

    1 表单自带校验 lay-verify:是表单验证的关键字有以下值供选择: required 必填项phone 手机号email 邮箱date 日期url 链接identity 身份证number 数 ...

  3. 00008 - layui 表单验证,需要验证,但非必输

    当使用layui的验证规则,比如 手机, <input type="text" name="userName" lay-verify="phon ...

  4. es6 封装一个基础的表单验证

    1, 需求分析 设计一个通用的表单验证,如果后期表单中添加了更多的需求,不需要更改之前的代码逻辑,最好不要改之前的代码,需要加什么直接加就好了. 2,代码分析 此表单验证最好返回一个函数,在api设计 ...

  5. 关于Web项目里的给表单验证控件添加结束时间不得小于开始时间的验证方法,日期转换和前台显示格式之间,还有JSON取日期数据格式转换成标准日期格式的问题

    项目里有些不同页面间的日期显示格式是不同的, 第一个问题: 比如我用日期控件WdatePicker.js导包后只需在input标签里加上onClick="WdatePicker()" ...

  6. layui 自定义表单验证的几个实例

    *注:使用本方法请先引入layui依赖的layu.js和layui.css 1.html <input type="text" name="costbudget&q ...

  7. 使用 layUI做一些简单的表单验证

    使用 layUI做一些简单的表单验证 <form method="post" class="layui-form" > <input name ...

  8. layui之表单验证

    这篇文章的表单验证我只是随便记录下,望各位看官理解 1.排序 验证 html代码 <div class="layui-form-item"> <label cla ...

  9. validate表单验证-单独验证

    今天编写一个表单验证程序,我来说一下今天遇到的坑:程序不是通过submit按钮提交验证的,是在自己写的一个方法中提交的,出现了表单无法验证的情况.然后我就了解了一下jquery validate的验证 ...

  10. 表单验证插件之jquery.validate.js

    提到表单验证的插件,第一个想到的就是jquery.validate.js,所以小生想在这里稍微详细地说一下这款插件的具体使用方法,便于理解,我直接附上整段demo的代码(没怎么调样式,主要是看js): ...

随机推荐

  1. 开源LaTex可视化编辑器推荐,支持LaTex代码补全,一键套用模板!

    https://latexlive.com/ 这还是个开源项目,不过是C#的,搭建的成本比较大,没PHP好搞. 下面是这个网站

  2. 深入剖析 Java 类属性与类方法的应用

    Java 类属性 Java 类属性,也称为字段,是类中的变量.它们用于存储与类相关的数据. 创建类属性 在类定义中声明属性: public class Main { int x; // 属性 Stri ...

  3. Bash与shell的区别

    Bash 与 shell 的区别 介绍 常见的 shell 解释器有 sh.bash 这两种,其他的 ksh.csh 和 zsh 等是不常见的.Mac OS 中默认安装了以上所有类型,Windows ...

  4. Leetcode-队列得最大值

    请定义一个队列并实现函数 max_value 得到队列里的最大值,要求函数max_value.push_back 和 pop_front 的均摊时间复杂度都是O(1).若队列为空,pop_front ...

  5. 五款最优秀的java微服务框架

    微服务被广泛用于创建多功能的应用程序,通过组合每个功能部分并将它们逐层放在一个单元中.许多人可能没有意识到微服务是一组小型服务中制作单个应用程序的方法,每个服务都独立运行(进程). java微服务框架 ...

  6. Pytorch风格迁移代码

    最近研究了一下风格迁移,主要是想应用于某些主题节日时动态融合背景,生成一些抽象的艺术图片,这里给大家分享一个现成的代码,我本地把环境搭建好后跑了试试,有兴趣的可以直接拿去运行: 1 import to ...

  7. LeetCode - 最接近的三数之和

    最接近的三数之和 你一个长度为 n 的整数数组 nums 和 一个目标值 target.请你从 nums 中选出三个整数,使它们的和与 target 最接近. 返回这三个数的和. 假定每组输入只存在恰 ...

  8. python pickle模块,打包创建的对象,做持久化

    pickle提供了一个简单的持久化功能.可以将对象以文件的形式存放在磁盘上. pickle.dump(obj, file[, protocol]) 序列化对象,并将结果数据流写入到文件对象中.参数pr ...

  9. 谷歌浏览器新功能 Copy Declaration

    不知道最近大家有没有发现,从谷歌浏览器开发者工具复制 Css 代码到 Vs Code,粘贴之后 Css 代码错乱了.昨天在复制样式代码的时候,突然发现复制的 Css 代码粘贴之后就错乱了.具体表现如下 ...

  10. 力扣504(java)-七进制数(简单)

    题目: 给定一个整数 num,将其转化为 7 进制,并以字符串形式输出. 示例 1: 输入: num = 100输出: "202"示例 2: 输入: num = -7输出: &qu ...