根本原因是layui 1.x用click事件绑定下拉展开,而移动端浏览器对绝对定位浮层内原生控件的click响应不稳定;最稳解法是将源码中select.on('click', '.layui-form-select')改为touchstart并加e.preventdefault()。

为什么 layui select 在 iOS/Android 上点不动
根本原因不是“不支持移动端”,而是 layui 1.x 默认用 click 事件绑定下拉展开逻辑,而移动端 Safari 和部分 Android 浏览器对
改 layui.js 的 touchstart 补丁(最稳)
直接改源码是最可靠的方式,不用动 HTML 结构,也不依赖 form.render() 频繁调用:
- 定位到
layui.js约第 6800 行(不同版本略有偏移),搜索select.on('click', '.layui-form-select' - 把
'click'改成'touchstart' - 在回调函数第一行加
e.preventDefault(),防止误触发页面滚动 - 保留原有
click绑定不变(即双事件共存),PC 端照常工作 - 改完必须清浏览器缓存,否则白改
不改源码的兼容方案:用原生 select + CSS 覆盖
如果不能动 layui.js(比如用 CDN 或受控环境),就绕过 Layui 的渲染逻辑,手动控制:
- HTML 中写原生
<select></select>,不加lay-filter,也不调form.render() - 用 CSS 强制提升层级和点击区域:
select { -webkit-appearance: menulist; min-height: 40px; } - 禁用 Layui 对该 select 的接管:确保它不在任何
form容器内,或给父级加data-lay-ignore - 监听原生
change事件,别依赖form.on('select(...)')
表格内嵌 select 被截断 + 移动端无响应的叠加问题
如果 select 在 layui-table 里点不动,大概率是双重问题:既受 overflow: hidden 截断,又卡在 click 事件失效。此时不要强行修 overflow,而是换方案:
- 优先用 Layui 自带的
lay-select(JS 模拟下拉),它 DOM 插入到body下,天然绕过表格裁剪和移动端 click 失效 - 表格列
templet中写<select lay-filter="xxx">...</select>,并在done回调里执行form.render('select', 'table-form-wrap') - 确保外层容器有唯一 ID(如
id="table-form-wrap"),且该 ID 传给form.render()第二个参数 - 别用
jQuery .val()直接设值,必须走form.val('filterName', {...}),否则内部状态不同步
form.render() 或改 CSS 层级——后者治标不治本,还容易引发滚动错位、fixed 列溢出等连锁问题。











