【layui】form操作笔记

表单组件

表单组件form是包含输入框、选择框、复选框、开关、单选框等表单项组件的集合,主要用于对表单域进行各类动态化渲染和相关的交互操作。form是 Layui 最常用的组件之一。

布局

  • 通过 class=“layui-form” 定义一个表单域,通常设置在标签上, 或普通
    标签亦可。
  • 通过 class=“layui-form-item” 定义一个块级元素的表单项容器
  • 通过 class=“layui-form-label” 定义标签
  • 通过 class=“layui-input-block” 定义表单项父容器为块级元素
  • 通过 class=“layui-input-inline” 或 class=“layui-inline” 定义表单项父容器为行内块元素

属性

属性描述
title自定义设置表单元素标题,一般用于 checkbox,radio 元素
lay-filter自定义设置表单元素的过滤器,以便用于执行相关方法时的参数匹配
lay-verifyrequired、phone、email 、url、number、date、identity、自定义规则值设置表单项的验证规则,支持单条或多条规则如:lay-verify=“required”、lay-verify="required l email"lay-verify=“其他自定义规则值”
lay-vertypetips吸附层、alert 对话框、msg 默认设置验证异常时的提示层模式
lay-reqtext自定义设置必填项(lay-verify=“required”)的默认提示文本
lay-skin设置 UI 风格。 元素 私有属性
lay-submit无需值设置元素(一般为 标签)触发 submit 提交事件
lay-ignore无需值设置表单元素忽略渲染,即让元素保留系统原始 UI 风格
<form class="layui-form" lay-filter="form-1">
  <input type="text" class="layui-input" lay-verify="email">
  <input type="checkbox" lay-skin="switch" lay-filter="agree" title="同意">
  <button class="layui-btn" lay-submit>提交</button>
</form>

API

API描述
var form = layui.form获得 form 模块
form.render(type, filter)表单域组件渲染,核心方法
form.verify(obj)自定义表单验证的规则
form.val(filter, obj)表单赋值或取值
form.on(‘event(filter)’, callback)表单事件监听
form.set(options)设置 form 组件全局配置项
form.config获取 form 组件全局配置项
渲染

form.render(type, filter);

  • 参数 type 可选,对应表单组件类型,支持:input,select,checkbox,radio;若不填,则指向所有类型。
  • 参数 filter 可选,对应 class=“layui-form” 所在元素的 lay-filter 属性值,用于指定需渲染的表单区域。
    form 组件会在元素加载完毕后,自动对所有表单区域完成一次渲染,因此该方法主要用于对动态插入的表单元素的渲染。
<form class="layui-form" lay-filter="test">
  动态插入的表单域
</form>
<!-- import layui --> 
<script>
layui.use(function(){
  var form = layui.form;
  // 当表单元素被动态插入时,需主动进行组件渲染才能显示
  form.render(); // 渲染全部表单
  form.render('select'); // 仅渲染 select 元素
  form.render(null, 'test'); // 仅渲染 lay-filter="test" 的容器内的全部表单
  form.render('checkbox', 'test'); // 仅渲染  lay-filter="test" 的容器内的 checkbox 元素
})
</script>
验证

Layui 对表单验证做了巧妙的支持,只需在表单元素上设置 lay-verify=“” 属性值即可指定验证规则,如:

<div class="layui-form">
  <input type="text" lay-verify="required" placeholder="必填项">
  <input type="text" lay-verify="email" placeholder="非必填项,但若有值则验证邮箱格式">
  <input type="text" lay-verify="required|number" placeholder="必填项,并验证数字格式">
  <button class="layui-btn" lay-submit>提交</button>
</div>
自定义验证规则

form.verify(obj);

  • 参数 obj 是一个对象,用于定义验证规则的集合。

除了内置的验证规则外,form 还允许自定义验证规则,规则以函数命名,返回的参数如下:

