Layui原生select不支持多选,需用formSelects-v4;清空必须调formSelects.value('id', [])而非操作DOM;删除某选项需先取值、过滤再写回;×按钮失效多因加载顺序、CSS缺失或参数名错误。

layui 原生 select 根本不支持多选,别白费劲删 multiple 属性
直接给 <select multiple> 加 multiple 属性,Layui 的 form.render('select') 会完全忽略它——渲染后还是单选 UI,点击多个选项只保留最后一个,提交时也只发一个 value。这不是 bug,是 Layui 官方明确不支持的行为。你看到的“多选效果”大概率是 DOM 没刷新导致的错觉,或者浏览器原生 fallback(丑且无样式)。
formSelects-v4 的清空操作必须用 API,不能碰 DOM
如果你已接入 formSelects,清空不是调 $('#mySelect').val('') 或删 option,那只会让数据和 UI 脱节:
-
formSelects.value('mySelect', [])—— 正确清空,自动刷新 UI 和内部状态 -
formSelects.value('mySelect')返回数组,比如['java', 'python'],不是字符串 - 手动移除
option后不调formSelects.data('mySelect', newData),下次重绘仍可能恢复旧项 - 点右上角 × 按钮只是触发了
formSelects.value(..., []),逻辑同上
动态删除某个已选项:得先取值再过滤,不能靠 DOM 定位
想删掉已选中的 “Python” 但保留 “Java”,不能写 $("#mySelect option[value='python']").remove()——formSelects 的真实数据不在 option 里,它用的是内部缓存对象。
正确做法是:
- 用
formSelects.value('mySelect')拿到当前选中数组 - 用
.filter(v => v !== 'python')过滤掉目标值 - 再用
formSelects.value('mySelect', filteredArray)写回 - 整个过程不操作任何
option或select元素
清空按钮失效?检查 formSelects 是否加载成功
点击 × 按钮没反应,90% 是脚本加载问题:
- 确认引入的是
formSelects-v4.js(不是 v5,v5 不兼容 Layui) - JS 必须在
layui.use(['form'], ...)之后加载,否则formSelects是undefined - CSS 文件缺失会导致按钮区域不可点击(看起来有 ×,实际是文字,没绑定事件)
- 初始化时漏写
btnClear: true,或者写成clearBtn: true(参数名错误)
最隐蔽的坑:页面有多个 formSelects 实例,其中一个初始化失败(比如 data 格式错),会导致后续所有实例的事件监听器注册失败——× 按钮集体失灵。


















