最稳路径是先操作原始select再调form.render('select', 'filter');必须用lay-filter而非ID,配合form.val()设值,表格中需在done回调逐个render防销毁。

直接操作原始 select 元素再 render 是最稳的路径
往已渲染过的 select 里用 append() 或 innerHTML 加 option,界面不会变——因为 Layui 渲染后会把原生 select 隐藏,下拉面板是它自己生成的 dl.layui-anim,不监听 DOM 变化。
正确做法分两步:先往原始 select 添加 option,再调 form.render('select', 'your-filter')。第二个参数必须是 lay-filter 值(不是 ID),否则可能重绘整个页面所有 select,效率低还易出错。
- 确保
layui.use(['form'], function() { ... })已加载,否则form.render会报form is not defined - 如果没设
lay-filter,就用form.render('select')全局重绘,但仅限调试或极简场景 - 避免在表格
done回调里无条件调form.render('select'),翻页时旧 DOM 销毁、新 DOM 未初始化,容易漏渲染
用 form.select.options 批量注入更安全(Layui 2.8+)
后端返回的是数组对象(比如 [{value: '1', title: '北京'}, {value: '2', title: '上海'}]),直接改 form.select.options['my-city'] 再 render,能绕过 HTML 转义、空格截断、value/text 不一致等坑。
这个映射表只在 Layui 2.8 及以上版本存在,2.7 或更早版本访问会得 undefined,必须降级用 DOM 方案。
- key 是
lay-filter值,不是元素 ID,比如<select lay-filter="city">→form.select.options['city'] = newData - 赋值后必须调
form.render('select', 'city'),否则不生效 - 该方式不依赖 DOM 结构,适合省市区三级联动中整套替换市/区选项
form.val() 是唯一能选中动态新增项的写法
加完 option 后,别用 $('#mySelect').val('2').trigger('change'),原始 select 已被 hide,jQuery 的 val() 失效,甚至报 Cannot set property 'value' of null。
Layui 的 select 组件只认 form.val() 这个 API,且格式固定:form.val('your-filter', {name: 'value'}),其中 name 是 select 的 name 属性值,不是 id 或 lay-filter。
- 如果
select没设name,form.val()会静默失败,务必补上 - 选中动作必须在
form.render()之后执行,否则新选项还没加载进组件内部状态 - 若要清空选中,传空字符串:
form.val('city', {city: ''})
表格单元格里的 select 动态更新要绕开 form.render
表格开启分页或高度限制后,每翻一页,之前渲染的 select DOM 就被销毁,form.render('select') 不会自动补全新行里的 select,导致下拉框变回原生样式,甚至事件重复绑定。
真正可靠的方案是:在 done 回调里,用 layui.each() 遍历当前页所有目标 select,逐个调 form.render('select', 'xxx');或者更彻底——表格里改用 layui.dropdown.render() 自定义下拉,绑定到单元格本身,不受分页影响。
- 不要在
done里无差别form.render('select'),查 DOM + 初始化成本高,50 行 × 3 个下拉框 = 至少 150 次冗余操作 - 如果用了
lay-ignore,那它真就完全跳过渲染,动态加的 option 也不会被识别,这种场景必须移除lay-ignore或换方案 - 表格内 select 的
lay-filter最好带唯一前缀(如"table-city-1"),避免跨页冲突
option,实际卡点全在「时机」和「上下文」:render 必须紧接 DOM 修改之后,form.val() 必须等 render 完才调,表格里还得防分页销毁。漏掉任一环,界面就停在“看起来改了,其实没生效”的状态。


















