模块名: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. OpenHarmony AI框架开发指导

    一.概述 1.功能简介 AI 业务子系统是 OpenHarmony 提供原生的分布式 AI 能力的子系统.AI 业务子系统提供了统一的 AI 引擎框架,实现算法能力快速插件化集成. AI 引擎框架主要 ...

  2. Matplotlib绘图设置---坐标轴上下限/标题设置

    坐标轴上下限设置 plt.plot(x, np.sin(x)) #设置坐标轴上下限 plt.xlim(-1, 11) plt.ylim(-1.5, 1.5) plt.plot(x, np.sin(x) ...

  3. C# \n与\\n区别

    \n是换行符:\\n第一个\是转义字符,也就是说,\\n在屏幕上显示\n

  4. Excel分析师的工资能一直飙升,原因其实是...

    世界上的数据分析师分为使用Excel的分析师和其他分析师两类. 即使在互联网数据分析界,java遍街头,Python不如狗,Excel也是不可替代的. 上班前以为自己是西装笔挺的Excel数据分析师, ...

  5. MogDB/OpenGauss数据库中通过参数控制抓取慢sql

    MogDB/OpenGauss 数据库中通过参数控制抓取慢 sql 本文出处:https://www.modb.pro/db/221556 mogdb 数据库中可以通过打开相应的参数抓取慢 sql,该 ...

  6. mask2former出来的灰度图转切割轮廓后的二值图

    切割后的灰度图 转成二值图代码如下 点击查看代码 # This is a sample Python script. import cv2 import numpy as np # Press Shi ...

  7. unity 3d导出安卓包时报错:A failure occurred while executing com.android.build.gradle.internal.tasks.workers$actionfacade see the console for details

    unity 3d导出安卓包时报错:A failure occurred while executing com.android.build.gradle.internal.tasks.workers$ ...

  8. 力扣344(java & python)-反转字符串(简单)

    题目: 编写一个函数,其作用是将输入的字符串反转过来.输入字符串以字符数组 s 的形式给出. 不要给另外的数组分配额外的空间,你必须原地修改输入数组.使用 O(1) 的额外空间解决这一问题. 示例 1 ...

  9. Java应用结构规范

    ​简介:在Java程序开发中,命名和应用分层无疑是广大后端同胞的两大"痛点",本文提供一种基于领域模型的轻量级应用分层结构设计,供大家参考.下面按分层结构.分层明细.调用关系.各层 ...

  10. WPF 开源二维绘画小工具 GeometryToolDemo 项目

    这是一个演示 WPF 进行二维绘画的小工具 Demo 项目,基于 MIT 协议在 GitHub 上完全开源 源作者是 YuWeiCong 我只是帮助开源的工具人 软件运行界面效果: 开源地址: htt ...