首页 > 其他分享 >layui表单验证抽离成单独模块手动调用

layui表单验证抽离成单独模块手动调用

时间:2023-05-12 14:12:44浏览次数:44  
标签:function layui 抽离成 errorText 表单 othis verify var

模块名:validateForm

可以多个表单一起验证,任何任何一个验证不通过就会返回。使用:

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 }); 

 

标签:function,layui,抽离成,errorText,表单,othis,verify,var
From: https://www.cnblogs.com/ggtc/p/17393949.html

相关文章

  • 03-Html中的表格和表单
    HTML中的表格和表单HTML中的表格创建一个表格<tableborder=""cellspacing=""cellpadding=""width=""height=""> <caption>表格标题</caption> <tr> <th>Header</th> </tr> <tr&g......
  • 03-Html中的表单
    HTML中的表格和表单HTML中的表单表单是什么对于用户而言是数据的录入和提交的界面对于网站而言获取用户信息的途径---表单的作用创建一个表单<formaction=""method=""name=""></form>form!!!单词不要记错了action:定义表单最终提交的地址method: 设定......
  • 表单的高级应用
    隐藏域:hidden代表当前不需要展现在当前行上,但是需要隐藏起来并发送给后端服务器inputtype=hiddenname=1value=2ps:改字符颜色<pstyle="color:red;">3333</p>只读和禁用:readonly代表不可编辑,只能看(只读)  disabled代表置灰效果且不可编辑(禁用)inputtype=textvalue=123r......
  • 学习日记——表单的语法、运用和验证
    1.语法①邮箱<formaction="demo001.html"><tableborder="1px"><tr><td>请输入邮箱地址<inputtype="email"name=""id=""value=""/......
  • antd表单校验不通过 滚动条自动滚动到未通过校验位置
    问题:当一个存在滚动条的表单校验不通过时,需要自动滚动到不通过表单的位置当滚动在最下面,不可视区域存在校验不通过,这时需要滚动条滚到未通过校验的表单位置思路:定位到第一个不通过的表单项,然后通过scrollIntoView(),滚动到相应位置表单在保存时会调用validate()方法校验表单,没......
  • layui内置loading等待加载
    点击功能按钮之后:varloading=layer.load(2,{shade:false,time:3*1000});//参数:icon:0,1,2loading风格//shade:false是否有遮罩,true表示有遮罩//time:3*1000设定最长等待时间,设置时间之后,loading会在时间到之后自动关闭关......
  • layUI的富文本编辑器赋值问题
    layUI中富文本编辑器的特点先获取div的id,然后再给div上面的文本赋值,然后调用富文本编辑器特有的组件,进一步给它赋值,就可以实现了varele=document.getElementById("msg-input");//获取文本域的idconsole.log(e.target.responseText);ele.value=ele.value+e.target.respo......
  • Layui+dtree实现左边分类列表,右边数据列表
    效果如下代码实现<!DOCTYPEhtml><html><head><metacharset="utf-8"><title>帖子类别</title><metaname="renderer"content="webkit"><metahttp-equiv="X-UA-Compatible&q......
  • 七天学会flask(六)---flask提交表单
    用户使用表单向服务器提交信息,比如最常见的登录,本文讲解如何在html页面里提交表单,flask如何处理表单数据,此外还将讨论表单敏感信息如何存储。下面是一个简单的登录页面中的form表单<formaction="/login"method="POST"><p>name:<inputtype="text"name="name"/></p>......
  • Layui 2.8.0 正式发布,官网全新文档站朴实归来
    前言两年前Layui官网宣布了下线声明,说实话当时内心确实感慨万千毕竟这个免费为我们后端程序员提供的一个前端快熟开发框架的官网就这样下线了确实十分的惋惜,但是庆幸的是官网的下线,只是单纯一个网站自身生命周期的结束,它并不意味着Layui这样一个开源项目的停更,Layui仍然......