本文介绍如何在 Layui 数据表格中禁止特定行的复选框勾选。通过遍历指定行索引并设置 disabled 属性,结合 CSS 修改禁用状态的视觉样式,同时在前端校验逻辑中拦截被禁行的数据提交,确保业务规则执行。
Layui Table 部分行复选框禁用实现思路
在 Layui 表格组件中,有时需要限制用户仅能勾选部分数据行。实现这一功能的核心思路是:首先在前端渲染阶段识别出需要禁用的行,将其复选框设为不可用状态,并调整对应的视觉样式;其次在提交或获取选中数据时,通过逻辑判断过滤掉这些被禁用的行,防止非法数据参与后续操作。
前端禁用复选框及样式处理
var list = [0,1,3];//获得禁用的tr的行index
//遍历设置复选框禁用
for(var i=0;i<list.length;i++){
$(".layui-table tr[data-index="+list[i]+"] input[type='checkbox']").prop('disabled',true);
$(".layui-table tr[data-index="+list[i]+"] input[type='checkbox']").next().addClass('layui-btn-disabled');
}
为了实现上述效果,第一步是在表格渲染时,针对 tbody 中特定的 tr 元素进行处理。具体做法是获取需要禁用的行的索引列表,然后遍历该列表,找到对应的复选框 input 元素。
<td>{{id}}-{{ischeck}}</td>
接下来,通过 JavaScript 代码动态修改这些复选框的状态。利用 jQuery 选择器定位到指定 data-index 的行内的 checkbox,调用 prop('disabled', true) 禁用其点击功能。同时,为了在视觉上区分,需给复选框后的 label 元素添加特定的禁用类名,例如 layui-btn-disabled,从而改变其外观样式。
后端数据获取时的过滤逻辑
var table = layui.table;
var checkStatus = table.checkStatus('table');//lay-filter="table"
var values = new Array();
for(var i=0;i<checkStatus.data.length;i++){
var thisdata = checkStatus.data[i].id;//获取上面那个td的内容
var check = thisdata.split("-")[1];//截取ischeck
if(check=='1'){ //拦截禁用的行的id
values.push(thisdata.split("-")[0]);//截取id
}
}
var idlist = values//得到所有的id 0,1,3
在获取选中数据时,需要额外增加一层校验逻辑。遍历 checkStatus 返回的数据集,解析每行数据中用于标识是否禁用的字段(如示例中的 ischeck)。如果该字段值为 '1',则说明该行被禁用,应将其主键 ID 排除在最终提交的 values 数组之外。这样即使前端样式允许某种误操作,后端或后续逻辑也能通过 ID 列表过滤掉非法数据。
禁用状态的 CSS 样式定义
.layui-table-view .layui-form-checkbox.layui-btn-disabled[lay-skin=primary] i,.layui-table-view .layui-form-checkbox.layui-checkbox-disbaled[lay-skin=primary] i{background-color: #e9e9e9;border-color: #e9e9e9;}
此外,为了完善用户体验,建议补充相应的 CSS 样式代码。通过指定 .layui-btn-disabled 类下的 i 标签背景色和边框色,使其呈现灰色调,直观地告知用户该选项不可选。这包括处理 layui-form-checkbox 和 layui-checkbox-disbaled(注意原文拼写)等不同类名组合下的样式覆盖,确保禁用状态显示一致。