form.verify({
  // 必填项
  rule1: function(value, elem) {
  	console.log(value); // 当前进入验证的表单项的值
    console.log(elem); // 当前进入验证的表单项的 DOM 元素
    // 自定义规则
    if (value.length < 6) {
      return '不能小于 6 个字符';
    }
  },
  // 非必填项,只有当值填写时才验证自定义规则
  rule2: function(value, elem) {
    if (!value) return; // 若值未填写,不进行后续规则验证
    // 自定义规则
    if (/^[A-Z]/.test(value)) {
      return '必须用大写字符开头';
    }
  },
  // 自定义提示方式
  rule3: function(value, elem) {
    // 自定义规则和自定义提示方式
    if(value === 'xxx'){
      alert('用户名不能为敏感词'); // 此处以系统自带的 alert 提示方式为例
      return true; // 返回 true 即可阻止 form 默认的提示风格
    }
  }
});

完整示例:

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>Demo</title>
  <!-- 请勿在项目正式环境中引用该 layui.css 地址 -->
  <link href="//unpkg.com/layui@2.9.1/dist/css/layui.css" rel="stylesheet">
</head>
<body>
<form class="layui-form">
  <input type="text" name="username" lay-verify="required|username" placeholder="用户名" class="layui-input">
  <hr>
  <input type="password" name="password" lay-verify="password" placeholder="密码" class="layui-input">
  <hr>
  <input type="text" name="motto" lay-verify="motto" placeholder="座右铭" class="layui-input">
  <hr>
  <button class="layui-btn" lay-submit lay-filter="demo-verify">提交</button>
</form>
  
<!-- 请勿在项目正式环境中引用该 layui.js 地址 -->
<script src="//unpkg.com/layui@2.9.1/dist/layui.js"></script> 
<script>
layui.use(function(){
  var form = layui.form;
  // 自定义验证规则
  form.verify({
    // 验证用户名,且为必填项
    username: function(value, elem){
      if (!new RegExp("^[a-zA-Z0-9_\u4e00-\u9fa5\\s·]+$").test(value)) {
        return '用户名不能有特殊字符';
      }
      if (/(^_)|(__)|(_+$)/.test(value)) {
        return '用户名首尾不能出现下划线';
      }
      if (/^\d+$/.test(value)) {
        return '用户名不能全为数字';
      }
    },
    // 验证密码,且为必填项
    password: function(value, elem) {
      if (!/^[\S]{6,16}$/.test(value)) {
        return '密码必须为 6 到 16 位的非空字符';
      }
    },
    // 验证座右铭,且为非必填项
    motto: function(value, elem) {
      if (!value) return; // 非必填
      // 自定义规则
      if (!new RegExp("^[a-zA-Z0-9_\u4e00-\u9fa5\\s·]+$").test(value)) {
        return '座右铭不能有特殊字符';
      }
    }
  });
  // 提交事件
  form.on('submit(demo-verify)', function(data){
    var field = data.field; // 获取表单字段值
    // 显示填写结果,仅作演示用
    layer.alert(JSON.stringify(field), {
      title: '当前填写的字段值'
    });
    // 此处可执行 Ajax 等操作
    // …
    return false; // 阻止默认 form 跳转
  });
}) 
</script>

</body>
</html>
赋值/取值

form.val(filter, obj);

  • 参数 filter 为表单域容器(class=“layui-form”)的 lay-filter 属性值
  • 参数 obj 可选。若参数存在,则对表单域进行赋值;若参数不存在,则为对表单域进行取值。
	form.val('demo-val-filter', {
      "username": "贤心", // "name": "value"
      "password": "AAAAAA",
      "interest": 1,
      "like[write]": true, // 复选框选中状态
      "close": true, // 开关状态
      "sex": "女",
      "desc": "Layui 用于更简单快速地构建网页界面"
    });
	var data = form.val('demo-val-filter');
提交

在表单域中,对指定按钮设置 lay-submit 属性,即意味着点击该按钮时,将触发提交事件。如:

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>Demo</title>
  <!-- 请勿在项目正式环境中引用该 layui.css 地址 -->
  <link href="//unpkg.com/layui@2.9.1/dist/css/layui.css" rel="stylesheet">
</head>
<body>
<form class="layui-form">  
  <input type="text" name="nickname" lay-verify="required" class="layui-input">
  <hr>
  <button class="layui-btn" lay-submit lay-filter="demo-submit">提交按钮</button>
  <button class="layui-btn" id="test-btn-other">普通按钮</button>
</form>
  
