layui table行监听和多选框冲突问题解决

问题描述

项目使用layui table,由于项目需要设置多选框并且开启行监听,这样就会有一个问题,点击多选框时候,行监听也会执行。

修改目标是点击多选框的时候不触发行监听。

解决方法:不使用原生的行监听部分代码,使用js自己写监听。多选框部分不用修改。

监听部分:

// 原生的
table.on('row(declarationDetailsTable)', function(obj){

// 修改后的
$(document).on("click", "div[lay-id='tableName'] .layui-table-body table.layui-table tbody tr", function () {

监听方法中设置监听对象的样式:

// 原生的
obj.tr.addClass('layui-table-click').siblings().removeClass('layui-table-click');
// 修改后的
$(this).addClass('layui-table-click').siblings().removeClass('layui-table-click');

监听方法中获取td里面的值:

// 原生的写法
var data = obj.data;
var name = data.name;

// 修改后的获取值的方法
var name = $(this).find("td[data-field='name']").attr("data-content");

最后加 对td的单击事件进行拦截

// 对td的单击事件进行拦截停止
$(document).on("click", "td div.laytable-cell-checkbox div.layui-form-checkbox", function (e) {
    e.stopPropagation();
});

这样点击多选框的时候,就不会触发行监听事件

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要实现点击选中复选框的效果,可以通过以下步骤来实现: 1. 在表头中添加一个全选的复选框,并为其设置一个ID。 2. 在每一的第一列中添加一个复选框,并为其设置一个class,例如“check-box”。 3. 给表格绑定一个点击事件,在点击事件中判断点击的元素是否为复选框或者全选的复选框,如果是,则执对应的操作。 4. 当点击某一时,获取该的复选框元素,并设置其选中状态为true。 下面是一个示例代码: ```html <table class="layui-table" id="myTable"> <thead> <tr> <th><input type="checkbox" name="" lay-skin="primary" id="checkAll"></th> <th>列1</th> <th>列2</th> <th>列3</th> </tr> </thead> <tbody> <tr class="tr_layui"> <td><input type="checkbox" name="" lay-skin="primary" class="check-box"></td> <td>1列1</td> <td>1列2</td> <td>1列3</td> </tr> <tr class="tr_layui"> <td><input type="checkbox" name="" lay-skin="primary" class="check-box"></td> <td>2列1</td> <td>2列2</td> <td>2列3</td> </tr> </tbody> </table> <script> // 全选复选框的点击事件 $('#checkAll').on('click', function() { if ($(this).is(':checked')) { $('.check-box').prop('checked', true); } else { $('.check-box').prop('checked', false); } }); // 点击事件 $('.tr_layui').on('click', function() { // 判断是否为复选框或者全选复选框 if ($(event.target).is(':checkbox')) { return; } // 获取该的复选框元素 var checkBox = $(this).find('.check-box'); // 判断该复选框是否已选中 if (checkBox.is(':checked')) { checkBox.prop('checked', false); } else { checkBox.prop('checked', true); } }); </script> ``` 在这段代码中,我们首先给表头添加一个ID为“checkAll”的全选复选框,然后在每一的第一列中添加class为“check-box”的复选框。接着,我们给全选复选框和每绑定点击事件,在事件中判断点击的元素是否为复选框或者全选复选框,然后执对应的操作。当点击某一时,我们获取该的复选框元素,并设置其选中状态。这样,就可以实现点击选中复选框的效果了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值