• Layui快速入门之第九节 表格事件的使用


    目录

    一:事件

    二:头部工具栏事件

    三:排序切换事件

     四:列拖拽宽度后的事件

    五:列筛选(显示或隐藏)后的事件

    六:行单击和双击事件

    七:行右键菜单事件

     八:单元格编辑事件

    九:单元格工具事件

    十:复选框事件

    十一:单选框事件

    十二:尾部分页栏事件 


    一:事件

    table.on('event(filter)', callback);

    • 参数 event(filter) 是事件的特定结构。 event 为事件名,支持的事件见下表。filter 为元素属性 lay-filter 对应的值。
    • 参数 callback 为事件执行时的回调函数,并返回一个包含各项成员的 object 类型的参数。
    event描述
    toolbar头部工具栏事件
    sort排序切换事件
    colResized 2.8+列拖拽宽度后的事件
    colToggled 2.8+列筛选(显示或隐藏)后的事件
    row / rowDouble行单击和双击事件
    rowContextmenu 2.8+行右键菜单事件
    edit单元格编辑事件
    tool 🔥单元格工具事件。可在该事件中实现行的更新与删除操作。
    checkbox复选框事件
    radio单选框事件
    pagebar 2.7+尾部分页栏事件

    二:头部工具栏事件

    table.on('toolbar(filter)', callback);

    点击头部工具栏区域设定了属性为 lay-event="" 的元素时触发。如:

    1. <table id="test" lay-filter="test">table>
    2. <script type="text/html" id="toolbarDemo">
    3. <div class="layui-btn-container">
    4. <button class="layui-btn layui-btn-sm" lay-event="add">添加button>
    5. <button class="layui-btn layui-btn-sm" lay-event="delete">删除button>
    6. <button class="layui-btn layui-btn-sm" lay-event="update">编辑button>
    7. div>
    8. script>
    9. <script>
    10. layui.use(function(){
    11. var table = layui.table;
    12. // 渲染
    13. table.render({
    14. elem: '#test',
    15. toolbar: '#toolbarDemo',
    16. // … // 其他属性
    17. });
    18. // 头部工具栏事件
    19. table.on('toolbar(test)', function(obj){
    20. var options = obj.config; // 获取当前表格属性配置项
    21. var checkStatus = table.checkStatus(options.id); // 获取选中行相关数据
    22. console.log(obj); // 查看对象所有成员
    23. // 根据不同的事件名进行相应的操作
    24. switch(obj.event){ // 对应模板元素中的 lay-event 属性值
    25. case 'add':
    26. layer.msg('添加');
    27. break;
    28. case 'delete':
    29. layer.msg('删除');
    30. break;
    31. case 'update':
    32. layer.msg('编辑');
    33. break;
    34. };
    35. });
    36. });
    37. script>

    三:排序切换事件

    table.on('sort(filter)', callback);

              点击表头排序时触发,它通常在设置 autoSort: false 基础属性时使用,以呈现后端的排序,而不是默认的前端排序。

    1. var table = layui.table;
    2. // 禁用前端自动排序,以便由服务端直接返回排序好的数据
    3. table.render({
    4. elem: '#test',
    5. autoSort: false, // 禁用前端自动排序。
    6. // … // 其他属性
    7. });
    8. // 触发排序事件
    9. table.on('sort(test)', function(obj){
    10. console.log(obj.field); // 当前排序的字段名
    11. console.log(obj.type); // 当前排序类型:desc(降序)、asc(升序)、null(空对象,默认排序)
    12. console.log(this); // 当前排序的 th 对象
    13. // 尽管我们的 table 自带排序功能,但并没有请求服务端。
    14. // 有些时候,你可能需要根据当前排序的字段,重新向后端发送请求,从而实现服务端排序,如:
    15. table.reload('test', {
    16. initSort: obj, // 记录初始排序,如果不设的话,将无法标记表头的排序状态。
    17. where: { // 请求参数(注意:这里面的参数可任意定义,并非下面固定的格式)
    18. field: obj.field, // 排序字段
    19. order: obj.type // 排序方式
    20. }
    21. });
    22. });

     四:列拖拽宽度后的事件

    table.on('colResized(filter)', callback);

    在表头列分割线拖拽宽度后触发。

    1. var table = layui.table;
    2. // 渲染
    3. table.render({
    4. elem: '#test',
    5. // … // 其他属性
    6. });
    7. // 列拖拽宽度后的事件
    8. table.on('colResized(test)', function(obj){
    9. var col = obj.col; // 获取当前列属性配置项
    10. var options = obj.config; // 获取当前表格基础属性配置项
    11. console.log(obj); // 查看对象所有成员
    12. });

    五:列筛选(显示或隐藏)后的事件

    table.on('colToggled(filter)', callback);

    点击头部工具栏右上角的字段筛选列表时触发。

    1. var table = layui.table;
    2. // 渲染
    3. table.render({
    4. elem: '#test',
    5. // … // 其他属性
    6. });
    7. // 列筛选(显示或隐藏)后的事件
    8. table.on('colToggled(test)', function(obj){
    9. var col = obj.col; // 获取当前列属性配置项
    10. var options = obj.config; // 获取当前表格基础属性配置项
    11. console.log(obj); // 查看对象所有成员
    12. });

    六:行单击和双击事件

    • 行单击事件:table.on('row(filter)', callback);
    • 行双击事件:table.on('rowDouble(filter)', callback);

    单击或双击 table 行任意区域触发,两者用法相同。

    1. var table = layui.table;
    2. // 渲染
    3. table.render({
    4. elem: '#test',
    5. // … // 其他属性
    6. });
    7. // 行单击事件
    8. table.on('row(test)', function(obj){
    9. var data = obj.data; // 得到当前行数据
    10. var index = obj.index; // 得到当前行索引
    11. var tr = obj.tr; // 得到当前行 元素的 jQuery 对象
    12. var options = obj.config; // 获取当前表格基础属性配置项
    13. console.log(obj); // 查看对象所有成员
    14. // obj.del() // 删除当前行
    15. // obj.update(fields, related); // 修改行数据
    16. // obj.setRowChecked(opts); // 设置行选中状态
    17. });

    七:行右键菜单事件

    table.on('rowContextmenu(filter)', callback);

    右键单击行时触发。

    1. "layui-hide" id="ID-table-onrowContextmenu">

     八:单元格编辑事件

    table.on('edit(filter)', callback);

    单元格被编辑,且值发生改变时触发。

    1. var table = layui.table;
    2. var layer = layui.layer;
    3. // 单元格编辑事件
    4. table.on('edit(test)', function(obj){
    5. var field = obj.field; // 得到修改的字段
    6. var value = obj.value // 得到修改后的值
    7. var oldValue = obj.oldValue // 得到修改前的值 -- v2.8.0 新增
    8. var data = obj.data // 得到所在行所有键值
    9. var col = obj.getCol(); // 得到当前列的表头配置属性 -- v2.8.0 新增
    10. console.log(obj); // 查看对象所有成员
    11. // 值的校验
    12. if(value.replace(/\s/g, '') === ''){
    13. layer.tips('值不能为空', this, {tips: 1});
    14. return obj.reedit(); // 重新编辑 -- v2.8.0 新增
    15. }
    16. // 编辑后续操作,如提交更新请求,以完成真实的数据更新
    17. // …
    18. // 更新当前缓存数据
    19. var update = {};
    20. update[field] = value;
    21. obj.update(update, true); // 参数 true 为 v2.7 新增功能,即同步更新其他包含自定义模板并可能存在关联的列视图
    22. });

    九:单元格工具事件

    • 单元格工具事件「单击触发」: table.on('tool(filter)', callback);
    • 单元格工具事件「双击触发」: table.on('toolDouble(filter)', callback);

    单击或双击单元格中带有 lay-event="" 属性的元素时触发。在表格主体的单元格中,经常需要进行很多的动态操作,比如编辑、删除等操作,这些均可以在单元格工具事件中完成。

    1. <script type="text/html" id="toolEventDemo">
    2. <a class="layui-btn layui-btn-xs" lay-event="detail">查看a>
    3. <a class="layui-btn layui-btn-xs" lay-event="edit">编辑a>
    4. <a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除a>
    5. {{# if(d.auth > 2){ }}
    6. <a class="layui-btn layui-btn-xs" lay-event="check">审核a>
    7. {{# } }}
    8. script>
    9. <table id="test" lay-filter="test">table>
    10. <script>
    11. layui.use(function(){
    12. var table = layui.table;
    13. // 渲染
    14. table.render({
    15. elem: '#test'
    16. ,cols: [[
    17. {title: '操作', width: 200, templet: '#toolEventDemo'}
    18. ]]
    19. // … // 其他属性
    20. });
    21. // 单元格工具事件
    22. table.on('tool(test)', function(obj){
    23. var data = obj.data; // 得到当前行数据
    24. var index = obj.index; // 得到当前行索引
    25. var layEvent = obj.event; // 获得元素对应的 lay-event 属性值
    26. var tr = obj.tr; // 得到当前行 元素的 jQuery 对象
    27. var options = obj.config; // 获取当前表格基础属性配置项
    28. console.log(obj); // 查看对象所有成员
    29. // 根据 lay-event 的值执行不同操作
    30. if(layEvent === 'detail'){ //查看
    31. // do somehing
    32. } else if(layEvent === 'del'){ //删除
    33. layer.confirm('确定删除吗?', function(index){
    34. obj.del(); // 删除对应行(tr)的 DOM 结构,并更新缓存
    35. layer.close(index);
    36. // 向后端发送删除请求,执行完毕后,可通过 reloadData 方法完成数据重载
    37. /*
    38. table.reloadData(id, {
    39. scrollPos: 'fixed' // 保持滚动条位置不变 - v2.7.3 新增
    40. });
    41. */
    42. });
    43. } else if(layEvent === 'edit'){ //编辑
    44. // do something
    45. // 同步更新缓存对应的值
    46. // 该方法仅为前端层面的临时更新,在实际业务中需提交后端请求完成真实的数据更新。
    47. obj.update({
    48. username: '123',
    49. title: 'abc'
    50. });
    51. // 若需更新其他包含自定义模板并可能存在关联的列视图,可在第二个参数传入 true
    52. obj.update({
    53. username: '123'
    54. }, true); // 注:参数二传入 true 功能为 v2.7.4 新增
    55. // 当发送后端请求成功后,可再通过 reloadData 方法完成数据重载
    56. /*
    57. table.reloadData(id, {
    58. scrollPos: 'fixed' // 保持滚动条位置不变 - v2.7.3 新增
    59. });
    60. */
    61. }
    62. });
    63. });
    64. script>

    十:复选框事件

    able.on('checkbox(filter)', callback);

    当 table 开启复选框,且点击复选框时触发。

    1. var table = layui.table;
    2. // 复选框事件
    3. table.on('checkbox(test)', function(obj){
    4. console.log(obj); // 查看对象所有成员
    5. console.log(obj.checked); // 当前是否选中状态
    6. console.log(obj.data); // 选中行的相关数据
    7. console.log(obj.type); // 若触发的是全选,则为:all;若触发的是单选,则为:one
    8. });

    十一:单选框事件

    table.on('radio(filter)', callback);

    当 table 开启单选框,且点击单选框时触发。

    1. var table = layui.table;
    2. // 单选框事件
    3. table.on('radio(test)', function(obj){
    4. console.log(obj); // 当前行的一些常用操作集合
    5. console.log(obj.checked); // 当前是否选中状态
    6. console.log(obj.data); // 选中行的相关数据
    7. });

    十二:尾部分页栏事件 

    table.on('pagebar(filter)', callback);

    点击尾部分页栏自定义模板中属性为 lay-event="" 的元素时触发。用法跟 toolbar 完全一致

    1. var table = layui.table;
    2. // 渲染
    3. table.render({
    4. elem: '#demo',
    5. pagebar: '#pagebarDemo' // 分页栏模板所在的选择器
    6. // … // 其他参数
    7. });
    8. // 分页栏事件
    9. table.on('pagebar(test)', function(obj){
    10. console.log(obj); // 查看对象所有成员
    11. console.log(obj.config); // 当前实例的配置信息
    12. console.log(obj.event); // 属性 lay-event 对应的值
    13. });
  • 相关阅读:
    有什么好赚钱的项目可以做?这8个小项目不错,想赚钱的别错过!
    C++课程设计
    突破界限的力量:探索Facebook如何打破国界、文化和语言的障碍
    Dubbo线程池
    蓝桥杯真题:纯质数
    Appium自动化测试基础 — Android模拟器(Genymotion)安装(一)
    Django(二)精美博客搭建(10)实现关于我页及文章详情页上一篇/下一篇bug解决
    #力扣:26. 删除有序数组中的重复项@FDDLC
    在DDD领域驱动下的微服务数据库的MVC设计思路(高度可行性)
    矩阵账号搭建流程,3步学会,直接拿去用即可
  • 原文地址:https://blog.csdn.net/qq_61313896/article/details/132875796