obj.field 是 layui 表格 edit 事件中唯一可靠且官方支持的字段标识,直接使用即可,无需解析 dom 或查索引;它与列配置中的 field 完全一致,稳定不受表头合并等干扰。
直接读 obj.field 就行,这是 layui 原生支持的字段,不是要自己反查。
edit 事件里 obj.field 是可靠且唯一的来源
表格单元格编辑完成触发 table.on('edit(filter)', callback) 时,回调参数 obj 的结构是确定的:obj.field 就是当前被编辑列的 field 值,无需解析 DOM 或查配置。
- 它和你在
cols中定义的{field: 'price', title: '价格'}里的field完全一致 - 即使列用了
templet或toolbar,只要该列设置了edit: 'text'(或其它编辑类型),obj.field就能正确返回 - 不依赖
event.td.cellIndex,不受合并表头、colspan等干扰
为什么有人会去查 event.td.cellIndex?
因为混淆了 cell 事件和 edit 事件——cell 事件的 event 对象确实没有 field,但 edit 事件的 obj 对象有,而且更稳定。
-
cell事件适合监听任意点击(含未启用编辑的列),但它不提供field,得手动对齐列索引 -
edit事件只在编辑提交后触发,obj.field是 Layui 内部根据列配置自动注入的,100% 可信 - 如果你看到代码里用
$(obj.tr).find('td').eq(...)或event.td.cellIndex来推导field,那是在处理cell场景,不是edit
常见误判:把 this 当成字段名来源
在 edit 回调里,this 指向的是输入框 DOM 元素(<input>),它的 value 是新值,但跟 field 无关;$(this).prev().text() 是旧值文本,也不是字段名。
- 错误写法:
const field = $(this).closest('td').data('field')——data-field不一定存在,且非官方保证字段 - 正确写法:
const field = obj.field—— 直接、简洁、Layui 官方契约 - 如果
obj.field是undefined,大概率是列没配field,或者漏写了edit属性
真正容易被忽略的是:这个 obj.field 只在 edit 事件里有效,别拿它去套 cell、row 或 tool 事件。不同事件的数据载体完全不同。











