Layui table下拉编辑需弃用edit:'select',改用templet渲染自定义下拉+lay-event绑定事件,手动更新table.cache并调用table.render()刷新视图,注意移动端点透、重复绑定及状态管理问题。
layui table 编辑列设为下拉框:用 templet + edit: 'select' 不行
直接在 column 配置里写 edit: 'select' 只能触发原生 <select></select> 输入,不支持自定义选项、异步数据或样式控制——这是最常踩的坑。layui 的 edit: 'select' 本质是让单元格变 input 框并监听回车,和下拉选择逻辑无关。
真正可行的方式是放弃 edit 字段,改用 templet 渲染带下拉的 HTML,并配合 event 绑定点击展开、done 回调更新数据。
- 必须关闭该列的
edit(设为false或删掉),否则会和自定义下拉冲突 -
templet里用<select></select>或更推荐<div class="layui-select"> + 自定义弹层(避免原生 select 在表格中定位错乱) <li>下拉选项建议用静态数组或提前加载好的 <code>options变量,避免每次点击都发请求 - templet 返回的 HTML 必须包含
lay-event属性,值任意但需唯一,如lay-event="editStatus" - 事件回调里用
tr元素定位当前行,用td定位当前单元格,避免用 index 硬编码 - 不要在 templet 里直接写
onchange—— 表格重渲染后绑定丢失,且无法触发done更新逻辑
如何绑定点击事件让下拉展开:用 lay-event 而非 onclick
Layui 表格内部会重写 DOM,直接写 onclick 会被清空或失效。正确做法是给下拉容器加 lay-event="openSelect",再在 table.on('tool(yourTable)') 中监听。
<script type="text/html" id="statusTpl">
<div class="custom-select" lay-event="openStatus">
{{ d.statusName || '请选择' }}
<span class="arrow">▼
</script>











