Layui
Layui(谐音:类UI) 是一款由职业前端倾情打造,面向全层次的前后端开发者,低门槛开箱即用的前端 UI 解决方案。遵循原生 HTML/CSS/JS 的书写与组织形式,门槛极低,拿来即用,非常适合界面的快速开发。兼容除 IE6/7 之前的的全部浏览器,可作为 PC 端后台系统与前台界面的速成开发方案。
官网:https://www.layui.com,已下架,目前可以通过其它网站获取曾经的文档。
下载与使用
1、官网首页下载
在 Layui官网首页 下载 layui 的最新版,它经过了自动化构建,更适合用于生产环境。目录结构如下:
├─css //css目录
│ │─modules //模块 css 目录(一般如果模块相对较大,我们会单独提取,如下:)
│ │ ├─laydate
│ │ └─layer
│ └─layui.css //核心样式文件
├─font //字体图标目录
└─layui.js //核心库
2、在页面引入下述两个文件:
./layui/css/layui.css
./layui/layui.js
3、在 body 元素中添加要使用的组件内容即可。
页面元素
CSS内置公共基础类
容器类
类名(class) | 说明 |
---|---|
layui-main | 用于设置一个宽度为 1140px 的水平居中块(无响应式) |
layui-container | 用于设置一个响应式的水平居中块 |
layui-fluid | 于父类容器同宽的效果,左右内边距限定 15px |
layui-inline | 用于将标签设为内联块状元素 |
layui-box | 用于排除一些UI框架(如Bootstrap)强制将全部元素设为box-sizing: border-box所引发的尺寸偏差 |
layui-clear | 用于消除浮动(一般不怎么常用,因为layui几乎没用到浮动) |
文本类
类(class) | 说明 |
---|---|
layui-text | 定义一段文本区域(如文章),该区域内的特殊标签(如a、li、em等)将会进行相应处理 |
layui-word-aux | 灰色标注性文字 |
背景色类
类(class) | 说明 |
---|---|
layui-bg-red | 用于设置元素赤色背景 |
layui-bg-orange | 用于设置元素橙色背景 |
layui-bg-green | 用于设置元素墨绿色背景(主色调) |
layui-bg-cyan | 用于设置元素藏青色背景 |
layui-bg-blue | 用于设置元素蓝色背景 |
layui-bg-black | 用于设置元素经典黑色背景 |
layui-bg-gray | 用于设置元素经典灰色背景 |
辅助类
类名 | 说明 |
---|---|
layui-icon | 用于图标 |
layui-elip | 用于单行文本溢出省略 |
layui-unselect | 用于屏蔽选中 |
layui-disabled | 用于设置元素不可点击状态 |
layui-circle | 用于设置元素为圆形 |
layui-show | 用于显示块状元素 |
layui-hide | 用于隐藏元素 |
HTML内置公共属性
很多时候,元素的基本交互行为,都是由模块自动开启。但不同的区域可能需要触发不同的动作,这就需要设定 Layui 所支持的自定义属性来作为区分。
主要记忆 lay-filter 属性。此属性为 layui 自定义的事件过滤器属性。我们会在很多地方看到它,你可以把它看作是一个ID选择器。
简单组件
栅格化布局组件
原理:将容器宽等分成12份,预定义好在不同屏幕尺寸下对应宽度的样式类,给元素添加上类名即可呈现效果。
屏幕尺寸 | 使用类名 |
---|---|
>= 1200px | .layui-col-lg1-12 |
1200px >= 尺寸 >= 992px | .layui-col-md1-12 |
992px >= 尺寸 >= 768px | .layui-col-sm1-12 |
<= 768px | .layui-col-xs1-12 |
上方的 1-12 表示占据容器宽的比例,例如:希望一个元素在大屏幕尺寸中占据父容器的一半,就添加类名:.layui-col-lg6
可以通过给父容器追加类名 .layui-col-space1-30 给子元素添加内边距,从而实现子元素内容间隔,即 — 列间隔
可以通过给子元素添加类名 .layui-col-offset1-12 来添加列偏移
图标
Layui 提供了图标库,我们可以直接从图标库中选取要使用的字体图标加载到页面中。使用方式有两种:
1、使用 unicode 字符定义图标
<i class="layui-icon"></i>
2、使用 font-class 的形式定义图标,这种方式从 Layui 2.3.0 版本之后开始支持
<i class="layui-icon layui-icon-face-smile"></i>
按钮
向任意HTML元素设定class=”layui-btn”,建立一个基础按钮。通过追加格式为layui-btn-{type} 的类名来定义其它按钮风格。内置的按钮类名可以进行任意组合,从而形成更多种按钮风格。
<button class="layui-btn">一个标准的按钮</button>
<a href="http://www.layui.com" class="layui-btn">一个可跳转的按钮</a>
主题类名
主题名称 | 使用类 |
---|---|
原始 | class=”layui-btn layui-btn-primary” |
默认 | class=”layui-btn” |
百搭 | class=”layui-btn layui-btn-normal” |
暖色 | class=”layui-btn layui-btn-warm” |
警告 | class=”layui-btn layui-btn-danger” |
禁用 | class=”layui-btn layui-btn-disabled” |
尺寸类名
尺寸 | 使用类 |
---|---|
大型 | class=”layui-btn layui-btn-lg” |
默认 | class=”layui-btn” |
小型 | class=”layui-btn layui-btn-sm” |
迷你 | class=”layui-btn layui-btn-xs” |
流体(最大化适应) | class=”layui-btn layui-btn-fluid” |
圆角
通过添加 layui-btn-radius 类名可以将一个Layui按钮改成一个圆角风格的按钮
图标按钮
在按钮中间添加图标内容,添加的图标可以从官方文档中查看图标库。
<button type="button" class="layui-btn">
<i class="layui-icon"></i> 添加
</button>
<button type="button" class="layui-btn layui-btn-sm layui-btn-primary">
<i class="layui-icon layui-icon-wifi"></i> wifi
</button>
按钮组
将按钮放入一个class=”layui-btn-group”元素中,即可形成按钮组,按钮本身仍然可以随意搭配:
<div class="layui-btn-group">
<button class="layui-btn">增加</button>
<button class="layui-btn">编辑</button>
<button class="layui-btn">删除</button>
</div>
按钮容器
尽管按钮在同节点并排时会自动拉开间距,但在按钮太多的情况,效果并不是很美好。因为你需要用到按钮容器:
<div class="layui-btn-container">
<button type="button" class="layui-btn">按钮一</button>
<button type="button" class="layui-btn">按钮二</button>
<button type="button" class="layui-btn">按钮三</button>
</div>
导航
导航一般指页面引导性频道集合,多以菜单的形式呈现,可应用于头部和侧边,是整个网页画龙点晴般的存在。
Layui 导航组件需借助 element JS模块才能使用。加载模块的方法
水平导航
<ul class="layui-nav" lay-filter="">
<li class="layui-nav-item"><a href="">最新活动</a></li>
<li class="layui-nav-item layui-this"><a href="">产品</a></li>
<li class="layui-nav-item"><a href="">大数据</a></li>
<li class="layui-nav-item">
<a href="javascript:;">解决方案</a>
<dl class="layui-nav-child"> <!-- 二级菜单 -->
<dd><a href="">移动模块</a></dd>
<dd><a href="">后台模版</a></dd>
<dd><a href="">电商平台</a></dd>
</dl>
</li>
<li class="layui-nav-item"><a href="">社区</a></li>
</ul>
<script>
//注意:导航 依赖 element 模块,否则无法进行功能性操作
layui.use('element', function(){
var element = layui.element;
//…
});
</script>
设定 layui-this 来指向当前页面的分类。
导航主题
通过对导航追加CSS背景类,可以让导航呈现不同的主题色,例如:
<ul class="layui-nav layui-bg-green">
...
</ul>
水平导航支持的其它背景主题有:layui-bg-cyan(藏青)、layui-bg-molv(墨绿)、layui-bg-blue(艳蓝)
垂直导航支持的其它背景主题有:layui-bg-cyan(藏青)
垂直/侧边导航
垂直导航需要追加类名:layui-nav-tree
侧边导航需要追加类名:layui-nav-tree layui-nav-side
导航可选属性
对导航元素结构设定可选属性,可让导航菜单项达到不同效果。目前支持的属性如下:
属性名 | 可选值 | 说明 |
---|---|---|
lay-shrink | 空值(默认) 不收缩兄弟菜单子菜单all 收缩全部兄弟菜单子菜单 | 展开子菜单时,是否收缩兄弟节点已展开的子菜单 (注:layui 2.2.6 开始新增) 如:*
|
lay-unselect | 无需填值 | 点击指定导航菜单时,不会出现选中效果(注:layui 2.2.0 开始新增) 如:* |
面包屑
<span class="layui-breadcrumb">
<a href="">首页</a>
<a href="">国际新闻</a>
<a href="">亚太地区</a>
<a><cite>正文</cite></a>
</span>
我们可以通过设置属性 lay-separator=”-“ 来自定义分隔符。
<span class="layui-breadcrumb" lay-separator="-">
<a href="">首页</a>
<a href="">国际新闻</a>
<a href="">亚太地区</a>
<a><cite>正文</cite></a>
</span>
选项卡
Tab广泛应用于Web页面,Layui内置多种Tab风格,支持新增、删除、切换选项卡、并提供响应式支持。动态操作依赖于 element 模块。
默认Tab选项卡
<div class="layui-tab">
<ul class="layui-tab-title">
<li class="layui-this">网站设置</li>
<li>用户管理</li>
<li>权限分配</li>
<li>商品管理</li>
<li>订单管理</li>
</ul>
<div class="layui-tab-content">
<div class="layui-tab-item layui-show">内容1</div>
<div class="layui-tab-item">内容2</div>
<div class="layui-tab-item">内容3</div>
<div class="layui-tab-item">内容4</div>
<div class="layui-tab-item">内容5</div>
</div>
</div>
<script>
//注意:选项卡 依赖 element 模块,否则无法进行功能性操作
layui.use('element', function(){
var element = layui.element;
//…
});
</script>
风格切换
添加 layui-tab-brief 类可以显示简约风格
添加 layui-tab-card 类可以显示卡片风格
Tab响应式
当容器的宽度不足以显示全部的选项时,即会自动出现展开图标。
待删除的Tab
可以对父层容器设置属性 lay-allowClose=”true” 来允许Tab选项卡被删除
ID焦点定位
可以通过对选项卡设置属性 lay-id=”xxx” 来作为唯一的匹配索引,以用于外部的定位切换,如后台的左侧导航、以及页面地址 hash的匹配。
通过动态操作 element.tabChange("lay-tab-filter",layid)
让选项卡切换到对应项。
Layui 模块
模块化的加载方式是在 layui版本 < 2.6.0时使用的,之后便不再使用该方式。
layui 的模块是基于 layui.js 内部实现的异步模块加载方式。layui 的模块接口会绑定在 layui 对象下,内部由 layui.define() 方法来完成。每一个模块都会有一个特有的名字,并且无法被占用。
调用模块可通过 layui.use 方法来实现,然后再通过 layui 对象获得模块接口。
语法:layui.use(mods, callback)
// 如果只调用一个模块,第一个参数写上模块名即可
layui.use("laypage", function(){
var laypage = layui.laypage;
// 使用模块
})
// 如果需要使用多个模块,第一个参数需要使用数组形式
layui.use(['layer', 'laypage', 'laydate'], function(){
var layer = layui.layer //获得layer模块
,laypage = layui.laypage //获得laypage模块
,laydate = layui.laydate; //获得laydate模块
//使用模块
});
事实上 layui 的「模块化加载」十分适用于开发环境,它方便团队开发和代码调试。但对于「线上环境」,更推荐采用「全模块加载」,即直接引入 layui.all.js
,它包含了 layui 所有的内置模块,且无需再通过 layui.use()
方法加载模块,直接调用即可。如:
<script src="../layui/layui.all.js"></script>
<script>
//无需再执行layui.use()方法加载模块,直接使用即可
var form = layui.form
,layer = layui.layer;
//…
</script>
element 模块
基础方法:
方法名 | 描述 |
---|---|
var element = layui.element; | element模块的实例 返回的element变量为该实例的对象,携带一些用于元素操作的基础方法 |
element.on(filter, callback); | 用于元素的一些事件监听,filter指元素绑定的lay-filter的值 |
element.tabAdd(filter, options); | 用于新增一个Tab选项 参数filter:tab元素的 lay-filter=”value” 过滤器的值(value) 参数options:设定可选值的对象,目前支持的选项如下述示例:element.tabAdd('demo', { title: '选项卡的标题' ,content: '选项卡的内容' //支持传入html ,id: '选项卡标题的lay-id属性值'}); |
element.tabDelete(filter, layid); | 用于删除指定的Tab选项 参数filter:tab元素的 lay-filter=”value” 过滤器的值(value) 参数layid:选项卡标题列表的 属性 lay-id 的值 |
element.tabChange(filter, layid); | 用于外部切换到指定的Tab项上,参数同上,如: element.tabChange(‘demo’, ‘layid’); //切换到 lay-id=”yyy” 的这一项 |
element.tab(options); | 用于绑定自定义 Tab 元素(即非 layui 自带的 tab 结构)。该方法为 layui 2.1.6 新增 参数options:设定可选值的对象,包含 headerElem、bodyElem 属性 |
element.progress(filter, percent); | 用于动态改变进度条百分比: element.progress(‘demo’, ‘30%’); |
更新渲染
此模块的相关内容不会对动态生成的页面内容生效,如果需要使用相应API,必须手工执行 element.init(type,filter) 方法。在 Layui 2.1.6 版本之后,可以用 element.render(type,filter) 方法替代。
第一个参数 type 可选,默认对全部类型的元素进行一次更新。可局部刷新的type如下表:
参数(type)值 | 描述 |
---|---|
tab | 重新对tab选项卡进行初始化渲染 |
nav | 重新对导航进行渲染 |
breadcrumb | 重新对面包屑进行渲染 |
progress | 重新对进度条进行渲染 |
collapse | 重新对折叠面板进行渲染 |
例如:
element.init(); //更新全部 2.1.6之后使用 element.render()
element.render("nav"); // 仅对导航进行渲染
第二个参数 filter,为元素的 lay-filter=”” 的值,可以借助该参数,完成指定元素的局部更新。
【HTML】
<div class="layui-nav" lay-filter="test1">
…
</div>
<div class="layui-nav" lay-filter="test2">
…
</div>
【JavaScript】
//比如当你对导航动态插入了二级菜单,这时你需要重新去对它进行渲染
element.render('nav', 'test1'); //对 lay-filter="test1" 所在导航重新渲染。注:layui 2.1.6 版本新增
//……
事件监听
语法:element.on(‘event(过滤器值)’, callback);
element 模块在 layui 事件机制中注册了element 模块事件,所以当你使用 layui.onevent() 自定义模块事件时,请勿占用 element 名。目前 element 模块所支持的事件如下表:
event | 描述 |
---|---|
tab | 监听 Tab 选项卡切换事件 |
tabDelete | 监听 Tab 监听选项卡删除事件 |
nav | 监听导航菜单的点击事件 |
collapse | 监听折叠面板展开或收缩事件 |
默认情况下,事件所监听的是全部的元素,但如果你只想监听某一个元素,使用事件过滤器即可。
如:<div class="layui-tab" lay-filter="test"></div>
// 监听页面上所有tab元素的切换事件
element.on("tab", function(data){
console.log(data);
})
// 仅监听测试 lay-filter=test 的元素的切换事件
element.on('tab(test)', function(data){
console.log(data);
});
Tab相关事件回调函数的参数对象包含:
- index:当前点击的Tab对应的下标
- elem:当前Tab容器对象
Nav事件回调函数的参数为当前点击的DOM对象;
折叠面板事件回调函数中携带参数为:
- show:当前面板的展开状态
- title:当前点击面板的标题区域DOM对象
- content:当前点击面板的内容区域的DOM对象
动态操作进度条
语法:element.progress(filter, percent)
示例:
<div class="layui-progress layui-progress-big" lay-filter="demo" lay-showPercent="true">
<div class="layui-progress-bar" lay-percent="0%"></div>
</div>
上述是一个已经设置了过滤器(lay-filter=”demo”)的进度条,现在你只需要在某个事件或者语句中执行方法:element.progress(‘demo’, ‘50%’);即可改变进度
表格
基础表格
<table class="layui-table">
<colgroup>
<col width="150">
<col width="200">
<col>
</colgroup>
<thead>
<tr>
<th>昵称</th>
<th>加入时间</th>
<th>签名</th>
</tr>
</thead>
<tbody>
<tr>
<td>贤心</td>
<td>2016-11-29</td>
<td>人生就像是一场修行</td>
</tr>
<tr>
<td>许闲心</td>
<td>2016-11-28</td>
<td>于千万人之中遇见你所遇见的人,于千万年之中,时间的无涯的荒野里…</td>
</tr>
</tbody>
</table>
给 table 标签设定不同的基础属性,会呈现不同的效果:
属性名 | 属性值 | 备注 |
---|---|---|
lay-even | 无 | 用于开启 隔行 背景,可与其它属性一起使用 |
lay-skin=”属性值” | line (行边框风格) row (列边框风格) nob (无边框风格) | 若使用默认风格不设置该属性即可 |
lay-size=”属性值” | sm (小尺寸) lg (大尺寸) | 若使用默认尺寸不设置该属性即可 |
数据表格
依赖模块 table。这里主要介绍方法渲染:首先在页面防止一个空表格元素 *
参数 | 类型 | 说明 | 示例值 |
---|---|---|---|
elem | String/DOM | 指定原始 table 容器的选择器或 DOM,方法渲染方式必填 | “#demo” |
cols | Array | 设置表头。值是一个二维数组。方法渲染方式必填 | 详见表头参数 |
url(等) | - | 异步数据接口相关参数。其中 url 参数为必填项 | 详见异步接口 |
width | Number | 设定容器宽度。table容器的默认宽度是跟随它的父元素铺满,你也可以设定一个固定值,当容器中的内容超出了该宽度时,会自动出现横向滚动条。 | 1000 |
height | Number/String | 设定容器高度 | 详见height |
cellMinWidth | Number | (layui 2.2.1 新增)全局定义所有常规单元格的最小宽度(默认:60),一般用于列宽自动分配的情况。其优先级低于表头参数中的 minWidth | 100 |
done | Function | 数据渲染完的回调。你可以借此做一些其它的操作 | 详见done回调 |
data | Array | 直接赋值数据。既适用于只展示一页数据,也非常适用于对一段已知数据进行多页展示。 | [{}, {}, {}, {}, …] |
totalRow | Boolean | 是否开启合计行区域。layui 2.4.0 新增 | false |
page | Boolean/Object | 开启分页(默认:false) 注:从 layui 2.2.0 开始,支持传入一个对象,里面可包含 laypage 组件所有支持的参数(jump、elem除外) | {theme: ‘#c00’} |
limit | Number | 每页显示的条数(默认:10)。值务必对应 limits 参数的选项。 注意:优先级低于 page 参数中的 limit 参数 | 30 |
limits | Array | 每页条数的选择项,默认:[10,20,30,40,50,60,70,80,90]。 注意:优先级低于 page 参数中的 limits 参数 | [30,60,90] |
loading | Boolean | 是否显示加载条(默认:true)。如果设置 false,则在切换分页时,不会出现加载条。该参数只适用于 url 参数开启的方式 | false |
text | Object | 自定义文本,如空数据时的异常提示等。注:layui 2.2.5 开始新增。 | {none: “没有数据”} |
id | String | 设定容器唯一 id。从 layui 2.2.0 开始,该参数也可以自动从 * |
test |
skin(等) | - | 设定表格各种外观、尺寸等 | line |
备注:table.render()方法返回一个对象:var tableIns = table.render(options),可用于对当前表格进行“重载”等操作,详见目录:表格重载
表头参数一览表
参数 | 类型 | 说明 | 示例值 |
---|---|---|---|
field | String | 设定字段名。字段名的设定非常重要,且是表格数据列的唯一标识 | username |
title | String | 设定当前列标题 | 用户名 |
width | Number/String | 设定列宽,若不填写,则自动分配;若填写,则支持值为:数字、百分比 请结合实际情况,对不同列做不同设定。 | 200 30% |
minWidth | Number | 局部定义当前常规单元格的最小宽度(默认:60),一般用于列宽自动分配的情况。其优先级高于基础参数中的 cellMinWidth | 100 |
type | String | 设定列类型。可选值有:normal(常规列,无需设定)checkbox(复选框列)radio(单选框列,layui 2.4.0 新增)numbers(序号列)space(空列) | 任意一个可选值 |
sort | Boolean | 是否允许排序(默认:false)。如果设置 true,则在对应的表头显示排序icon,从而对列开启排序功能。 | true |
unresize | Boolean | 是否禁用拖拽列宽(默认:false)。默认情况下会根据列类型(type)来决定是否禁用,如复选框列,会自动禁用。而其它普通列,默认允许拖拽列宽,当然你也可以设置 true 来禁用该功能。 | false |
edit | String | 单元格编辑类型(默认不开启)目前只支持:text(输入框) | text |
event | String | 自定义单元格点击事件名,以便在 tool 事件中完成对该单元格的业务处理 | 任意字符 |
style | String | 自定义单元格样式。即传入 CSS 样式 | background-color: #5FB878; color: #fff; |
align | String | 单元格排列方式。可选值有:left(默认)、center(居中)、right(居右) | center |
colspan | Number | 单元格所占列数(默认:1)。一般用于多级表头 | 3 |
rowspan | Number | 单元格所占行数(默认:1)。一般用于多级表头 | 2 |
templet | String | 自定义列模板,模板遵循 laytpl 语法。这是一个非常实用的功能,你可借助它实现逻辑处理,以及将原始数据转化成其它格式,如时间戳转化为日期字符等 | 详见自定义模板 |
toolbar | String | 绑定工具条模板。可在每行对应的列中出现一些自定义的操作性按钮 | 详见行工具事件 |
异步数据参数一览表
参数名 | 功能 |
---|---|
url | 接口地址。默认会自动传递两个参数:?page=1&limit=30(该参数可通过 request 自定义) page 代表当前页码、limit 代表每页数据量 |
method | 接口http请求类型,默认:get |
where | 接口的其它参数。如:where: {token: ‘sasasas’, id: 123} |
contentType | 发送到服务端的内容编码类型。如果你要发送 json 内容,可以设置:contentType: ‘application/json’ |
headers | 接口的请求头。如:headers: {token: ‘sasasas’} |
parseData | 数据格式解析的回调函数,用于将返回的任意数据格式解析成 table 组件规定的数据格式。该参数非常实用,系 layui 2.4.0 开始新增 |
request | 用于对分页请求的参数:page、limit重新设定名称 |
response | 用来重新设定返回的数据格式 |
注意:request 和 response 参数均为 layui 2.1.0 版本新增
调用示例:
//“方法级渲染”配置方式
table.render({ //其它参数在此省略
url: '/api/data/'
/*
where: {token: 'sasasas', id: 123} //如果无需传递额外参数,可不加该参数
method: 'post' //如果无需自定义HTTP类型,可不加该参数
request: {
pageName: "请求分页的参数字段名,默认为 page",
limitName: "请求每页数量的参数字段名,默认为 limit"
} //如果无需自定义请求参数,可不加该参数
response: {
statusName: "状态码的字段名,默认code",
statusCode: 表示数据请求成功的状态码,默认0,
msgName: "表示请求信息的字段名,默认为空",
countName: "表示数据总条数的字段名,默认为count",
dataName: "数据列表的字段名,默认为data"
} //如果无需自定义数据响应名称,可不加该参数
*/
});
高度参数设置
类型:Number/String,可选值如下:
可选值 | 说明 | 示例 |
---|---|---|
不填写 | 默认情况。高度随数据列表而适应,表格容器不会出现纵向滚动条 | - |
固定值 | 设定一个数字,用于定义容器高度,当容器中的内容超出了该高度时,会自动出现纵向滚动条 | height: 315 |
full-差值 | 高度将始终铺满,无论浏览器尺寸如何。这是一个特定的语法格式,其中 full 是固定的,而 差值 则是一个数值,这需要你来预估,比如:表格容器距离浏览器顶部和底部的距离“和” PS:该功能为 layui 2.1.0 版本中新增 | height: ‘full-20’ |
done回调
类型:Function,默认值:无
无论是异步请求数据,还是直接赋值数据,都会触发该回调。你可以利用该回调做一些表格以外元素的渲染。
table.render({ //其它参数在此省略
done: function(res, curr, count){
//如果是异步请求数据方式,res即为你接口返回的信息。
//如果是直接赋值的方式,res即为:{data: [], count: 99} data为当前页数据、count为数据总长度
console.log(res);
//得到当前页码
console.log(curr);
//得到数据总量
console.log(count);
}
});
表格基础方法
获取选中行
语法:table.checkStatus(‘ID’),其中 ID 为基础参数 id 对应的值(见:设定容器唯一ID)
var checkStatus = table.checkStatus('idTest'); //idTest 即为基础参数 id 对应的值
console.log(checkStatus.data) //获取选中行的数据
console.log(checkStatus.data.length) //获取选中行数量,可作为是否有选中行的条件
console.log(checkStatus.isAll ) //表格是否全选
删除/修改行
在行事件中通过事件处理函数的形参对象的 del、update 方法实现,下方行事件中有介绍。
表格事件监听
语法:table.on(‘event(filter)’, callback); 注:event为内置事件名,filter为容器lay-filter设定的值。默认情况下,事件所监听的是全部的table模块容器,但如果你只想监听某一个容器,使用事件过滤器即可。
table模块在Layui事件机制中注册了专属事件,如果你使用layui.onevent()自定义模块事件,请勿占用table名。
监听复选框选择
点击复选框时触发,回调函数返回一个object参数,携带的成员如下:
table.on('checkbox(test)', function(obj){
console.log(obj.checked); //当前是否选中状态
console.log(obj.data); //选中行的相关数据
console.log(obj.type); //如果触发的是全选,则为:all,如果触发的是单选,则为:one
});
监听单元格编辑
单元格被编辑,且值发生改变时触发,回调函数返回一个object参数,携带的成员如下:
table.on('edit(test)', function(obj){ //注:edit是固定事件名,test是table原始容器的属性 lay-filter="对应的值"
console.log(obj.value); //得到修改后的值
console.log(obj.field); //当前编辑的字段名
console.log(obj.data); //所在行的所有相关数据
});
监听行单双击事件
点击或双击行时触发。该事件为 layui 2.4.0 开始新增
//监听行单击事件
table.on('row(test)', function(obj){
console.log(obj.tr) //得到当前行元素对象
console.log(obj.data) //得到当前行数据
//obj.del(); //删除当前行
//obj.update(fields) //修改当前行数据
});
//监听行双击事件
table.on('rowDouble(test)', function(obj){
//obj 同上
});
监听行工具事件
table.on('tool(test)', 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 === 'detail'){ //查看
//do somehing
} else if(layEvent === 'del'){ //删除
layer.confirm('真的删除行么', function(index){
obj.del(); //删除对应行(tr)的DOM结构,并更新缓存
layer.close(index);
//向服务端发送删除指令
});
} else if(layEvent === 'edit'){ //编辑
//do something
//同步更新缓存对应的值
obj.update({
username: '123'
,title: 'xxx'
});
} else if(layEvent === 'LAYTABLE_TIPS'){
layer.alert('Hi,头部工具栏扩展的右侧图标。');
}
});
表格重载
语法 | 说明 | 适用场景 |
---|---|---|
table.reload(ID, options, isDeep) | 参数 ID 即为基础参数id对应的值,见:设定容器唯一ID 参数 options 即为各项基础参数,isDeep 表示是否深克隆重载参数 | 所有渲染方式 |
tableIns.reload(options, isDeep) | 参数同上 tableIns 可通过 var tableIns = table.render() 得到 | 仅限方法级渲染 |
layer 弹窗
依赖模块 layer。由于弹窗模块过于出色,所以 Layui 至今仍将她作为独立组件来维护。
核心方法
语法:layer.open(options)
。这基本上是露脸率最高的方法,不管是使用哪种快捷方式创建层,都是走layer.open(),创建任何类型的弹层都会返回一个当前层索引。
options 即是基础参数:
属性名 | 描述 | 值 | 默认值 |
---|---|---|---|
type | 弹窗层的类型 | layer提供了5种层类型。可传入的值有:0(信息框,默认)1(页面层)2(iframe层)3(加载层)4(tips层)。 若你采用layer.open({type: 1})方式调用,则type为必填项(信息框除外) | 0 |
title | 标题 | title支持三种类型的值,若你传入的是普通的字符串,如title :’我是标题’,那么只会改变标题文本;若你还需要自定义标题区域样式,那么你可以title: [‘文本’, ‘font-size:18px;’],数组第二项可以写任意css样式;如果你不想显示标题栏,你可以title: false | 信息 |
content | 弹窗显示内容 | content可传入的值是灵活多变的,不仅可以传入普通的html内容,还可以指定DOM,更可以随着type的不同而不同。譬如: | “” |
skin | 弹窗皮肤类名 | 目前layer内置的skin有:layui-layer-lan、layui-layer-molv,也支持自定义,相当于弹窗组件的父元素的类名 | “” |
area | 宽高 | 在默认状态下,layer是宽高都自适应的,但当你只想定义宽度时,你可以area: ‘500px’,高度仍然是自适应的。当你宽高都要定义时,你可以area: [‘500px’, ‘300px’] | auto |
offset | 坐标 | offset默认情况下不用设置。但如果你不想垂直水平居中,你还可以进行以下赋值:”auto”、”100px”、[“100px”, “20px”]、”t”、”r”、”b”、”l”、”lt”、”lb”、”rt”、”rb” | 垂直水平居中 |
icon | 图标 | 信息框默认不显示图标。当你想显示图标时,默认皮肤可以传入0-6。如果是加载层,可以传入0-2。 | -1(信息框)/0(加载层) |
btn | 按钮 | 信息框模式时,btn默认是一个确认按钮,其它层类型则默认不显示,加载层和tips层则无效。当您只想自定义一个按钮时,你可以btn: ‘我知道了’,当你要定义两个按钮时,你可以btn: [‘yes’, ‘no’]。当然,你也可以定义更多按钮,比如:btn: [‘按钮1’, ‘按钮2’, ‘按钮3’, …],按钮1的回调是yes,而从按钮2开始,则回调为btn2: function(){},以此类推。 | 确认 |
btnAlign | 按钮排列 | 你可以快捷定义按钮的排列位置,btnAlign的默认值为r,即右对齐。该参数可支持的赋值如下:l 左对齐、r 右对齐、c 居中对齐 | r |
closeBtn | 关闭按钮的风格 | layer提供了两种风格的关闭按钮,可通过配置1和2来展示,如果不显示,则closeBtn: 0 | 1 |
shade | 遮罩 | 即弹层外区域。默认是0.3透明度的黑色背景(’#000’)。如果你想定义别的颜色,可以shade: [0.8, ‘#393D49’];如果你不想显示遮罩,可以shade: 0/false | 0.3 |
shadeClose | 是否点击遮罩关闭 | 如果你的shade是存在的,那么你可以设定shadeClose来控制点击弹层外区域关闭。 | false |
time | 自动关闭的毫秒值 | 默认不会自动关闭。当你想自动关闭时,可以time: 5000,即代表5秒后自动关闭,注意单位是毫秒(1秒=1000毫秒) | 0 |
id | 用于控制弹层的唯一标识 | 设置该值后,不管是什么类型的层,都只允许同时弹出一个。一般用于页面层和iframe层模式 | “” |
anim | 弹出动画 | 弹窗的出场动画,类型有 0-6 | 0 |
resize | 是否允许拉伸 | 默认情况下,你可以在弹层右下角拖动来拉伸尺寸。如果对指定的弹层屏蔽该功能,设置 false即可。该参数对loading、tips层无效 | true |
zIndex | 层叠顺序 | 一般用于解决和其它组件的层叠冲突。 | 19891014 |
move | 触发拖动的元素 | 默认是触发标题区域拖拽。如果你想单独定义,指向元素的选择器或者DOM即可。如move: ‘.mine-move’。你还配置设定move: false来禁止拖拽 | .layui-layer-title |
tips | tips方向和颜色 | tips层的私有参数。支持上右下**左四个方向,通过1-4进行方向设定。如tips: 3则表示在元素的下面出现。有时你还可能会定义一些颜色,可以设定tips: [1, ‘#c00’] | 2 |
tipsMore | 是否允许多个tips | 允许多个意味着不会销毁之前的tips层。通过tipsMore: true开启 | false |
success/yes/cancel/end | 回调方法 | 弹窗成功/点击确定按钮/点击取消按钮/弹窗被销毁的回调函数 |
便捷方法
普通信息框
语法:layer.alert(content, options, yes)
一般用于对用户造成比较强烈的关注,类似系统alert,但却比alert更灵便。它的参数是自动向左补齐的。通过第二个参数,可以设定各种你所需要的基础参数,但如果你不需要的话,直接写回调即可。如:
//eg1
layer.alert('只想简单的提示');
//eg2
layer.alert('加了个图标', {icon: 1}); //这时如果你也还想执行yes回调,可以放在第三个参数中。
//eg3
layer.alert('有了回调', function(index){
//do something
layer.close(index);
});
询问框
语法:layer.confirm(content, options, yes, cancel)
类似系统confirm,但却远胜confirm,另外它不是和系统的confirm一样阻塞你需要把交互的语句放在回调体中。同样的,它的参数也是自动补齐的。
//eg1
layer.confirm('is not?', {icon: 3, title:'提示'}, function(index){
//do something
layer.close(index);
});
//eg2
layer.confirm('is not?', function(index){
//do something
layer.close(index);
});
提示框
语法:layer.msg(content, options, end)
露脸率最高的提示框,不仅占据很少的面积,而且默认还会3秒自动消失。
//eg1
layer.msg('只想弱弱提示');
//eg2
layer.msg('有表情地提示', {icon: 6});
//eg3
layer.msg('关闭后想做些什么', function(){
//do something
});
//eg
layer.msg('同上', {
icon: 1,
time: 2000 //2秒关闭(如果不配置,默认是3秒)
}, function(){
//do something
});
加载框
语法:layer.load(icon, options)
type:3 的深度定制。load并不需要你传太多的参数,但如果你不喜欢默认的加载风格,你还有选择空间。icon支持传入0-2如果是0,无需传。另外特别注意一点:load默认是不会自动关闭的,因为你一般会在ajax回调体中关闭它。
//eg1
var index = layer.load();
//eg2
var index = layer.load(1); //换了种风格
//eg3
var index = layer.load(2, {time: 10*1000}); //又换了种风格,并且设定最长等待10秒
//关闭
layer.close(index);
吸附层
语法:layer.tips(content, follow, options)
type:4的深度定制。
//eg1
layer.tips('只想提示地精准些', '#id');
//eg 2
$('#id').on('click', function(){
var that = this;
layer.tips('只想提示地精准些', that); //在元素的事件回调体中,follow直接赋予this即可
});
//eg 3
layer.tips('在上面', '#id', {
tips: 1
});
输入层
语法:layer.prompt(options, yes)
prompt的参数也是向前补齐的。options不仅可支持传入基础参数,还可以传入prompt专用的属性。当然,也可以不传。yes携带value 表单值 index 索引 elem 表单元素
//prompt层新定制的成员如下
{
formType: 1, //输入框类型,支持0(文本)默认1(密码)2(多行文本)
value: '', //初始时的值,默认空字符
maxlength: 140, //可输入文本的最大长度,默认500
}
//例子1
layer.prompt(function(value, index, elem){
alert(value); //得到value
layer.close(index);
});
//例子2
layer.prompt({
formType: 2,
value: '初始值',
title: '请输入值',
area: ['800px', '350px'] //自定义文本域宽高
}, function(value, index, elem){
alert(value); //得到value
layer.close(index);
});
Tab层
语法:layer.tab(options)
tab层只单独定制了一个成员,即tab: [],这个好像没有什么可介绍的,简单粗暴看例子
layer.tab({
area: ['600px', '300px'],
tab: [{
title: 'TAB1',
content: '内容1'
}, {
title: 'TAB2',
content: '内容2'
}, {
title: 'TAB3',
content: '内容3'
}]
});
相册层
语法:layer.photos(options)
相册层,也可以称之为图片查看器。它的出场动画从layer内置的动画类型中随机展现。photos支持传入json和直接读取页面图片两种方式。如果是json传入,如下:
$.getJSON('/jquery/layer/test/photos.json', function(json){
layer.photos({
photos: json
,anim: 5 //0-6的选择,指定弹出图片动画类型,默认随机(请注意,3.0之前的版本用shift参数)
});
});
//而返回的json需严格按照如下格式:
{
"title": "", //相册标题
"id": 123, //相册id
"start": 0, //初始显示的图片序号,默认0
"data": [ //相册包含的图片,数组格式
{
"alt": "图片名",
"pid": 666, //图片id
"src": "", //原图地址
"thumb": "" //缩略图地址
}
]
}
如果是直接从页面中获取图片,那么需要指向图片的父容器,并且你的img可以设定一些规定的属性(但不是必须的)。
//HTML示例
<div id="layer-photos-demo" class="layer-photos-demo">
<img layer-pid="图片id,可以不写" layer-src="大图地址" src="缩略图" alt="图片名">
<img layer-pid="图片id,可以不写" layer-src="大图地址" src="缩略图" alt="图片名">
</div>
<script>
//调用示例
layer.photos({
photos: '#layer-photos-demo'
,anim: 5 //0-6的选择,指定弹出图片动画类型,默认随机(请注意,3.0之前的版本用shift参数)
});
</script>
另外,photos还有个tab回调,切换图片时触发。
layer.photos({
photos: json/选择器,
tab: function(pic, layero){
console.log(pic) //当前图片的一些信息
}
});
弹窗关闭的方法
语法:layer.close(index)
每一个 layer 的弹出层都会返回一个标识 index,将其传入这个方法即可实现关闭该弹出层。
如果你想关闭最新弹出的层,直接获取 layer.index 即可。它获取的始终是最新弹出的某个层,值是由layer内部动态递增计算的。
语法:layer.closeAll()
如果希望一次性清空页面上所有的弹出层,可以使用这个方法。
如果你只想关闭某个类型的层,那么你可以:layer.closeAll('page');
关闭所有页面层
表单
在一个容器中设定 class=”layui-form” 来标识一个表单元素块,通过规范好的HTML结构及CSS类,来组装成各式各样的表单元素,并通过内置的 form模块 来完成各种交互。
注意:如果不加载form模块,select、checkbox、radio等将无法显示,并且无法使用form相关功能。
表单元素
通过给容器设定 class=”layui-form” 来标识一个 Layui 表单元素,可以使用 Layui 的 form 模块提供的API。
<form class="layui-form">
使用form标签,需要注意在提交事件中组织表单的默认提交动作
</form>
<div class="layui-form">
使用div标签,不需要在提交事件中阻止默认事件
</div>
表单内部常用类:
类名 | 说明 |
---|---|
layui-form-item | 常用于设定表单内部一块内容 |
layui-form-label | 美化 label 区域 |
layui-input-block | 包含表单内容的块元素,搭配 label 区域使用 |
layui-inline | 一行内承载多个表单内容时设定 |
layui-input-inline | 在 layui-inline 元素中使用,限定其中一个表单组件 |
layui-form-mid | 行间浮动内容内容,上下居中,有右间距 |
layui-word-aux | 表单辅助文字的样式 |
输入框
<input type="text" name="title" required placeholder="请输入标题" autocomplete="off" class="layui-input">
- required:注册浏览器所规定的必填字段
- class=”layui-input”:layui.css提供的通用CSS类
下拉框
<select name="city">
<option value="">请选择一个城市</option>
<option value="010">北京</option>
<option value="021">上海</option>
<option value="0571">杭州</option>
</select>
属性selected可设定默认项,属性disabled开启禁用,select和option标签都支持
<select name="city">
<option value="010">北京</option>
<option value="021" disabled>上海(禁用效果)</option>
<option value="0571" selected>杭州</option>
</select>
通过 optgroup 标签给select分组:
<select name="quiz">
<option value="">请选择</option>
<optgroup label="城市记忆">
<option value="你工作的第一个城市">你工作的第一个城市?</option>
</optgroup>
<optgroup label="学生时代">
<option value="你的工号">你的工号?</option>
<option value="你最喜欢的老师">你最喜欢的老师?</option>
</optgroup>
</select>
通过设定属性 lay-search 来开启搜索匹配功能:
<select name="city" lay-search>
<option value="010">layer</option>
<option value="021">form</option>
<option value="0571" selected>layim</option>
……
</select>
复选框
<input type="checkbox" name="" title="写作" checked>
- 属性title可自定义文本(温馨提示:如果只想显示复选框,可以不用设置title)
- 属性checked 可设定默认选中
- 属性 disabled 可设定禁用
- 属性lay-skin 可设置复选框的原始风格
- primary 原始风格
- switch 开关风格。通过设定属性 lay-text 定义开关两种状态的文本,用 “|” 隔开
- 设置value=”1” 可自定义值,否则选中时返回的就是默认的on
单选框
<input type="radio" name="sex" value="nan" title="男">
<input type="radio" name="sex" value="nv" title="女" checked>
<input type="radio" name="sex" value="" title="中性" disabled>
- 属性title 可自定义文本
- 属性disabled 开启禁用
- 设置value=”xxx” 可自定义值,否则选中时返回的就是默认的on
文本域
<textarea name="" placeholder="请输入" class="layui-textarea"></textarea>
class=”layui-textarea”:layui.css提供的通用CSS类
表单方框风格
通过给表单容器元素追加 layui-form-pane 的class,来设定表单的方框风格。需要注意的是 复选框/开关/单选框 这些组合在该风格下需要额外添加 pane属性(否则会看起来比较别扭),如:
<form class="layui-form layui-form-pane" action="">
内部结构都一样,值得注意的是 复选框/开关/单选框 这些组合在该风格下需要额外添加 pane属性(否则会看起来比较别扭),如:
<div class="layui-form-item" pane>
<label class="layui-form-label">单选框</label>
<div class="layui-input-block">
<input type="radio" name="sex" value="男" title="男">
<input type="radio" name="sex" value="女" title="女" checked>
</div>
</div>
</form>
忽略美化渲染
对表单元素增加属性 lay-ignore 设置后,将不会对该标签进行美化渲染,即保留系统风格。
表单的预设元素属性
预设元素属性可以使得一些交互操作交由form模块内部、或者开发者来借助form提供的JS接口精确控制。目前Layui可支持的属性如下表所示:
属性名 | 属性值 | 说明 |
---|---|---|
title | 任意字符 | 设定元素名称,一般用于checkbox、radio框 |
lay-skin | switch(开关风格) primary(原始风格) | 定义元素的风格,目前只对 checkbox 元素有效,可将其转变为开关样式 |
lay-ignore | 任意字符或不设值 | 是否忽略元素美化处理。设置后,将不会对该元素进行初始化渲染,即保留系统风格 |
lay-filter | 任意字符 | 事件过滤器,主要用于事件的精确匹配,跟选择器是比较类似的。其实它并不私属于form模块,它在 layui 的很多基于事件的接口中都会应用到。 |
lay-verify | required(必填项) | 同时支持多条规则的验证。详见表单验证 |
lay-verType | tips(吸附层) alert(对话框) msg(默认) | 用于定义异常提示层模式。 |
lay-reqText | 任意字符 | 用于自定义必填项(即设定了 lay-verify=”required” 的表单)的提示文本 注意:该功能为 layui 2.5.0 新增 |
lay-submit | 无需填写值 | 绑定触发提交的元素,如button |
表单事件
更新渲染
当表单的选择元素是动态插入的时候,需要执行 form.render(type, filter) 方法让其生效。第一个参数:type,为表单的 type 类型,可选。默认对全部类型的表单进行一次更新。可局部刷新的 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 状态
//……
事件监听
语法:form.on('event(过滤器值)', callback);
form模块在 layui 事件机制中注册了专属事件,所以当你使用layui.onevent()自定义模块事件时,请勿占用form名。form支持的事件如下:
event | 描述 |
---|---|
select | 监听select下拉选择事件 |
checkbox | 监听checkbox复选框勾选事件 |
switch | 监听checkbox复选框开关事件 |
radio | 监听radio单选框事件 |
submit | 监听表单提交事件 |
默认情况下,事件所监听的是全部的form模块元素,但如果你只想监听某一个元素,使用事件过滤器即可。下方为具体监听事件的示例。
监听select选择
下拉选择框被选中时触发,回调函数返回一个object参数,携带两个成员:
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值
});
监听提交事件
按钮点击或者表单被执行提交时触发,其中回调函数只有在验证全部通过后才会进入,回调返回三个成员:
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; //阻止表单跳转。如果需要表单跳转,去掉这段即可。
});
再次温馨提示:上述的submit(\)*中的 * 号为事件过滤器的值,是在你绑定执行提交的元素时设定的,如:
<button lay-submit lay-filter="*">提交</button>
你可以把 * 号换成任意的值,如:lay-filter=”go”,但监听事件时也要改成 form.on(‘submit(go)’, callback);
表单赋值/取值
语法:form.val(‘filter’, object);
用于给指定表单集合的元素赋值和取值。如果 object 参数存在,则为赋值;如果 object 参数不存在,则为取值。
注:其中「取值」功能为 layui 2.5.5 开始新增
//给表单赋值
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");
第二个参数中的键值是表单元素对应的 name 和 value。
表单验证
Layui 对表单的验证进行了非常巧妙的支持,大多数时候你只需要在表单元素上加上 lay-verify=”” 属性值即可。
属性名 | 说明 |
---|---|
required | 必填项 |
phone | 手机号 |
邮箱 | |
url | 网址 |
date | 日期 |
identity | 身份证 |
number | 数字 |
自定义值 | 自定义校验属性 |
例:
<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 '用户名不能全为数字';
}
//如果不想自动弹出默认提示框,可以直接返回 true,这时你可以通过其他任意方式提示(v2.5.7 新增)
if(value === 'xxx'){
alert('用户名不能为敏感词');
return true;
}
}
//我们既支持上述函数式的方式,也支持下述数组的形式
//数组的两个值分别代表:[正则匹配、匹配不符时的提示文字]
,pass: [
/^[\S]{6,12}$/
,'密码必须6到12位,且不能出现空格'
]
});
当我们自定义了类似上面的验证规则后,你只需要把 key 赋值给输入框的 lay-verify 属性即可:
<input type="text" lay-verify="username" placeholder="请输入用户名">
<input type="password" lay-verify="pass" placeholder="请输入密码">