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">&#xe60c;</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">&#xe608;</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:设定可选值的对象,包含 headerElembodyElem 属性
    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。这里主要介绍方法渲染:首先在页面防止一个空表格元素 *

    ,然后通过 *table.render() 方法在该元素位置渲染出数据表格,render 方法接受的参数对象包含如下属性:

    参数 类型 说明 示例值
    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 开始,该参数也可以自动从 *
    * 中的 id 参数中获取。
    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 ) //表格是否全选
    删除/修改行

    在行事件中通过事件处理函数的形参对象的 delupdate 方法实现,下方行事件中有介绍。

    表格事件监听

    语法: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-lanlayui-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提供了两种风格的关闭按钮,可通过配置12来展示,如果不显示,则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 手机号
    email 邮箱
    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="请输入密码">