必须显式添加value=""的option并调用form.render('select')才能正确清空并显示placeholder;动态加载需重插空选项,带搜索的select还需手动清除layui-this高亮。

清空 select 值后 placeholder 不显示?必须确保 value="" 的 option 存在
清空后下拉框标题栏显示空白、不回退到“请选择”提示,根本原因是 Layui 依赖 value="" 的 <option></option> 作为 placeholder 入口。它不会自动生成这个空选项——你删了或没写,它就没了。
常见错误现象:调用 $('#mySelect').val('') 后 UI 还卡在旧值上;或清空后标题变空,点开下拉列表顶部也没“请选择”项。
- HTML 中必须显式写:
<option value="">请选择分类</option>,且放在所有<option></option>最前面 -
value必须是严格空字符串,不能是" "、"null"或"undefined" - 如果用 AJAX 动态填充选项,每次重载后都要确保这个空 option 被重新插入(不是只追加新项)
只改 DOM 值不生效?必须调用 form.render('select')
Layui 把 UI 和原生 <select></select> 分离了。你改了 .val(''),只是动了隐藏的原始元素,界面上的标题、高亮、下拉面板全无反应。
正确做法是两步缺一不可:
- 设置空值:
$('#mySelect').val('') - 强制同步 UI:
layui.form.render('select')
注意:form.render() 不带参数会重绘全部表单控件;若页面有多个 select,仍得用 form.render('select'),Layui 没提供单个 select 的精细刷新接口。
带 lay-search 的 select 清空后自动恢复旧值?要手动清除 UI 高亮
启用搜索的下拉框有个隐藏逻辑:当搜索框输入为空时,Layui 会悄悄把选中状态还原为上次值。点击清除按钮后看到“又弹回来了”,就是它在作祟。
绕过它的唯一办法是,在清空值的同时,手动干掉 UI 层的选中态:
- 先清空原生值:
$('#mySelect').val('') - 再清除伪元素高亮:
$('#mySelect').siblings('.layui-form-select').find('.layui-this').removeClass('layui-this').addClass('layui-hide') - 最后刷新:
layui.form.render('select')
这个操作顺序不能颠倒;如果 .layui-form-select 结构还没生成(比如表单是动态加载的),得确保它已存在再执行。
用 formSelects 插件时 placeholder 不显示?检查初始化时机和依赖加载
formSelects 的 placeholder 是渲染在搜索输入框里的文字,和原生 select 的空 option 完全无关。它不显示,90% 是加载或调用时机问题。
关键检查点:
- 是否引入了
formSelects-v4.js?只引了layui.js会导致formSelects is not defined - 是否在
layui.use(['formSelects'], function(){...})内初始化?漏掉模块依赖,formSelects.render()会静默失败 - 初始化是否早于 DOM 就绪?比如写在
顶部但 DOM 还没解析完,应包在$(function(){...})或DOMContentLoaded里
placeholder 文字只在搜索框内可见,下拉列表本身不会出现该文本;设成函数(如 placeholder: () => 'xxx')会失效,必须是字符串。
option 必须由你手写、form.render('select') 必须显式调用、带搜索的 select 必须手动清理伪高亮——少一个,UI 就卡住。











