必须调用 layui.form.render('select') 同步 UI,仅改 DOM 值无效;带 lay-search 的需手动清除 .layui-this;多选须传 [];动态加载后应插入 value="" 的空选项再渲染。

点击清除按钮后 select 值为空但 UI 未更新
这是最常见现象:执行 $('#mySelect').val('') 后,原生 select 的 value 确实清空了,但 Layui 渲染出的下拉面板、选中高亮、标题文字仍停留在旧值——因为 Layui 把 UI 和 DOM 分离了,只改 DOM 不触发重绘。
必须显式调用 layui.form.render() 或限定类型 layui.form.render('select') 才能让 UI 同步。注意:不能只写 form.render()(未声明变量),要确保 form 是已加载的模块实例。
- ✅ 正确写法:
layui.use('form', function(){ var form = layui.form; $('#mySelect').val(''); form.render('select'); }); - ❌ 错误写法:
$('#mySelect').val(''); form.render();(form未定义或作用域外) - ⚠️ 注意:如果页面有多个
select,form.render('select')会重绘全部;只想刷某一个,仍需全量渲染,Layui 没提供单个 select 的 render 接口
带 lay-search 的 select 清空后自动回填默认项
启用搜索的 select[lay-search] 有个隐藏行为:当用户手动清空搜索框输入时,Layui 会尝试“恢复”上次选中的 option,导致点击清除按钮后又弹回原值。
根本原因是 Layui 监听了搜索框的 input 事件,并在输入为空时悄悄调用了内部逻辑还原选中状态。绕过它的唯一办法是,在清空值的同时,手动清除 Layui 生成的 UI 选中态。
- 先清空原生值:
$('#mySelect').val('') - 再清除 UI 高亮:
$('#mySelect').siblings('.layui-form-select').find('.layui-this').removeClass('layui-this').addClass('layui-hide') - 最后刷新渲染:
layui.form.render('select') - ⚠️ 补充:如果搜索框是动态插入的(比如通过 AJAX 加载表单),需确保上述操作在
form.render()之后执行,否则.layui-form-select结构可能还不存在
多选 select[multiple] 清空失败
Layui 对原生多选 select 支持有限,不推荐直接用 lay-search + multiple 组合——它不会渲染成带标签的多选 UI,而是退化为普通下拉(仅支持单选视觉)。
若坚持用原生多选,清空逻辑和单选不同:必须传数组 [],而不是空字符串 ''。
- ✅ 正确:
$('#myMultiSelect').val([]) - ❌ 无效:
$('#myMultiSelect').val('')(浏览器忽略,Layui 也不识别) - ⚠️ 注意:Layui 官方不维护多选下拉的美化样式,如需完整多选体验,应改用第三方组件(如
layui-formSelects)或自行封装
动态加载选项后重置失效
通过 AJAX 替换 select 的 option 后,直接 .val('') + form.render() 可能无效——因为新插入的 option 中可能没有 value="" 的空选项,导致 val('') 实际找不到匹配项。
此时清空的本质不是“设为空值”,而是“移除所有选中态”。更稳妥的做法是重建空选项并设值:
- 重置 HTML:
$('#mySelect').html('<option value="">请选择</option>') - 再渲染:
layui.form.render('select') - ⚠️ 关键点:这个空
option的value必须是空字符串"",且不能省略value属性(<option>请选择</option>的 value 是文本内容,不是空)
真正麻烦的从来不是“怎么写一行代码清空”,而是“清空之后 UI 是否真同步”“搜索框是否偷偷回填”“动态内容有没有空 option”——这些细节不验证,点十次清除按钮都像没点一样。


















