模块名: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. 深入浅出 C 语言:学变量、掌控流程、玩指针,全方位掌握 C 编程技能

    C 语言简介 C 语言介绍 C 语言的特性 C 语言相对于其他语言的优势 C 程序的编译 C 中的 Hello World 程序 参考文章: C 语言入门:如何编写 Hello World C 语言函 ...

  2. Android 开发入门(2)

    0x04 简单控件 (1)文本显示 a. 添加文本 设置文本内容主要有两种方式: XML:通过属性android:text设置 在 layout 目录下新建 activity_text_view.xm ...

  3. CentOS 8 安装 oracle 23c CentOS9 Error deal

    1.环境准备 软件准备 序号 软件 下载地址 1 VirtualBox https://www.virtualbox.org/wiki/Downloads 2 CentOS Stream 8 http ...

  4. 密码学中的RSA算法与椭圆曲线算法

    PrimiHub一款由密码学专家团队打造的开源隐私计算平台,专注于分享数据安全.密码学.联邦学习.同态加密等隐私计算领域的技术和内容. 在数字安全领域,加密算法扮演着至关重要的角色.它们确保了信息的机 ...

  5. 剑指offer38(Java)-字符串的排列(中等)

    题目: 输入一个字符串,打印出该字符串中字符的所有排列. 你可以以任意顺序返回这个字符串数组,但里面不能有重复元素. 示例: 输入:s = "abc"输出:["abc&q ...

  6. 力扣178(MySQL)-分数排名(中等)

    题目: 表: Scores 编写 SQL 查询对分数进行排序.排名按以下规则计算: 分数应按从高到低排列.如果两个分数相等,那么两个分数的排名应该相同.在排名相同的分数后,排名数应该是下一个连续的整数 ...

  7. 力扣81(java&python)-搜索旋转排序数组 II(中等)

    题目: 已知存在一个按非降序排列的整数数组 nums ,数组中的值不必互不相同. 在传递给函数之前,nums 在预先未知的某个下标 k(0 <= k < nums.length)上进行了 ...

  8. 基于IoT全链路实时质量-魔洛哥

    简介: 通过基于IoT的全链路实时质量,业务使用狄仁杰进行全链路埋点后,可一键接入魔洛哥平台,实现终端问题的实时感知和链路分析,以及智能终端系统业务场景的全链路实时质量.整体方案接入成本低(分钟级别接 ...

  9. MSE 治理中心重磅升级-流量治理、数据库治理、同 AZ 优先

    简介: 本次 MSE 治理中心在限流降级.数据库治理及同 AZ 优先方面进行了重磅升级,对微服务治理的弹性.依赖中间件的稳定性及流量调度的性能进行全面增强,致力于打造云原生时代的微服务治理平台. 作者 ...

  10. Quick BI:降低使用门槛,大东鞋业8000家门店的数据导航

    简介: 通过引入MaxCompute和Quick BI,大东解决了以往数据查询即刻导致数据库闪崩的状况,还搭建起完善的报表体系,稳定应对高频.高并发的数据分析. 大东鞋业一季大约有500款的新品.大区 ...