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

news2025/10/26 3:08:15

目录

一:事件

二:头部工具栏事件

三:排序切换事件

 四:列拖拽宽度后的事件

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

六:行单击和双击事件

七:行右键菜单事件

 八:单元格编辑事件

九:单元格工具事件

十:复选框事件

十一:单选框事件

十二:尾部分页栏事件 


一:事件

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="" 的元素时触发。如:

<!-- 原始容器 -->
<table id="test" lay-filter="test"></table>
 
<!-- 工具栏模板 -->
<script type="text/html" id="toolbarDemo">
  <div class="layui-btn-container">
    <button class="layui-btn layui-btn-sm" lay-event="add">添加</button>
    <button class="layui-btn layui-btn-sm" lay-event="delete">删除</button>
    <button class="layui-btn layui-btn-sm" lay-event="update">编辑</button>
  </div>
</script>
 
<script>
layui.use(function(){
  var table = layui.table;
  // 渲染
  table.render({
    elem: '#test',
    toolbar: '#toolbarDemo',
    // … // 其他属性
  });
   
  // 头部工具栏事件
  table.on('toolbar(test)', function(obj){
    var options = obj.config; // 获取当前表格属性配置项
    var checkStatus = table.checkStatus(options.id); // 获取选中行相关数据
    console.log(obj); // 查看对象所有成员
    
    // 根据不同的事件名进行相应的操作
    switch(obj.event){ // 对应模板元素中的 lay-event 属性值
      case 'add':
        layer.msg('添加');
      break;
      case 'delete':
        layer.msg('删除');
      break;
      case 'update':
        layer.msg('编辑');
      break;
    };
  });
});
</script>

三:排序切换事件

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

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

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

 四:列拖拽宽度后的事件

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

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

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

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

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

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

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

六:行单击和双击事件

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

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

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

七:行右键菜单事件

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

右键单击行时触发。

<table class="layui-hide" id="ID-table-onrowContextmenu"></table>
<script>
layui.use(['table', 'dropdown', 'util'], function(){
  var table = layui.table;
  var dropdown = layui.dropdown;
  var util = layui.util;
   
  // 渲染
  table.render({
    elem: '#ID-table-onrowContextmenu',
    defaultContextmenu: false, // 是否在 table 行中允许默认的右键菜单
    url: '/static/json/table/user.json', // 此处为静态模拟数据,实际使用时需换成真实接口
    page: true,
    cols: [[
      {field:'id', title:'ID', width:80, fixed: 'left', unresize: true},
      {field:'username', title:'用户', width:120},
      {field:'sex', title:'性别', width:80},
      {field:'city', title:'城市', width:100},
      {field:'sign', title:'签名'},
      {field:'experience', title:'积分', width:80, sort: true}
    ]],
  });
   
  // 行单击事件
  table.on('rowContextmenu(ID-table-onrowContextmenu)', function(obj){
    var data = obj.data; // 得到当前行数据
    var index = obj.index; // 得到当前行索引
    var tr = obj.tr; // 得到当前行 <tr> 元素的 jQuery 对象
    var options = obj.config; // 获取当前表格基础属性配置项
    // console.log(obj); // 查看对象所有成员
    
    // 右键操作
    dropdown.render({
      trigger: 'contextmenu',
      show: true,
      data: [
        {title: 'Menu item 1', id: 'AAA'},
        {title: 'Menu item 2', id: 'BBB'}
      ],
      click: function(menuData, othis) {
        // 显示选中的相关数据 - 仅用于演示
        layer.alert(util.escape(JSON.stringify({
          dropdown: menuData,
          table: obj.data
        })));
      }
    });
    
    // obj.del() // 删除当前行
    // obj.update(fields, related);  // 修改行数据
    obj.setRowChecked({selectedStyle: true}); // 标注行选中状态样式
  });
});
</script>

 八:单元格编辑事件

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

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

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

九:单元格工具事件

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

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