<!-- 请勿在项目正式环境中引用该 layui.js 地址 -->
<script src="//unpkg.com/layui@2.9.1/dist/layui.js"></script> 
<script>
layui.use(function(){
  var $ = layui.$;
  var form = layui.form;
  var layer = layui.layer;
  // 提交事件
  form.on('submit(demo-submit)', function(data){
    var field = data.field; // 获取表单全部字段值
    var elem = data.elem; // 获取当前触发事件的元素 DOM 对象,一般为 button 标签
    var elemForm = data.form; // 获取当前表单域的 form 元素对象,若容器为 form 标签才会返回。
    // 显示填写结果,仅作演示用
    layer.alert(JSON.stringify(field), {
      title: '当前填写的字段值'
    });
    // 此处可执行 Ajax 等操作
    // …
    return false; // 阻止默认 form 跳转
  });
  // 普通按钮
  $('#test-btn-other').on('click', function(){
    layer.msg('点击未设置特定属性的按钮不会触发组件的提交事件');
    return false;
  });
});
</script>

</body>
</html>
事件

form.on(‘event(filter)’, callback);

  • 参数 event(filter) 是一个特定结构。event 为事件名,支持:select,checkbox,switch,radio,submit;filter 为元素属性 lay-filter 对应的值,若不填,则指向所有同类组件的事件。
  • 参数 callback 为事件执行时的回调函数,并返回一个包含各种值的 object 类型的参数。

如下以 select 事件为例:

// 指向所有 select 组件的选择事件
form.on('select', function(data){
  console.log(data);
});
// 指向元素为 `<select lay-filter="test"></select>` 的选择事件
form.on('select(test)', function(data){
  console.log(data);
});
form表单元素包括:text 文本输入框,password密码输入框,checkbox复选框,radio单选框,file 文件域,submit表单提交action指向的文件,reset表单清空,image图片提交按钮,button按钮,hidden隐藏域。 select option select 实现下拉选 callback 是回调函数 layui.模块   模块可以是layui已经存在的模块,也可以通过layui.define([mods], callback) 来自己自定义模块。 如果想要使用模块首先要做的必然是加载模块,layui.use(['laypage', 'layedit'], function(){}); 接下来使用layui风格控件  其实感觉layui帮我们定义好了CSS和许多JS文本,我们需要做的只是按照layui的命名规范选好样式进而使用就可以了。  layu官方文档的命名规范为: CSS命名规范 class命名前缀:layui,连接符:-,如:class="layui-form" 命名格式一般分为两种: 一:layui-模块名-状态或类型 二:layui-状态或类型 因为有些类并非是某个模块所特有,他们通常会是一些公共类。如: 一(定义按钮的原始风格):class="layui-btnlayui-btn-primary" 二(定义内联块状元素):class="layui-inline" 1 2 3 4 5 6 7 8 9 当然还有前面提到的使用模块的js代码: layui.use(['form', 'layedit', 'laydate'], function(){   var form = layui.form   ,layer = layui.layer   ,layedit = layui.layedit   ,laydate = layui.laydate;   //日期   laydate.render({     elem: '#date'   });   laydate.render({     elem: '#date1'   });   //创建一个编辑器   var editIndex = layedit.build('LAY_demo_editor');   //自定义验证规则   form.verify({     title: function(value){       if(value.length < 5){         return '标题至少得5个字符啊';       }     }     ,pass: [/(.+){6,12}$/, '密码必须6到12位']     ,content: function(value){       layedit.sync(editIndex);     }   });   //监听指定开关   form.on('switch(switchTest)', function(data){     layer.msg('开关checked:'+ (this.checked ? 'true' : 'false'), {       offset: '6px'     });     layer.tips('温馨提示:请注意开关状态的文字可以随意定义,而不仅仅是ON|OFF', data.othis)   });   //监听提交   form.on('submit(demo1)', function(data){     layer.alert(JSON.stringify(data.field), {       title: '最终的提交信息'     })     return false;   }); }); 下面我们按照官方文档的开发规范使用一下form表单的例子       表单集合演示           单行输入框                       验证必填项                             验证手机                                   验证邮箱                                       多规则验证                                   验证日期                                   验证链接                                 验证身份证                       自定义验证                   请填写6到12位密码               范围                           -                                 单行选择框                   </opt
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值