你对layui的弹出层表单进行表单验证了解多少呢?

简介: 我们在项目中使用**layui**做前端的时候,就少不了表单**form**,但也有时候我们会使用**layui**的弹出层`layer.open`,来做一个弹出层表单,该弹出层有自己的**btn**(确定,取消按钮等等),那么如何对弹出层的表单做一个表单验证呢?
我们在项目中使用 layui做前端的时候,就少不了表单 form,但也有时候我们会使用 layui的弹出层 layer.open,来做一个弹出层表单,该弹出层有自己的 btn(确定,取消按钮等等),那么如何对弹出层的表单做一个表单验证呢?

一:改变按钮类型

首先,我们改变按钮类型

我们要把layer弹出层的确定按钮,变成layui-form的提交按钮:

在这里插入图片描述

二、通过form.on实现

第二步骤,就是把该layer弹出层表单属性改为layuo-form表单属性:
在这里插入图片描述
看下效果:

在这里插入图片描述
源码如下:

  //JS
    layui.use(['element', 'layer', 'util', 'table', 'dropdown', 'laydate', 'form', 'util'], function () {
        var element = layui.element
            , layer = layui.layer
            , util = layui.util
            , $ = layui.$;
        var table = layui.table;
        var dropdown = layui.dropdown;
        var laydate = layui.laydate;
        var form = layui.form;

        // 创建渲染实例
        table.render({
            elem: '#test'
            , url: '../mapConfig/getConfig'
            , method: "get"
            , toolbar: '#toolbarDemo'
            , defaultToolbar: ['filter', 'exports', 'print', {
                title: '帮助'
                , layEvent: 'LAYTABLE_TIPS'
                , icon: 'layui-icon-tips'
            }]
            , height: 'full-200'
     /*       ,page: {
                layout: ['limit', 'count', 'prev', 'page', 'next', 'skip'] //自定义分页布局
                ,curr: 1 //设定初始在第 5 页
                ,groups: 2 //只显示 1 个连续页码
                ,first: true //不显示首页
                ,last: true //不显示尾页
            }*/
            , cols: [[
                {type: 'checkbox', fixed: 'left'}
                , {field: 'configId', width: 80, title: 'configId', fixed: 'left'}
                , {field: 'expoName', width: 120, title: 'expoName', edit: 'text', fixed: 'left'}
                , {field: 'mapName', width: 80, title: 'mapName', edit: 'text'}
                , {field: 'picUrl', width: 80, title: 'picUrl', edit: 'text'}
                , {field: 'introduce', title: 'introduce', width: 150, edit: 'text'}
                , {field: 'startTime', width: 130, title: 'startTime', sort: true, edit: 'text'}
                , {field: 'endTime', title: 'endTime', width: 130, sort: true, edit: 'text'}
                , {field: 'boothNum', title: 'boothNum', width: 80, edit: 'text'}
                , {field: 'expoType', title: 'expoType', width: 80, edit: 'text'}
                , {field: 'mapType', title: 'mapType', width: 80, edit: 'text'}
                , {field: 'unityScene', title: 'unityScene', width: 120, edit: 'text'}
                , {field: 'spawnPos', title: 'spawnPos', width: 90, edit: 'text'}
                , {field: 'displayOrder', title: 'displayOrder', width: 110, edit: 'text'}
                , {field: 'abName', title: 'abName', width: 110, edit: 'text'}
                , {field: 'isClose', title: 'isClose', width: 80, edit: 'text'}
                , {field: 'adPosNum', title: 'adPosNum', width: 90, edit: 'text'}
                , {field: 'isTemplate', title: 'isTemplate', width: 100, edit: 'text'}
                , {field: 'previewPics', title: 'previewPics', width: 100, edit: 'text'}
                , {field: 'introduce2', title: 'introduce2', width: 80, edit: 'text'}
                , {field: 'picUrl2', title: 'picUrl2', width: 80, edit: 'text'}
                , {fixed: 'right', title: '操作', width: 125, minWidth: 125, toolbar: '#barDemo'}
            ]],
            parseData: function (res) {
                return {
                    "code": 0,
                    "msg": "",
                    "count": res.length,
                    "data": res.data
                }
            }
            , error: function (res, msg) {
                console.log(res, msg)
            }
        });


        //触发单元格工具事件
        table.on('tool(test)', function (obj) {
            if (obj.event === 'del') {
                layer.confirm('确认删除吗', function (index) {
                    obj.del();
                    $.ajax({
                        type: "get",
                        dataType: 'text',
                        contentType: 'application/json',
                        url: '../mapConfig/deleteConfig',
                        data: {
                            configId: obj.data.configId,
                        },
                        success: function (result) {
                            if (result) {
                                layer.msg("删除成功")
                            }
                        }
                    })
                    layer.close(index);
                });
            } else if (obj.event === 'edit') {
                $.ajax({
                    type: "post",
                    dataType: 'text',
                    contentType: 'application/json;charset=utf-8',
                    url: '../mapConfig/updateConfig',
                    data:obj.data,
                    success: function (result) {
                        layer.msg("更新成功");
                    }
                    , error: function (result) {
                        layer.msg("更新失败")
                    }
                })
            }
        });

        //    批量删除,
        $("#delSelect").on('click', function () {
            var checkStatus = table.checkStatus('test'),
                data = checkStatus.data;
            var configId = new Array();

            if (data.length > 0) {
                for (var i in data) {
                    configId[i] = data[i].configId;
                }
                $.ajax({
                    type: "get",
                    dataType: 'text',
                    traditional: true,
                    contentType: 'application/json',
                    url: '../mapConfig/deleteBatch',
                    data: {
                        configId: configId
                    },
                    success: function (result) {
                        location.reload();
                    }
                })
            } else {
                layer.msg("请选择需要删除的行");
            }
        });

        //添加按钮的事件
        $('#addNewInfo').on('click', function () {
            let newInfo = layer.open({
                title: '新增'
                , content: $('#editPage')//页面选择器
                , type: 1//页面选择器
                , area: ['1000px']
                , shade: 0.5
                , btn: ['确认添加', '重置', '取消'],
                success: function (layero, index) {
                    // 添加form标识
                    layero.addClass('layui-form');
                    // 将保存按钮改变成提交按钮
                    layero.find('.layui-layer-btn0').attr({
                        'lay-filter': 'formButton',
                        'lay-submit': ''
                    });
                    form.render();
                }
                , yes: () => {
                    form.on('submit(formButton)', function () {
                        const formData = layui.form.val("formId");
                        $.ajax({
                            type: "post",
                            dataType: 'json',
                            traditional: true,
                            contentType: "application/json;charset=utf-8",
                            url: '../mapConfig/addConfig',
                            data: JSON.stringify(formData),
                            success: function (result) {
                                if (result.status === 0) {
                                    layer.msg("添加成功");
                                     location.reload();
                                } else {
                                    layer.msg("该configId已经存在");
                                }
                            },
                            error: function (result) {
                                layer.msg("添加失败");
                            }
                        })
                        layer.close();
                    })
                }
                , btn2: function () {
                    // 重置清空
                    $('#formId')[0].reset();
                    form.render();//必须写
                },
                btn3: function (index, layero) {
                }
                , cancel: function () {
                }
            })
        })

        //日历
        laydate.render({
            elem: '#startTime', //指定元素
            type: "datetime"
        });
        laydate.render({
            elem: '#endTime',
            type: "datetime"
        });

    });
