layui table toolbar 工具条事件

 

前言

layui table 添加一列工具列,放上工具按钮

语法

table.render({
  cols: [[
    {field:'id', title:'ID', width:100},
    {fixed: 'right', width:150, align:'center', toolbar: '#barDemo'} //这里的toolbar值是模板元素的选择器
  ]]
});
<script type="text/html" id="barDemo">
  <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>
 
<!-- 注意:属性 lay-event="" 是模板的关键所在,值可随意定义。 -->

接下来我们可以借助 table模块的工具条事件,完成不同的操作功能:

//监听工具条 
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,头部工具栏扩展的右侧图标。');
  }
});

例子

cols: [[
            {field: 'loginName', title: '登陆用户名', minWidth: 100, align: "center"},
            {field: 'operatorName', title: '用户姓名', minWidth: 90, align: "center"},
            {field: 'operatorRole', title: '角色', minWidth: 90, align: "center", templet: operatorRole},
            {field: 'operatorStatus', title: '状态', minWidth: 90, align: "center", templet: operatorStatus},
            {title: '操作', minWidth: 150, templet: "#scoreRuleBar", fixed: "right", align: "center"}
        ]],
<script type="text/html" id="scoreRuleBar">
        {{# if('NORMAL' == d.operatorStatus){ }}
        <button class="layui-btn layui-btn-xs merchantLableEditBtn" style="display:none;"
                lay-event="froze">冻结
        </button>
        <button class="layui-btn layui-btn-danger layui-btn-xs merchantLableEditBtn" style="display:none;"
                lay-event="delete">注销
        </button>
        <button class="layui-btn layui-btn-normal layui-btn-xs merchantLableEditBtn" style="display:none;"
                lay-event="info">详情
        </button>
        {{# } else if('BANLOGON' == d.operatorStatus){ }}
        <button class="layui-btn layui-btn-xs merchantLableEditBtn" style="display:none;"
                lay-event="unFroze">启用
        </button>
        <button class="layui-btn layui-btn-danger layui-btn-xs merchantLableEditBtn" style="display:none;"
                lay-event="delete">注销
        </button>
        <button class="layui-btn layui-btn-normal layui-btn-xs merchantLableEditBtn" style="display:none;"
                lay-event="info">详情
        </button>
        {{# } }}
    </script>
// 监听评分规则表工具条
    table.on('tool(tableList)', function (obj) {
        var data = obj.data;
        if ('froze' === obj.event) {
            // 冻结
            editdata = data;
            layer.confirm('确定要冻结当前操作员吗?', {
                btn: ['确定', '取消']
            }, function () {
                operateOperator(editdata, "FROZE");
            }, function () {

            });
        } else if ('delete' === obj.event) {
            // 注销
            deletedata = data;
            layer.confirm('确定要注销当前操作员吗?', {
                btn: ['确定', '取消']
            }, function () {
                operateOperator(deletedata, "CLOSE");
            }, function () {

            });
        } else if ('unFroze' === obj.event) {
            // 启用
            unFrozedata = data;
            layer.confirm('确定要启用当前操作员吗?', {
                btn: ['确定', '取消']
            }, function () {
                operateOperator(unFrozedata, "UNFROZE");
            }, function () {

            });
        } else if ('info' === obj.event) {
            // 详情
            infodata = data;
            var index = layui.layer.open({
                title: "操作员详情",
                type: 2,
                content: "operatorInfo.jsp",
                success: function (layero, index) {
                    setTimeout(function () {
                        layui.layer.tips('点击此处返回列表', '.layui-layer-setwin .layui-layer-close', {
                            tips: 3
                        });
                    }, 500)
                }
            });
            layui.layer.full(index);
            $(window).on("resize", function () {
                layui.layer.full(index);
            });
        }
    });

 

### 实现Layui Table 单元格点击事件 为了实现在 Layui 的 `table` 组件中添加单元格点击事件的功能,可以通过监听表格的特定事件并绑定相应的处理函数来完成。具体来说,可以利用 `layEvent` 属性配合工具栏或自定义模板中的事件触发机制。 下面是一个具体的实现方式: #### HTML 部分 首先,在页面上创建一个容器用于承载表格,并通过 JavaScript 初始化该表格实例。 ```html <table id="demo" lay-filter="test"></table> ``` #### JavaScript 部分 接着初始化表格的同时设置好列字段和其他选项,重点在于为每一行记录增加额外的操作按钮或其他可交互元素,并为其指定唯一的 `lay-event` 值以便后续识别不同的行为动作。 ```javascript layui.use(['table'], function(){ var table = layui.table; // 渲染表格 table.render({ elem: '#demo' ,url:'/data.json' // 数据接口地址 ,cols: [[ // 表头 {field:'id', title: 'ID'} ,{field:'username', title: '用户名'} ,{ field: '', title: '操作', toolbar: '<a class="layui-btn layui-btn-xs" lay-event="detail">查看</a>' } ]] ,page: true // 开启分页 }); // 监听工具条 table.on('tool(test)', function(obj){ var data = obj.data; // 获得当前行数据 if(obj.event === 'detail'){ layer.msg('您点击了:'+ data.username); } }); }); ``` 上述代码展示了如何向表格的最后一列加入带有 "查看" 文字链接的按钮[^1]。当用户点击这些链接时会弹出提示框显示对应用户的名称。这里的关键之处在于使用了 `toolbar` 字段内的HTML字符串作为模板,并指定了 `lay-event="detail"` 来区分不同类型的事件响应逻辑;而实际的事件处理器则是通过调用 `table.on()` 方法注册到整个表格上的。 对于更复杂的业务需求,比如想要针对某个特定列(而非新增一列表示操作)实施点击事件,则可以在渲染完成后动态附加事件监听器至目标DOM节点之上,或者借助于 `cellMouseover` 和 `cellClick` 这样的内置事件来进行更加灵活地控制[^2]。 此外,如果涉及到表单元素如输入框、选择器等控件的话,还可以结合 `form` 模块进一步增强用户体验[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值