lay-search生效需同时满足:Layui≥2.9.16、select在form.layui-form内、未调用form.render()或禁用渲染;支持fuzzy/caseSensitive配置、remote远程搜索,但不支持新增选项、拼音搜索等高级功能。

lay-search 属性怎么写才生效
必须同时满足三个条件,lay-search 才会真出搜索框:Layui 版本 ≥ 2.9.16、<select> 套在 form.layui-form 容器内、没调用 form.render() 时传 disabled: true 或手动移除渲染标记。
常见失效场景:
- 外层没写
class="layui-form"—— Layui 的 form 模块压根不扫描这个select - 动态插入的
select后没调form.render('select')—— 渲染时机错,属性白加 - 用了定制主题,CSS 把
.layui-form-select .layui-input设成display: none—— 框在那儿,但看不见
模糊匹配(fuzzy)和大小写敏感(caseSensitive)怎么配
这两个开关直接影响用户能不能搜到东西,不是可有可无的装饰项。
lay-search="{fuzzy: true}":输“海”能命中“上海市”“海上风电”,适合地名、人名等非结构化文本
lay-search="{caseSensitive: true, fuzzy: false}":严格区分大小写 + 只匹配开头,适合字段名、编码类值(如 API_KEY、user_status)
注意顺序:先做大小写判断,再做模糊/前缀匹配。比如 fuzzy: true + caseSensitive: true 时,“BJ”搜不到“bj”,但“bj”能搜到“bj123”。
旧版本(如 2.8.x)写成对象会被当空字符串处理,降级为默认前缀匹配,不报错也不提示。
远程搜索(remote)怎么连后端
原生 lay-search 默认只过滤已有 <option>,要查后端得显式启用 remote 模式:
lay-search="{remote: true, url: '/api/areas'}" —— 输入时自动发 GET 请求,带 q=xxx 参数
后端必须返回标准格式:
{ "code": 0, "msg": "", "data": [ {"value": "1", "title": "北京市"}, {"value": "2", "title": "上海市"} ] }
常见翻车点:
- 返回数组没包在
data字段里 → 下拉列表空白 - 用
text当键名 → Layui 不识别,必须是title - 没对
q参数做trim()→ 用户输“ 杭州 ”,后端 LIKE 查询失败 -
code !== 0→ Layui 当作请求失败,不渲染任何选项
想搜不到就加新选项?原生不支持
lay-search 只负责过滤,不提供“新增”入口。所谓“搜不到就创建”,得自己补逻辑,而且有坑:
不能监听原始 <select> 的 blur —— 渲染后它被隐藏了,表层是 <div class="layui-input">
正确做法:
- 用
$('body').on('blur', '.layui-input', ...)捕获失焦 - 通过
$(e.currentTarget).closest('.layui-form-select').prev('select')找到原始select - 追加前必须去重:
$(select).find('option').filter(function(){ return $(this).text().trim() === inputVal })
拼音搜索、多级联动、输入中高亮这些,原生 lay-search 都不支持,得绕开它自己接管展开逻辑 —— 这部分容易低估复杂度,尤其键盘导航和值同步,一不留神就崩掉表单事件绑定。


















