table.reload 必须传全配置,否则勾选状态会丢失;需显式传入 url、where(动态读取 token)、page(curr 保持当前页);跨页勾选依赖 temp_all_list 和 temp_table_list 两个数组在 done 回调中手动还原 DOM 状态,并校验接口响应有效性防止静默丢失。
table.reload 必须传全配置,否则勾选状态会丢
很多人以为 table.reload() 只要调用就能刷新数据,结果一刷,之前勾的 checkbox 全没了。根本原因是:reload 不继承首次 render 的配置,漏传 url、where、page 中任意一个,表格就可能回第 1 页、发空请求、甚至渲染失败——而勾选状态只绑定在当前页 dom 和内部缓存上,页面重绘后自然清空。
必须显式传入完整参数:
-
url:不能省,哪怕和初始化一样 -
where:带搜索条件或 token 的必须每次重算(比如从localStorage读取最新 token) -
page:想保持当前页就得写{ curr: tableIns.config.page.curr },不写就默认回到第 1 页
跨页勾选靠两个全局数组 + done 回调还原
layui 默认只记当前页勾选项。要翻页还保留,得自己存 ID 或整行数据。核心是两个变量:temp_all_list 存所有已勾选的原始数据(建议用唯一字段如 id 做 key),temp_table_list 存当前页所有数据。每次 done 回调里遍历当前页数据,比对 temp_all_list,手动设 o["LAY_CHECKED"] = "true" 并触发 DOM 状态更新。
注意三点:
- 别用
table.checkStatus().data当源数据——它只返回当前页已勾的,无法跨页聚合 - 还原时必须同时操作 DOM:
$('input[type="checkbox"]').prop('checked', true)+.next().addClass('layui-form-checked') - 全选框状态也要手动同步,靠
$('.layui-table th[data-field="0"] input')控制
定时刷新时,错误处理不兜底会导致勾选“静默丢失”
自动刷新最常踩的坑是:接口报错(401、超时、返回结构异常)时,table.reload 的 error 回调并不总触发,但 done 仍会执行——如果里面没判断 res.code 或 res.data 是否有效,就会用空数据重绘表格,勾选状态直接归零。
安全做法是在 done 里加校验:
- 检查
!res.data || res.code !== 0,失败时layer.msg提示并clearInterval定时器 - token 过期不能硬编码在
where里,每次 reload 前从localStorage读一次 - 高频刷新(≤10 秒)建议加节流:用标志位记录上一次请求是否完成,未完成则跳过本次
setRowChecked 是补救手段,不是持久化方案
table.setRowChecked 能主动勾选某行,但它只作用于当前页已渲染的 DOM。如果你在 reload 后立刻调用它,但目标行还没加载出来(比如页码变了),就会无效。它适合点击行触发选中、或局部更新后补选,不适合替代上面的数组缓存方案。
真正容易被忽略的是:reload 后的 DOM 是全新渲染的,所有事件绑定、自定义属性都会丢失。所以「保持勾选」这件事,本质是「用户操作 → 存 ID → reload → 比对还原」,而不是靠某个 API 自动续上。











