1.使用
layui 针对各种表单元素做了较为全面的UI支持,你无需去书写那些 UI 结构,你只需要写 HTML 原始的 input、select、textarea 这些基本的标签即可。我们在 UI 上的渲染只要求一点,你必须给表单体系所在的父元素加上class="layui-form",一切的工作都会在你加载完form模块后,自动完成。如下是一个最基本的例子:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>layui.form小例子</title> <link rel="stylesheet" href="layui.css" media="all"> </head> <body> <form class="layui-form"> <!-- 提示:如果你不想用form,你可以换成div等任何一个普通元素 --> <div class="layui-form-item"> <label class="layui-form-label">输入框</label> <div class="layui-input-block"> <input type="text" name="" placeholder="请输入" autocomplete="off" class="layui-input"> </div> </div> <div class="layui-form-item"> <label class="layui-form-label">下拉选择框</label> <div class="layui-input-block"> <select name="interest" lay-filter="aihao"> <option value="0">写作</option> <option value="1">阅读</option> </select> </div> </div> <div class="layui-form-item"> <label class="layui-form-label">复选框</label> <div class="layui-input-block"> <input type="checkbox" name="like[write]" title="写作"> <input type="checkbox" name="like[read]" title="阅读"> </div> </div> <div class="layui-form-item"> <label class="layui-form-label">开关关</label> <div class="layui-input-block"> <input type="checkbox" lay-skin="switch"> </div> </div> <div class="layui-form-item"> <label class="layui-form-label">开关开</label> <div class="layui-input-block"> <input type="checkbox" checked lay-skin="switch"> </div> </div> <div class="layui-form-item"> <label class="layui-form-label">单选框</label> <div class="layui-input-block"> <input type="radio" name="sex" value="0" title="男"> <input type="radio" name="sex" value="1" title="女" checked> </div> </div> <div class="layui-form-item layui-form-text"> <label class="layui-form-label">请填写描述</label> <div class="layui-input-block"> <textarea placeholder="请输入内容" class="layui-textarea"></textarea> </div> </div> <div class="layui-form-item"> <div class="layui-input-block"> <button class="layui-btn" lay-submit lay-filter="*">立即提交</button> <button type="reset" class="layui-btn layui-btn-primary">重置</button> </div> </div> <!-- 更多表单结构排版请移步文档左侧【页面元素-表单】一项阅览 --> </form> <script src="layui.js"></script> <script> layui.use('form', function(){ var form = layui.form; //各种基于事件的操作,下面会有进一步介绍 }); </script> </body> </html>
2.更新渲染
第一个参数:type,为表单的 type 类型,可选。默认对全部类型的表单进行一次更新。
select:刷新select选择框渲染
checkbox:刷新checkbox复选框(含开关)渲染
radio:刷新radio单选框框渲染
form.render(); //更新全部 form.render('select'); //刷新select选择框渲染 //……
第二个参数:filter,为 class="layui-form" 所在元素的 lay-filter="" 的值。你可以借助该参数,对表单完成局部更新。
【HTML】 <div class="layui-form" lay-filter="test1"> … </div> <div class="layui-form" lay-filter="test2"> … </div> 【JavaScript】 form.render(null, 'test1'); //更新 lay-filter="test1" 所在容器内的全部表单状态 form.render('select', 'test2'); //更新 lay-filter="test2" 所在容器内的全部 select 状态 //……
3.预设元素属性
<input type="text" lay-verify="email"> <input type="checkbox" checked lay-skin="switch" lay-filter="encrypt" title="是否加密"> <button lay-submit>提交</button>
上述的lay-verify、lay-skin、lay-filter、lay-submit神马的都是我们所说的预设的元素属性,他们可以使得一些交互操作交由form模块内部、或者你来借助form提供的JS接口精确控制。
属性名 | 属性值 | 说明 | |
title | 任意字符 | 设定元素名称,一般用于checkbox、radio框 | |
lay-skin | switch(开关风格) primary(原始风格) | 定义元素的风格,目前只对 checkbox 元素有效,可将其转变为开关样式 | |
lay-ignore | 任意字符或不设值 | 是否忽略元素美化处理。设置后,将不会对该元素进行初始化渲染,即保留系统风格 | |
lay-filter | 任意字符 | 事件过滤器,主要用于事件的精确匹配,跟选择器是比较类似的。其实它并不私属于form模块,它在 layui 的很多基于事件的接口中都会应用到。 | |
lay-verify | required(必填项) phone(手机号) email(邮箱) url(网址) number(数字) date(日期) identity(身份证) 自定义值 |
同时支持多条规则的验证,格式:lay-verify="验证A|验证B" 如:lay-verify="required|phone|number" 另外,除了内置的校验规则,还可以给他设定任意的值,比如lay-verify="pass",那么你就需要借助form.verify()方法对pass进行一个校验规则的定义。 |
|
lay-verType | tips(吸附层) alert(对话框) msg(默认) |
用于定义异常提示层模式。 | |
lay-reqText |
|
用于自定义必填项(即设定了 lay-verify="required" 的表单)的提示文本 | |
lay-submit | 无需填写值 |
|
4.事件监听
语法:form.on('event(过滤器值)', callback);
select:监听select下拉选择事件
checkbox:监听checkbox复选框勾选事件
switch:监听checkbox复选框开关事件
radio:监听radio单选框事件
submit:监听表单提交事件
默认情况下,事件所监听的是全部的form模块元素,但如果你只想监听某一个元素,使用事件过滤器即可。
如:<select lay-filter="test"></select>
form.on('select(test)', function(data){ console.log(data); });
监听select选择
form.on('select(filter)', function(data){ console.log(data.elem); //得到select原始DOM对象 console.log(data.value); //得到被选中的值 console.log(data.othis); //得到美化后的DOM对象 });
请注意:如果你想监听所有的select,去掉过滤器(filter)即可。
监听checkbox复选
复选框点击勾选时触发,回调函数返回一个object参数,携带两个成员:
form.on('checkbox(filter)', function(data){ console.log(data.elem); //得到checkbox原始DOM对象 console.log(data.elem.checked); //是否被选中,true或者false console.log(data.value); //复选框value值,也可以通过data.elem.value得到 console.log(data.othis); //得到美化后的DOM对象 });
监听switch开关
开关被点击时触发,回调函数返回一个object参数,携带两个成员:
form.on('switch(filter)', function(data){ console.log(data.elem); //得到checkbox原始DOM对象 console.log(data.elem.checked); //开关是否开启,true或者false console.log(data.value); //开关value值,也可以通过data.elem.value得到 console.log(data.othis); //得到美化后的DOM对象 });
监听radio单选
radio单选框被点击时触发,回调函数返回一个object参数,携带两个成员:
form.on('radio(filter)', function(data){ console.log(data.elem); //得到radio原始DOM对象 console.log(data.value); //被点击的radio的value值 });
监听submit提交
按钮点击或者表单被执行提交时触发,其中回调函数只有在验证全部通过后才会进入,回调返回三个成员:
form.on('submit(*)', function(data){ console.log(data.elem) //被执行事件的元素DOM对象,一般为button对象 console.log(data.form) //被执行提交的form对象,一般在存在form标签时才会返回 console.log(data.field) //当前容器的全部表单字段,名值对形式:{name: value} return false; //阻止表单跳转。如果需要表单跳转,去掉这段即可。 });
5.表单取值/赋值
语法:form.val('filter', object);
用于给指定表单集合的元素赋值和取值。如果 object 参数存在,则为赋值;如果 object 参数不存在,则为取值。
//给表单赋值 form.val("formTest", { //formTest 即 class="layui-form" 所在元素属性 lay-filter="" 对应的值 "username": "贤心" // "name": "value" ,"sex": "女" ,"auth": 3 ,"check[write]": true ,"open": false ,"desc": "我爱layui" }); //获取表单区域所有值 var data1 = form.val("formTest");
6.表单验证
大多数时候你只需要在表单元素上加上 lay-verify="" 属性值即可。
<input type="text" lay-verify="email"> 还同时支持多条规则的验证,如下: <input type="text" lay-verify="required|phone|number">
自定义验证规则如下
form.verify({ username: function(value, item){ //value:表单的值、item:表单的DOM对象 if(!new RegExp("^[a-zA-Z0-9_\u4e00-\u9fa5\\s·]+$").test(value)){ return '用户名不能有特殊字符'; } if(/(^\_)|(\__)|(\_+$)/.test(value)){ return '用户名首尾不能出现下划线\'_\''; } if(/^\d+\d+\d$/.test(value)){ return '用户名不能全为数字'; } } //我们既支持上述函数式的方式,也支持下述数组的形式 //数组的两个值分别代表:[正则匹配、匹配不符时的提示文字] ,pass: [ /^[\S]{6,12}$/ ,'密码必须6到12位,且不能出现空格' ] });
当你自定义了类似上面的验证规则后,你只需要把 key 赋值给输入框的 lay-verify 属性即可:
<input type="text" lay-verify="username" placeholder="请输入用户名"> <input type="password" lay-verify="pass" placeholder="请输入密码">