是,隐藏列的数据依然存在于每行原始数据中;layui.table 中 hide: true 仅控制DOM渲染,不影响数据绑定,所有行级事件回调的 data 对象及 table.cache 均包含隐藏字段,前提是后端返回了该字段且字段名大小写完全匹配。

layui表格隐藏列的数据还在不在
在 layui.table 中,设置 hide: true 的列只是不渲染到页面上,对应字段的值依然存在于每行原始数据(data)中。只要你在 cols 中定义了该列(哪怕隐藏),且后端返回了该字段,它就会被自动映射进行数据对象里。
常见误解是“隐藏 = 删除”,其实不是——hide: true 只影响 DOM 渲染,不影响数据绑定。
如何在事件回调里拿到隐藏列的值
所有行级事件(如 tool、rowDouble、rowClick)回调参数中的 data 对象,都包含全部字段,无论是否隐藏。你直接取就行:
table.on('tool(test)', function(obj){
console.log(obj.data.id); // 假设 id 是隐藏列
console.log(obj.data.status); // 假设 status 是隐藏列
});
注意:如果后端没返回这个字段,或者字段名拼写错误(比如大小写不一致),obj.data.xxx 就是 undefined,和是否隐藏无关。
用 table.cache 查看当前缓存数据结构
调试时最直接的办法是打个断点或 console.log 看 table.cache['test']('test' 是你的 id 值):
- 确认隐藏列字段名是否出现在每条缓存对象里
- 检查字段值是否为
null或空字符串(可能是后端没传) - 注意:缓存里的字段名严格匹配后端返回的 key,不是你
field配置的别名
例如后端返回 {"user_id": 123},但你在列配置写了 field: 'id',那缓存里还是 user_id: 123,不是 id ——除非你用 parseData 手动做了映射。
想在模板列里引用隐藏字段怎么办
模板列(templet)的 data 参数也是完整行数据,可直接访问隐藏字段:
{field: 'operate', title: '操作', templet: function(d){
return '<button class="layui-btn layui-btn-xs">' +
(d.status === '1' ? '启用' : '禁用') +
'</button>';
}}
这里 d.status 即使是隐藏列也能取到。但如果模板里要根据隐藏字段做条件渲染,务必先判空:
-
if (d.status == null)要比if (!d.status)更安全(避免 0、false 等假值误判) - 字段名大小写必须和后端返回完全一致,JS 是区分大小写的
- 不要依赖列顺序或渲染顺序来判断字段是否存在
真正容易被忽略的是:隐藏列字段名是否真的被后端返回了,而不是你以为“写了 hide: true 就自动有了”。











