Layui 2.8 中 radio 列必须显式配置 type: 'radio' 并禁用 multiple,监听用 table.on('radio(filter)', callback),checkStatus.data 长度恒 ≤1,setRowChecked 仅支持数字索引,无取消选中语义。
radio列必须显式配置type: 'radio',不能只靠checkbox改名
很多人以为把type: 'checkbox'改成type: 'radio'就自动支持单选,其实不然。layui 2.8 的 table 模块中,type: 'radio'列需同时满足两个条件才能正常工作:一是列定义里明确写{type: 'radio', fixed: 'left'};二是表格渲染时未开启multiple: true(该参数仅影响 checkbox 行为,对 radio 无效,但设了可能干扰逻辑)。否则点击无响应,table.checkstatus也拿不到数据。
监听radio事件要用table.on('radio(filter)', callback),不是checkbox
复选框用checkbox(filter),单选框必须换用radio(filter)事件名,否则回调根本不会触发。这个事件在用户点击 radio 后立即执行,obj对象里带obj.data(当前选中行完整数据)和obj.checked(永远为true,因为 radio 点击即选中,不存在“取消”语义)。
- 常见错误:监听
checkbox却配了type: 'radio',结果事件不触发,console.log完全没输出 - 正确写法:
table.on('radio(test)', function(obj){ console.log(obj.data.id); }); - 注意:该事件不提供“取消选中”回调——radio 被点击后,上一个选中项会自动取消,但不会再次触发事件
table.checkStatus('filter')返回的data数组长度最多为1
和 checkbox 不同,radio 模式下table.checkStatus返回的data字段始终是长度 ≤1 的数组。即使你手动调用table.setRowChecked批量设置多个 index,Layui 内部也会强制只保留最后一个生效的 radio 选中状态。
- 所以别用
checkStatus.data[0]前还判length > 0——直接取[0]更安全,空时是undefined -
checkStatus.isAll在 radio 下恒为false,没意义,别依赖它 - 如果需要“取消当前选中”,只能调
table.clearCache('filter')再重绘,或手动把某行checked设为false(2.9.1+ 支持)
setRowChecked设置radio选中要传index,不能传data对象
table.setRowChecked('test', {index: 2})可以选中第3行(索引从0开始),但{index: {id: 123}}这种传 data 对象的方式在 radio 模式下不生效——它只认数字索引或'all'字符串(此时清空所有 radio 选中)。
- 如果你只有 id 字段,得先遍历
table.cache['test']找对应索引,再传进去 - 不要在渲染完立刻调
setRowChecked,确保table.render回调已执行完毕,否则缓存未就绪 - 2.8 版本不支持
checked: false取消单个 radio,想取消只能清空整个状态或点其他行


















