layui.form的理解

本文详细介绍了如何在页面中使用LayUI创建表单,包括form标签的运用、input和按钮的样式设置,表单提交与局部刷新,以及自动化渲染、验证规则、取值赋值和事件触发的深入讲解。特别关注了动态数据反显和自定义验证的实现。
<form class="layui-form"></form>

1.class="layui-form",加上这个class,layui就会认为他是一个form表单,即使把form标签换成其他的元素

 <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>

2.使用form表单提交时,我们的每一个input框都可以使用这个样式,其中autocomplete=''off'所代表的的意思是我们在浏览器中输入表单信息的时候,往往input输入框会记录下之前提交表单的信息,以后每次只要双击 input文本输入框就会出现之前输入的文本,这样有时会觉得比较方便,不想启用就off

 <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>

3.提交按钮我们可以使用这个模板,其中lay-submit只针对提交按钮使用,也就是只要加上这个属性,那么他就是提交按钮(之前做点击重置按钮会刷新列表功能时,将这个属性添加到重置button中,点击重置就会验证数据不能为空,就是这个原因), lay-filter="" 的值,4你可以借助该参数,对表单完成局部更新。type="reset",我理解的为:用在重置按钮上,可以清空我们form表单的数据。

form.render(); //更新全部
form.render('select'); //刷新select选择框渲染

4.点击编辑时将这条数据反显回<select>标签里,遇到一个问题:select下拉框已经默认选中‘女’,但是下拉框里面还是显示‘男’,这是因为表单元素是动态插入的。这时 form 模块 的自动化渲染是会对其失效的。你只需要执行 form.render(type, filter); 方法即可。(vue的双向绑定机制下可能不存在这个问题),其中type指的是表单的type类型,默认对全部类型的表单进行一次更新。可局部刷新的 type有:select,checkbox,radio,第二个参数filter的使用方法如下

<div class="layui-form" lay-filter="test1">
  …
</div>
form.render(null, 'test1'); //更新 lay-filter="test1" 所在容器内的全部表单状态
form.render('select', 'test2'); //更新 lay-filter="test2" 所在容器内的全部 select 状态

5.事件触发

默认只支持下面的几种触发事件

 


//语法:
form.on('event(过滤器值)', callback);
//用例
//会对所有select下拉框触发
form.on('select', function(data){
  console.log(data);
})
//只针对会select下拉框lay-filter='test'触发
form.on('select(test)', function(data){
  console.log(data);
});;

 6.表单的验证

只需要在表单元素上加上 lay-verify="" 属性值即可。直接可以使用的主要有:email,require,number,phone 等,如:

<input type="text" lay-verify="email"> 
 
还同时支持多条规则的验证,如下:
<input type="text" lay-verify="required|phone|number">

当然支持自定义验证

<input type="text" lay-verify="username" placeholder="请输入用户名">

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 '用户名不能全为数字';
    }
    
})

7.表单的取值和赋值 

取值:var data1 = form.val("formTest"),赋值:var data1 = form.val("formTest",data);

其中data要符合josn格式,简单来说没有data就是取值,有data就是赋值

//给表单赋值
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");

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
<think>我们正在处理一个关于Layui框架的问题。用户遇到了错误:"version is not a valid module",并希望知道如何正确定义一个本地的version.js文件。 根据Layui的模块机制,每个模块都需要通过layui.define来定义。对于version模块,我们需要创建一个version.js文件,并在其中定义该模块。 步骤: 1. 创建version.js文件,放在Layui的模块目录下(通常是layui/modules目录)。 2. 在version.js中,使用layui.define来定义模块,并返回版本信息。 3. 在HTML页面中,正确引入Layui的基础文件(layui.js或layui.all.js)以及配置模块路径(如果需要自定义路径)。 4. 使用layui.use来加载version模块。 注意:如果version.js不在默认的modules目录下,可能需要配置路径。 示例代码: 文件结构: ``` project/ ├── layui/ (Layui框架目录) ├── modules/ (自定义模块目录,假设我们将version.js放在这里) │ └── version.js └── index.html ``` version.js 内容: ```javascript layui.define(function(exports) { // 模块的代码 var version = '1.0.0'; // 这里可以定义版本信息 // 输出version模块 exports('version', version); }); ``` 在index.html中: ```html <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Layui 自定义模块</title> <link rel="stylesheet" href="layui/css/layui.css"> <script src="layui/layui.js"></script> <!-- 配置模块路径,如果自定义模块不在默认路径下 --> <script> layui.config({ base: '/modules/' // 模块所在目录(相对于项目根目录) }).use('version', function(){ var version = layui.version; console.log('当前版本:', version); }); </script> </head> <body> </body> </html> ``` 注意:上面的base路径是相对于项目根目录的,如果项目部署在服务器上,请确保路径正确。 如果用户将version.js放在layui默认的模块目录(即layui/modules)下,则不需要配置base路径,直接使用模块名即可。 常见错误: 1. 模块路径配置错误:确保base路径指向存放version.js的目录。 2. 模块定义错误:在version.js中,必须使用layui.define来定义,并且exports的参数第一个是模块名(字符串),第二个是模块的值。 3. 模块名不一致:在layui.use中使用的模块名必须与exports输出的模块名一致。 如果按照以上步骤,应该可以解决用户的问题。 根据用户的问题,我们还可以生成相关问题,以帮助用户深入理解Layui模块机制。 §§相关问题§§ 1. Layui中如何配置多个自定义模块的路径? 2.Layui模块中如何依赖其他模块? 3. Layui模块加载失败常见的原因有哪些? 4. 如何动态加载Layui模块?</think>### Layui模块加载错误:定义本地version.js文件 当Layui提示`version is not a valid module`错误时,通常是因为模块定义不规范或加载路径错误。以下是正确定义本地version.js文件的完整步骤: --- ### 解决方案 #### 1. 创建规范的version.js文件 ```javascript // version.js 文件内容 layui.define(function(exports) { // 模块核心逻辑 var obj = { version: "1.0.0", getInfo: function() { return "Local Version Module"; } }; // 关键输出语句 exports('version', obj); // 第一个参数必须与文件名一致 }); ``` #### 2. 配置模块路径 在HTML中正确配置模块路径: ```html <script> layui.config({ base: '/modules/' // 指向version.js所在目录 }).use('version', function(){ var version = layui.version; // 正确获取模块对象 console.log(version.getInfo()); // 输出: "Local Version Module" }); </script> ``` #### 3. 文件结构示例 ``` project/ ├── index.html └── modules/ ├── layui/ // Layui核心库 └── version.js // 自定义模块 ``` --- ### 常见错误原因 1. **模块导出错误** ❌ `exports('ver', obj)` (名称与文件名不一致) ✅ `exports('version', obj)` 2. **路径配置错误** ```js // 错误配置 base: '/js/' // 实际文件在 /modules/ ``` 3. **文件权限问题** 确保Web服务器有读取权限(参考Linux权限设置): ```bash chown root:root version.js # 设置所有者 chmod 0644 version.js # 设置权限[^1] ``` --- ### 调试建议 1. 浏览器控制台检查404错误 2. 确认`layui.js`已正确加载 3. 使用完整路径测试: ```js layui.extend({ version: '/modules/version.js' }).use('version'); ``` 相关问题: 1. Layui如何动态加载第三方插件? 2. 模块加载时出现`undefined is not a function`错误如何解决? 3. Layui的模块机制与RequireJS有什么区别? 4. 如何在Layui模块中实现CSS依赖加载? [^1]: 文件权限设置参考 [^2]: 模块加载机制类似GRO合并逻辑 [^3]: 路径错误排查方法
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值