layui表格默认只读,列未配置edit属性则双击无反应;edit回调中return false仅中断保存而非禁用编辑;动态禁用需在done回调中用.data('edit', false)并重置dom;templet列需手动实现编辑逻辑。

列配置没写 edit 就是默认不可编辑
只要列定义里没加 edit: 'text'(或 'number'、'date' 等),这列所有单元格天然双击无反应、点不动、不弹输入框——Layui 表格默认就是只读的。很多人折腾半天“禁用”,其实是白忙:检查列配置是否漏写了 edit,或者拼错成 editor、大小写不一致;确认没在 templet 里手动塞了 <input>,否则 edit 配置会被忽略。
table.on('edit()') 里 return false 不是禁用,是中断已开始的编辑
这个回调触发时,输入框已经渲染出来了,用户正在输、能删、失焦还会把值写进 table.cache。你在这里 return false 只会阻止后续保存逻辑,但改不了“已激活”状态。真要拦住,必须立刻还原 DOM:
- 用
$(obj.tr).find('td[data-field="' + obj.field + '"]').html(obj.value)把输入框替回原始文本 - 紧接着写
return false——缺一不可,漏掉就等于没拦 - 别指望给
<td> 加 <code>pointer-events: none或设disabled,前者让事件压根不触发,后者对动态生成的<input>无效动态控制某行某列不可编辑,得在
done回调里用.data('edit', false)适用于初始化时就能确定哪些单元格该锁死的场景,比如服务端返回了
isLocked: true字段。注意几个硬性条件:- 必须等
done回调触发后执行,提前操作找不到 DOM 节点 - 要用
tr[data-index]定位行,不是原始数组下标;配合td[data-field]找列 -
.data('edit', false)只影响后续双击行为,对当前已激活的编辑态无效 - 表格 reload、分页、搜索后,这个状态会丢失,得在新的
done里重新 patch
用了
templet的列,edit配置完全失效只要列写了
templet,无论你配不配edit,Layui 都不会往你写的 HTML 里自动塞<input>。想实现部分行可编、部分不可编,就得自己动手:- 在
templet函数里判断d.status === 'done',是则直接返回纯文本,否则返回带<input>的 HTML - 手动监听
input的change或blur,更新table.cache并调用table.reload()或table.updateCell() - 别忘了给只读状态加视觉反馈,比如
style="background:#f5f5f5; cursor:not-allowed;"
return false在edit回调里不是可选项,是唯一有效的“取消”信号;而templet列的编辑逻辑,从头到尾都得自己扛,Layui 不会帮你补半行代码。 - 必须等











