必须监听 checkbox 事件而非 done 回调,用 table.on('checkbox(test)', ...) 获取实时选中数据,并在外部添加 footer div 实时更新统计;注意全选时需用 setTimeout 延迟读取状态,分页下要结合 isAll 判断全局选中数。
layui table 的 done 回调里拿不到选中行?
因为 done 是渲染完成时触发,此时用户还没点击复选框,table.checkstatus('id') 返回的 data 为空数组。必须监听复选框变化事件,而不是依赖 done。
正确做法是用 table.on('checkbox(test)', ...) 监听选中状态变更,每次触发都重新统计并更新底部文案。
-
test是你初始化表格时传的id(即elem属性值或id配置项) - 不要写成
table.on('checkbox', ...)—— 缺少 lay-filter 值会不生效 - 监听函数内直接调用
table.checkStatus('test'),它返回的是实时选中数据对象
如何把总记录数塞进表格底部固定区域?
layui table 默认没有“底部统计栏”,得自己加。最稳妥的方式是在表格容器外手动追加一个 <div>,用 CSS 定位到底部,并监听 checkbox 事件实时更新文本。
<p>别试图往 <code>.layui-table-box 内部硬塞 DOM,容易被 layui 重绘清掉;也不要改 footer 配置——它只支持固定列脚,不支持整表汇总。
- 在
<table id="test"></table>后面紧跟:<div id="table-footer" class="layui-table-footer">已选中 <span id="selected-count">0</span> 条</div>
- 给这个
div加简单样式:.layui-table-footer { padding: 8px 15px; border-top: 1px solid #eee; font-size: 12px; color: #666; } - 在 checkbox 监听回调里更新:
document.getElementById('selected-count').innerText = data.data.length
全选/取消全选时 count 不更新?
layui 的全选框(表头复选框)触发的是同一事件,但 table.checkStatus() 在全选后可能短暂不同步,尤其在异步加载 + 分页场景下。必须确保在事件回调中延迟读取,或强制刷新状态。
- 推荐写法:
setTimeout(() => { const status = table.checkStatus('test'); $count.text(status.data.length); }, 10) - 如果用了
page: true,注意status.data只含当前页选中项,不是全部 —— 要全局统计得自己维护一个数组或用status.isAll判断是否全选再算总数 - 避免直接读
e.elem.checked,它只反映点击瞬间状态,和实际选中结果可能不一致
移动端点选中后 footer 文字跳动或错位?
纯靠 position: absolute 或 margin-top 往下顶 footer,在响应式下极易错位。建议用 flex 布局包裹表格和 footer,让 footer 始终贴底。
- 父容器设
display: flex; flex-direction: column; - 表格容器设
flex: 1;,footer 设flex-shrink: 0; - 去掉所有
margin-bottom、padding-bottom等干扰高度的样式 - 测试时打开浏览器设备模拟器,点几次全选/取消,观察 footer 是否随表格高度变化稳定停靠
isAll 场景,导致翻页后“已选中 0 条”明明勾了全选却显示错误。










