file-type

layui.js表单验证实战:文本框、手机与邮箱验证

65KB | 更新于2024-09-01 | 89 浏览量 | 4 评论 | 0 下载量 举报 收藏
download 立即下载
layui.js是一个轻量级的前端UI库,主要用于简化Web开发中的基础组件构建,包括表单、布局、模块化等功能。本文主要讲解如何使用layui.js实现表单验证功能,帮助开发者快速集成并提升用户体验。 在HTML代码中,首先引入layui.js库和样式文件,确保在页面上能够正确运行验证功能: ```html <link rel="stylesheet" href="layui/css/layui.css" rel="external nofollow" rel="external nofollow"> <script src="layui/layui.js"></script> <script src="layui/lay/dest/layui.all.js"></script> ``` 表单验证的核心在于`lay-verify`属性,它允许开发者自定义验证规则。在上述HTML示例中,有几个关键的表单元素展示了不同的验证应用场景: 1. 反馈主题(title):一个文本框,要求用户输入标题,`lay-verify="title"`表示将对这个输入字段进行验证。可能的验证规则可以设置为非空、字符长度限制等。 2. 姓名(fname):同样是一个文本输入框,`lay-verify="fname"`表明也需要验证,可能检查格式或是否为空。 3. 手机(phone):使用`type="tel"`的输入框,用于输入电话号码,`lay-verify="phone"`可能包括格式验证,如正则表达式匹配常见的手机号码格式。 4. textarea:用于多行文本输入,可能需要检查输入的格式或长度。 为了实现这些验证,可以在layui.js库中定义验证规则,例如: ```javascript layui.use(['form', 'layer'], function(){ var form = layui.form(), layer = layui.layer; // 验证规则对象 var ruleObj = { title: { required: true, // 必填项 len: [1, 50] // 字符长度限制 }, fname: { required: true }, phone: { mobile: true // 手机号码格式验证 } }; // 添加验证规则并监听表单提交事件 form.verify(ruleObj, { submit: function(form){ // 在这里处理表单提交前的验证逻辑,如果验证失败,显示错误提示 if (!form.verify()) return false; // 如果验证通过,继续执行表单提交操作 // ... } }); }); ``` 这段代码中,`layui.form().verify()`方法接收规则对象和提交事件处理器。当用户提交表单时,会自动调用规则对象中的验证函数。如果验证失败,lay-layer库可以用来展示错误提示,提高用户体验。 layui.js提供了一种简洁的方式来实现前端表单验证,开发者可以根据实际需求定制验证规则,增强表单的交互性和有效性。通过合理利用layui.js的验证功能,可以大大提高网站的可用性和可靠性。

相关推荐

filetype

