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