相关文章
layui框架实战案例(11):表单自定义验证规则
layui框架实战案例(11):表单自定义验证规则
515 0
Layui 内置方法 - layer.msg(提示框)
Layui 内置方法 - layer.msg(提示框)
1481 0
|
前端开发 网络安全
layui如何实现添加数据时关闭页面层,并实时刷新表格数据?
layui如何实现添加数据时关闭页面层,并实时刷新表格数据?
|
JavaScript 前端开发
layui用layer.open打开子页面并获取子页面的ueditor富文本编辑器的内容
该内容描述了一个Web应用的交互流程,其中父页面通过调用子页面的JavaScript函数来获取富文本编辑器的内容。子页面包含一个富文本编辑器和一个`callbackdata`函数,用于返回编辑器的文本内容。父页面使用`layer.open`打开子页面作为弹窗,并在用户点击提交时,访问子页面的`callbackdata`获取编辑器内容,同时检查其他表单字段,如类型、标题等是否为空,以确保数据完整。
1270 0
|
容器
layui下拉多选框xm-select.js插件的使用
layui下拉多选框xm-select.js插件的使用
1568 0
|
数据格式
Layui中table数据表格使用方法渲染 返回的数据不符合规范,正确的成功状态码应为:“code“: 0异常处理
Layui中table数据表格使用方法渲染 返回的数据不符合规范,正确的成功状态码应为:“code“: 0异常处理
2036 0
|
前端开发
layui-form
`layui-form`是一个前端表单组件,提供多种表单类型如单行、多行排列的输入框,下拉选择框(支持模糊搜索),单选框和复选框。表单元素可通过`required`和`lay-verify`属性进行必填和验证设置。编辑器如`layedit`可用于富文本输入,表单监听事件如提交和单选器可绑定回调函数进行处理。此外,能动态更新渲染表单,初始化表单数据并进行数据校验,包括自定义验证规则。
1046 1
|
JSON 前端开发 JavaScript
【Layui】掌握的LayUI树形权限菜单,助力你的权限管理!
LayUI是一款基于jQuery的前端UI框架,而树形权限菜单是一种常见的网页导航菜单设计。LayUI树形权限菜单结合了LayUI框架的特性和树状结构的展示方式,用于实现对用户权限的管理和控制。树形权限菜单通常由多层级的树状菜单构成,每个节点表示一个功能或者页面,父节点表示上级菜单,子节点表示下级菜单。通过这种层级结构,可以清晰地展示网站或系统的功能模块之间的关系。权限管理是指根据用户的角色或权限级别对不同的用户展示不同的菜单选项。
|
前端开发 JavaScript Java
【Layui】选项卡Tab:完美实现网页内容分类与导航
Layui选项卡是一种基于Layui框架的前端组件,用于创建多个选项卡并在其之间进行切换。Layui是一个轻量级、易用、灵活的前端UI框架,旨在简化前端开发过程。使用Layui选项卡,你可以在页面中创建多个选项卡标签,每个标签对应一个内容区域。用户可以点击选项卡标签来切换显示相应的内容区域。这种方式常用于页面的分组显示或切换不同的功能模块。Layui选项卡提供了丰富的配置选项,包括标签样式、选项卡切换的触发事件、内容区域的布局方式等。它还支持动态添加和删除选项卡,以及自定义选项卡的样式和功能。