<!-- 表头某列 templet 属性指向的模板 -->
<script type="text/html" id="toolEventDemo">
  <a class="layui-btn layui-btn-xs" lay-event="detail">查看</a>
  <a class="layui-btn layui-btn-xs" lay-event="edit">编辑</a>
  <a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</a>
  
  <!-- 支持任意的 laytpl 组件语法,如: -->
  {{#  if(d.auth > 2){ }}
    <a class="layui-btn layui-btn-xs" lay-event="check">审核</a>
  {{#  } }}
</script>
 
<table id="test" lay-filter="test"></table> 
 
<script>
layui.use(function(){
  var table = layui.table;
  // 渲染
  table.render({
    elem: '#test'
    ,cols: [[
      {title: '操作', width: 200, templet: '#toolEventDemo'}
    ]]
    // … // 其他属性
  });
  // 单元格工具事件
  table.on('tool(test)', function(obj){
    var data = obj.data; // 得到当前行数据
    var index = obj.index; // 得到当前行索引
    var layEvent = obj.event; // 获得元素对应的 lay-event 属性值
    var tr = obj.tr; // 得到当前行 <tr> 元素的 jQuery 对象
    var options = obj.config; // 获取当前表格基础属性配置项
    console.log(obj); // 查看对象所有成员
    
    // 根据 lay-event 的值执行不同操作
    if(layEvent === 'detail'){ //查看
      // do somehing
    } else if(layEvent === 'del'){ //删除
      layer.confirm('确定删除吗?', function(index){
        obj.del(); // 删除对应行(tr)的 DOM 结构,并更新缓存
        layer.close(index);
        
        // 向后端发送删除请求,执行完毕后,可通过 reloadData 方法完成数据重载
        /*
        table.reloadData(id, {
          scrollPos: 'fixed'  // 保持滚动条位置不变 - v2.7.3 新增
        });
        */
      });
    } else if(layEvent === 'edit'){ //编辑
      // do something
      
      // 同步更新缓存对应的值
      // 该方法仅为前端层面的临时更新,在实际业务中需提交后端请求完成真实的数据更新。
      obj.update({
        username: '123',
        title: 'abc'
      }); 
      // 若需更新其他包含自定义模板并可能存在关联的列视图,可在第二个参数传入 true
      obj.update({
        username: '123'
      }, true); // 注:参数二传入 true 功能为 v2.7.4 新增
   
      // 当发送后端请求成功后,可再通过 reloadData 方法完成数据重载
      /*
      table.reloadData(id, {
        scrollPos: 'fixed'  // 保持滚动条位置不变 - v2.7.3 新增
      });
      */
    }
  });
});
</script>

十:复选框事件

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

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

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

十一:单选框事件

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

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

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

十二:尾部分页栏事件 

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

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

var table = layui.table;
 
// 渲染
table.render({
  elem: '#demo',
  pagebar: '#pagebarDemo' // 分页栏模板所在的选择器
  // … // 其他参数
});
 
// 分页栏事件
table.on('pagebar(test)', function(obj){
  console.log(obj); // 查看对象所有成员
  console.log(obj.config); // 当前实例的配置信息
  console.log(obj.event); // 属性 lay-event 对应的值
});

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1010238.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

React TypeScript | 快速了解 antd 的使用

1. 安装&#xff1a; 就像安装其他插件库一样&#xff0c;在项目文件夹下执行&#xff1a; npm install antd --save如果你安装了 yarn&#xff0c;也可以执行&#xff1a; yarn add antd2. 引用 import { Button, Tooltip } from "antd"; import "antd/dis…

Linux内核—模块编译方法

一、向内核添加新功能 1.1 静态加载法&#xff1a; 即新功能源码与内核其它代码一起编译进uImage文件内 新功能源码与Linux内核源码在同一目录结构下 在linux-3.14/driver/char/目录下编写myhello.c&#xff0c;文件内容如下&#xff1a; #include <linux/module.h> #i…

AWS创建实例 启用/禁用 自动分配公有 IP

给AWS新账户做完了对等连接&#xff0c;因为默认VPC网段都冲突 就换了VPC&#xff0c;然后发现新VPC内创建的实例都没有分配公网IP地址&#xff0c;自动分配公网IP地址变成了禁用。后续建机子需要手动修改成启用太麻烦了。 在VPC里面找到编辑子网设置&#xff0c;勾上启用自动…

不使用辅助变量的前提下实现两个变量的交换

package operator; //不用第三个辅助变量&#xff0c;实现两个数的交换 public class Demo08 {public static void change(int a, int b){a ab;b a-b;a a-b;System.out.println(a);System.out.println(b);}public static void main(String[] args) {change(900,3000);} }后续…

IDEA2023.2.1取消空包隐藏,切换包结构(Compact Middle Packages)

解决2023版idea的包结构 取消勾选即可。 取消勾选Compact Middle Packages选项后&#xff0c;再创建包时&#xff0c;即可自动创建树形结构。 仅供学习使用&#xff01;

Matlab图像处理-三基色

三基色 在计算机中&#xff0c;显示器的任何颜色&#xff08;全色域&#xff09;都可以由红、绿、蓝三种颜色组成&#xff0c;称为三基色。 三基色的原理 各原色的取值范围为0~255。 任何颜色都可以与这3种颜色以不同的比例混合获得&#xff0c; 这就是三基色的原理。 在计算…

VMWare虚拟机扩容并挂载磁盘

零、说在前面 我们在使用在VMWare创建虚机运行系统的时候&#xff0c;难免会因为前期规划不足而遇到磁盘空间被占满的情况&#xff0c;此时就需要对虚机的原有存储空间进行扩容。而整体思路&#xff0c;就是将新追加的磁盘空间归属到逻辑卷下&#xff08;类似window的给磁盘分区…

【深度学习】 Python 和 NumPy 系列教程(十七):Matplotlib详解:2、3d绘图类型(3)3D条形图(3D Bar Plot)

目录 一、前言 二、实验环境 三、Matplotlib详解 1、2d绘图类型 2、3d绘图类型 0. 设置中文字体 1. 线框图 2. 3D散点图 3. 3D条形图&#xff08;3D Bar Plot&#xff09; 一、前言 Python是一种高级编程语言&#xff0c;由Guido van Rossum于1991年创建。它以简洁、易读…

vue的由来、vue教程和M-V-VM架构思想、vue的使用、nodejs

vue vue的由来 vue教程和M-V-VM架构思想 vue的使用 nodejs vue的由来 # 1 HTML(5)、CSS(3)、JavaScript(ES5、ES6、ES11)&#xff1a;编写一个个的页面 -> 给后端(PHP、Python、Go、Java) -> 后端嵌入模板语法 -> 后端渲染完数据 -> 返回数据给前端 -> 在浏览…

C++(day7)

思维导图 Vector #include <iostream>using namespace std;template <typename V> class Myvector{ private:V *data;int Capacity;int Size; public://无参构造Myvector():data(new V[Capacity]),Capacity(0),Size(0){cout<<"无参构造函数"<&…

web端动效 PAG

之前写过一篇lottie动效的文章&#xff1a;web端动效 lottie-web 使用&#xff0c;本篇写一下PAG-web的基础使用。 PAG是腾讯开发&#xff0c;支持移动端、桌面端以及Web端的动效工作流解决方案。目标是降低或消除动效相关的研发成本&#xff0c;能够一键将设计师在 AE&#x…

VoIP之IP直呼

在VoIP应用场景中&#xff0c;有一种功能叫IP直呼&#xff0c;也称为IP直拨。 就是两个SIP终端或终端和服务器之间&#xff0c;通过呼叫&#xff08;Invite)对方IP地址实现音视频通话的功能。 抓包如下&#xff1a; 与常见的SIP账号呼叫的区别是from/to字段没有账号&#xff0…

163邮箱开通发件功能

点击设置 查看详情 开启这个功能&#xff0c;如下 开通IMAP/SMTP服务 开通POP3/SMTP服务完成了 设置邮箱完成。

C++--day7

仿照vector手动实现自己的myVector&#xff0c;最主要实现二倍扩容功能 #include <iostream>using namespace std; class myvector { private:int *num;int size;int top0; public://有参构造函数myvector(int s,int val){int *tmpnew int [s];sizes;for(int i0;i<s;…

基于FPGA的图像sobel锐化实现,包括tb测试文件和MATLAB辅助验证

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 将FPGA的仿真结果导入到matlab显示图像效果 2.算法运行软件版本 MATLAB2022a,vivado2019.2 3.部分核心程序 .................................…

数据结构之洗牌算法

洗牌算法 1.买一副牌(生成一副牌)2.洗牌3.揭牌完整代码 1.买一副牌(生成一副牌) 2.洗牌 3.揭牌 完整代码 card中的代码: cardDemo中的代码 测试类代码

常微分方程的基本概念(二)

目录 微分方程的解 微分方程的通解 微分方程的特解 微分方程的初始条件 积分曲率 微分方程的解 微分方程的解是指满足给定微分方程的函数或函数集合。微分方程通常描述了一个函数与其导数之间的关系&#xff0c;解是满足这种关系的函数或一组函数。 微分方程可以分为多个…

部署ZFile在线网盘

部署ZFile应用 1.安装依赖 在部署ZFile应用之前&#xff0c;需要安装环境依赖。 yum install -y java-1.8.0-openjdk unzip 2.创建安装部署目录 创建安装目录&#xff0c;用于部署ZFile。 [roothecs-4981 ~]# mkdir -p /data/zfile [roothecs-4981 ~]# cd /data/zfile/ [ro…

新版原型和原型链详解,看完整个人都通透

了解原型、原型链前需要先了解构造函数&#xff0c;new操作符 构造函数 构造函数是一种特殊的函数&#xff0c;主要用来初始化对象&#xff0c;即为对象成员变量赋初始值&#xff0c;它总与 new 一起使用。我们可以把对象中一些公共的属性和方法抽取出来&#xff0c;然后封装到…

idea2023全量方法debug

为什么要全量debug 刚上手项目或者研读开源项目源码的时候&#xff0c;我们对项目的结构&#xff0c;尤其是功能链路非常陌生&#xff0c;想要debug根本不知道断点打在哪&#xff0c;光靠文件名类名或者方法名去猜也不是个事。这时候只要配置一下全量debug模式&#xff0c;就能…