<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Layui 弹窗示例</title> <link href="https://www.layuicdn.com/layui-v2.5.6/css/layui.css" rel="stylesheet"> <style> .modal-title { color: #333333; font-family: Microsoft YaHei; font-weight: bold; font-size: 28px; line-height: normal; letter-spacing: 0px; text-align: center; } .modal-tip { color: #333333; font-family: Microsoft YaHei; font-weight: regular; font-size: 16px; line-height: 30px; letter-spacing: 0px; text-align: center; } .layui-input-block{ margin-left: 0; width: 76%; margin: auto; } .layui-textarea { margin-top: 20px; height: 150px !important; } </style> </head> <body style="padding: 20px;"> <button class="layui-btn" id="showDialog"> 显示弹窗 </button> <script src="https://www.layuicdn.com/layui-v2.5.6/layui.js"></script> <script> // 初始化 Layui 模块 layui.use(['layer', 'form'], function(){ var layer = layui.layer; var form = layui.form; // 绑定按钮点击事件 document.getElementById('showDialog').onclick = function(){ // 基础弹窗 layer.open({ type: 1, title: '弹窗标题', area: ['900px', '600px'], content: '
' + '

中午好,流云!

' + '

输入您的内容主题,让AI为你服务

' + ' <form class="layui-form" lay-filter="formDemo">' + '
' + '
' + ' <textarea name="content" placeholder="发消息、输入@选择技能或选择文件" class="layui-textarea"></textarea>' + '
' + '
' + ' </form>' + '
', btn: ['提交', '取消'], success: function(layero, index){ // 重新渲染表单 form.render(); // 监听提交按钮 form.on('submit(formDemo)', function(data){ layer.msg('提交内容:' + JSON.stringify(data.field)); return false; }); }, yes: function(index, layero){ // 手动触发表单提交 var formElem = $(layero).find('form'); formElem.find('button[lay-submit]').click(); }, btn2: function(index, layero){ layer.close(index); } }); }; }); </script> </body> </html>

filetype

扩写下列layui代码,使点击‘注册’按钮后刷新”
captcha
“图片 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>Demo</title> <link href="//unpkg.com/[email protected]/dist/css/layui.css" rel="stylesheet"> </head> <body> <style> .demo-login-container{width: 320px; margin: 21px auto 0; margin: 300px auto;} .demo-login-other .layui-icon{position: relative; display: inline-block; margin: 0 2px; top: 2px; font-size: 26px;} </style> <form class="layui-form">
<input type="text" name="namew" value="" lay-verify="required" placeholder="用户名" lay-reqtext="请填写用户名" autocomplete="off" class="layui-input" lay-affix="clear">
<input type="password" name="password" value="" lay-verify="required" placeholder="密码" autocomplete="off" class="layui-input" id="reg-password" lay-affix="eye">
<input type="password" name="confirmPassword" value="" lay-verify="required|confirmPassword" placeholder="确认密码" autocomplete="off" class="layui-input" lay-affix="eye">
<input type="text" name="captcha" value="" lay-verify="required" placeholder="验证码" lay-reqtext="请填写验证码" autocomplete="off" class="layui-input" lay-affix="clear">
captcha
<input type="checkbox" name="remember" lay-skin="primary" title="记住密码">
<button type="button" class="layui-btn layui-btn-fluid" lay-submit lay-filter="demo-login">登录</button>
</form> <script src="//unpkg.com/[email protected]/dist/layui.js"></script> <script> layui.use(function(){ var form = layui.form; var layer = layui.layer; var $ = layui.jquery; var util = layui.util; form.verify({ // 确认密码 confirmPassword: function(value, item){ var passwordValue = $('#reg-password').val(); if(value !== passwordValue){ return '两次密码输入不一致'; } } }); // 提交事件 form.on('submit(demo-login)', function(data){ var field = data.field; // 显示填写结果,仅作演示用 // 此处可执行 Ajax 等操作' $.post( '/admin/user', // 目标URL {namew:field.namew,password: field.password,captcha:field.captcha}, function(result){ if ( result.code==200) {layer.msg('提交成功')} if(result.code==400) layer.msg('提交失败') if(result.code==500) layer.msg('验证码错误'); } ,'json'); timeoutId = setTimeout(function() {}, 3000); // … // 阻止默认 form 跳转 }); }); </script> </body> </html>

filetype

<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>收费项目列表</title> <meta name="renderer" content="webkit"> <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"> <link rel="stylesheet" href="https://www.layuicdn.com/layui-v2.6.8/css/layui.css"> <style> .x-nav { padding: 0 20px; position: relative; z-index: 99; border-bottom: 1px solid #e5e5e5; line-height: 60px; } .x-body { padding: 20px; } .layui-table td, .layui-table th { padding: 9px 15px; } .td-manage a { margin: 0 5px; } .dialog-mask { position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: rgba(0,0,0,0.5); z-index: 999; display: flex; justify-content: center; align-items: center; } .dialog-content { background: #fff; padding: 20px; border-radius: 5px; width: 800px; max-height: 90vh; overflow-y: auto; } .x-red { color: red; } </style> </head> <body>
ID 所属小区 收费编号 项目名称 创建时间
{{ item.id }} {{ item.x_id }} {{ item.m_count }} {{ item.m_name }} {{ item.creat_Time }}

{{ dialogTitle }}

<form class="layui-form layui-form-pane"> <input type="hidden" v-model="formData.id">
<label class="layui-form-label"> *所属小区 </label>
<input type="text" v-model="formData.x_id" placeholder="请输入所属小区编号" class="layui-input" lay-verify="required">
<label class="layui-form-label"> *收费名称 </label>
<input type="text" v-model="formData.m_name" placeholder="请输入项目名称" class="layui-input" lay-verify="required">
<button class="layui-btn layui-btn-primary" type="button" @click="dialogVisible = false">取消</button> <button class="layui-btn" type="button" @click="submitForm">确定</button>
</form>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/vue.js"></script> <script src="https://www.layuicdn.com/layui-v2.6.8/layui.js"></script> <script> // 从localStorage获取房产数据 function getproData() { const data = localStorage.getItem('proData'); return data ? JSON.parse(data) : [ { id: '3', x_id: '1', m_count: 'A栋', m_name: '金华小区A栋', create_Time: '2019-12-13' }, { id: '2', x_id: '2', m_count: 'A栋', m_name: '金华小区A栋', create_Time: '2019-12-11' }, { id: '1', x_id: '3', m_count: 'A栋', m_name: '金华小区A栋', create_Time: '2019-12-12' } ]; } new Vue({ el: '#app', data: { proList: getproData(), dialogVisible: false, dialogTitle: '编辑收费项目', currentIndex: -1, formData: { id: '', x_id: '', m_count: '', m_name: '', create_Time: '' } }, mounted() { this.initLayui(); }, methods: { initLayui() { layui.use(['form', 'laydate', 'layer'], () => { const form = layui.form; const laydate = layui.laydate; window.layer = layui.layer; form.render(); laydate.render({ elem: '#checkInDate', max: '2099-12-31', done: (value) => { this.formData.create_Time = value; } }); }); }, refresh() { this.proList = getproData(); layer.msg('刷新成功', {icon: 1}); }, editItem(index) { this.dialogTitle = '编辑收费项目'; this.currentIndex = index; this.formData = JSON.parse(JSON.stringify(this.proList[index])); this.dialogVisible = true; this.$nextTick(() => { layui.form.render(); // 重新初始化日期选择器,确保显示正确的日期 layui.laydate.render({ elem: '#checkInDate', max: '2099-12-31', value: this.formData.create_Time, done: (value) => { this.formData.create_Time = value; } }); }); }, deleteItem(index) { const _this = this; layer.confirm('确定要删除这条记录吗?', function(){ _this.proList.splice(index, 1); localStorage.setItem('houseData', JSON.stringify(_this.proList)); layer.msg('删除成功', {icon: 1}); }); }, submitForm() { const form = layui.form; // 验证表单 form.verify(); if (!this.validateForm()) { return; } // 编辑 this.proList.splice(this.currentIndex, 1, this.formData); // 保存到localStorage localStorage.setItem('proData', JSON.stringify(this.proList)); this.dialogVisible = false; layer.msg('编辑成功', {icon: 1}); }, validateForm() { if (!this.formData.x_id) { layer.msg('请输入所属小区', {icon: 5}); return false; } if (!this.formData.m_name) { layer.msg('请输入名称', {icon: 5}); return false; } if (!this.formData.m_name) { layer.msg('项目名称不能为空', {icon: 5}); return false; } return true; }, } }); </script> </body> </html> 表单无法显示数据,写出更改后的代码

filetype

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <link rel="stylesheet" href="../../layui/css/layui.css"> <link rel="stylesheet" href="../../css/diy.css"> <style> .layui-body { overflow-x: scroll; } </style> </head> <body>
<form class="layui-form" action="">
<label class="layui-form-label">权限名</label>
<input type="text" name="mod_name" required lay-verify="required" autocomplete="off" class="layui-input">
<label class="layui-form-label">用户组</label>
<select name="user_group" lay-filter="required" id="user_group"> <option value=""></option> </select>
<label class="layui-form-label">添加权限</label>
<select name="add" lay-filter="required"> <option value=""></option> <option value="0">无</option> <option value="1">有</option> </select>
<label class="layui-form-label">修改权限</label>
<select name="set" lay-filter="required"> <option value=""></option> <option value="0">无</option> <option value="1">有</option> </select>
<label class="layui-form-label">删除权限</label>
<select name="del" lay-filter="required"> <option value=""></option> <option value="0">无</option> <option value="1">有</option> </select>
<label class="layui-form-label">查询权限</label>
<select name="get" lay-filter="required"> <option value=""></option> <option value="0">无</option> <option value="1">有</option> </select>
</form>
<button type="button" class="layui-btn layui-btn-normal" id="inquire">查询</button> <button type="button" class="layui-btn layui-btn-normal" id="reset">重置</button>

数据列表

<script type="text/html" id="toolbarDemo">
<button class="layui-btn layui-btn-sm" lay-event="add">修改</button>
</script>
<script src="../../layui/layui.js"></script> <script src="../../js/axios.min.js"></script> <script src="../../js/index.js"></script> <script src="../../js/base.js" charset="utf-8"></script> <script> var BaseUrl = baseUrl() layui.use(['element', 'layer', 'util'], function () { var element = layui.element , table = layui.table , layer = layui.layer , util = layui.util , $ = layui.$; let personInfo = JSON.parse(sessionStorage.personInfo) let user_group = personInfo.user_group let token = sessionStorage.token || null //头部事件 util.event('lay-header-event', { //左侧菜单事件 menuLeft: function (othis) { layer.msg('展开左侧菜单的操作', {icon: 0}); } , menuRight: function () { layer.open({ type: 1 , content: '
处理右侧面板的操作
' , area: ['260px', '100%'] , offset: 'rt' //右上角 , anim: 5 , shadeClose: true }); } }); // table 事件 table.render({ elem: '#newsClassification' , toolbar: true , url: BaseUrl + '/api/auth/get_list' , headers: { 'x-auth-token': token, 'Content-Type': 'application/json' } ,limits: [10] , page: { //支持传入 laypage 组件的所有参数(某些参数除外,如:jump/elem) - 详见文档 layout: ['limit', 'count', 'prev', 'page', 'next', 'skip'] //自定义分页布局 //,curr: 5 //设定初始在第 5 页 , groups: 1 //只显示 1 个连续页码 , first: false //不显示首页 , last: false //不显示尾页 } , cols: [[ {type: 'checkbox'} , {field: 'user_group', width: '10%', title: '用户组'} , {field: 'mod_name', width: '10%', title: '权限名称', templet: function (d) { if (d.path.replace('/'+d.table_name+'/','')=='table') { return "
"+d.mod_name+"后台列表
" } if (d.path.replace('/'+d.table_name+'/','')=='view') { return "
"+d.mod_name+"后台详情
" } if (d.path.replace('/'+d.table_name+'/','')=='list') { return "
"+d.mod_name+"前台列表
" } if (d.path.replace('/'+d.table_name+'/','')=='details') { return "
"+d.mod_name+"前台详情
" } if (d.path.replace('/'+d.table_name+'/','')=='edit') { return "
"+d.mod_name+"前台编辑
" } } } , { field: 'add', width: '10%', title: '添加权限', templet: function (d) { if (d.add == '0') { return "
" } else { return "
" } } } , { field: 'del', width: '10%', title: '删除权限', templet: function (d) { if (d.del == '0') { return "
" } else { return "
" } } } , { field: 'set', width: '10%', title: '修改权限', templet: function (d) { if (d.set == '0') { return "
" } else { return "
" } } } , { field: 'get', width: '10%', title: '查询权限', templet: function (d) { if (d.get == '0') { return "
" } else { return "
" } } } , { field: 'create_time', width: '15%', title: '新增时间', sort: true, templet: "
{{layui.util.toDateString(d.create_time, 'yyyy-MM-dd HH:mm:ss')}}
" } , { field: 'update_time', width: '15%', title: '更新时间', sort: true, templet: "
{{layui.util.toDateString(d.update_time, 'yyyy-MM-dd HH:mm:ss')}}
" } , {field: 'operate', title: '操作', toolbar: "#toolbarDemo"} ]] , page: true, request: { limitName: 'size' }, response: { statusName: 'code', //规定返回/Back的状态码字段为code statusCode: 200 //规定成功的状态码味200 }, parseData: function (res) { return { "code": 200, "msg": "", "count": res.result.count, "data": res.result.list } }, where: {like: 0, size: 10} }); layui.table.on('tool(newsClassification)', function (obj) { //注:tool是工具条事件名,test是table原始容器的属性 lay-filter="对应的值" var data = obj.data; //获得当前行数据 var layEvent = obj.event; //获得 lay-event 对应的值(也可以是表头的 event 参数对应的值) var tr = obj.tr; //获得当前行 tr 的DOM对象 if (layEvent == "add") { let auth_id = data.auth_id // window.location = ('./view.html?' + auth_id) layopen_dateil('./view.html?' + auth_id) } }); // 请求参数: let request = {like: 0, size: 10, page: 1, mod_name: '', user_group: '',add:'',set:'',del:'',get:'',orderby: 'create_time desc'} // 重置/Reset参数 let resetName = {like: 0, size: 10, page: 1, orderby: 'create_time desc'} fun('newsClassification', BaseUrl + '/api/auth/del', 'auth_id', request, resetName) async function get_list_user_group() { $.ajax({ url: BaseUrl + "/api/user_group/get_list", type: "get", async: false, success: function (data) { if (data && typeof data === 'string'){ data = JSON.parse(data); } if (data.result) { // 拿到单选框的父级节点 let select = document.querySelector("#user_group") let op1 = document.createElement('option') select.appendChild(op1) // 收集数据 长度 let count // 收集数据 数组 let arr = [] count = data.result.count arr = data.result.list for (let i = 0; i < arr.length; i++) { // 创建节点 let op = document.createElement('option') // 给节点赋值 op.innerHTML = arr[i].name op.value = arr[i].name // 新增/Add节点 select.appendChild(op) layui.form.render('select') } } } }); } get_list_user_group(); }); </script> </body> </html> 逐个分析代码功能,不要自己填写内容

资源评论
用户头像
洪蛋蛋
2025.05.31
"文章提供了layui.js表单验证的具体示例,涵盖了多种输入类型,对开发人员很有帮助。"
用户头像
艾斯·歪
2025.04.14
"layui.js实现的表单验证功能示例,针对多种常见格式进行验证,非常实用。"
用户头像
ali-12
2025.03.22
"本文详细介绍了layui.js实现表单验证的方法,包括文本框、手机、邮箱等验证,值得学习。"
用户头像
天眼妹
2025.03.20
"通过引入layui.css和相关HTML代码,实现了表单的快速验证,简单易学。"🍖
weixin_38622983
  • 粉丝: 6
上传资源 快速赚钱