layui select 双击事件不生效是因为渲染后实际点击区域是伪元素(如 .layui-select-title),原生 dblclick 在伪 DOM 上不可靠且移动端默认禁用;应改用单击节流模拟双击或采用显式按钮交互。
layui 的 select 元素原生不支持双击事件,强行绑定 dblclick 会失效或不可靠——这不是你代码写错了,是底层限制。
Layui 的下拉框(带 lay-search 或普通 select)渲染后,实际可点击区域是它生成的伪元素(如 .layui-select-title、.layui-select-down),原生 select 被隐藏;而浏览器对这些伪 DOM 的 dblclick 事件支持极差,尤其在 Chrome 和 Safari 中常被忽略或吞掉。
<select id="mySelect"> 绑 $('#mySelect').on('dblclick', ...) —— 永远不会触发.layui-select-title 绑 —— 可能偶尔触发,但不稳定,且和展开/收起逻辑冲突dblclick,Layui 也不做兼容补丁如果你真需要区分单击选中 vs 双击执行某操作(比如快速编辑、跳转详情页),得自己实现节流判断,不能依赖原生事件:
click 事件,用 setTimeout 延迟执行单击逻辑click,若 300ms 内再次触发,就判定为“双击”,立刻清除定时器并执行双击逻辑click 监听器必须作用于同一 DOM(推荐用委托到 .layui-select-title)let clickTimer = null;$('.layui-select-title').on('click', function() {clearTimeout(clickTimer);clickTimer = setTimeout(() => {// 单击逻辑:比如触发 form.val() 回填console.log('单击:选中项已更新');}, 300);});$('.layui-select-title').on('click', function(e) {if (clickTimer) {clearTimeout(clickTimer);clickTimer = null;// 双击逻辑:比如打开详情弹窗console.log('双击:打开详情页');e.stopPropagation(); // 防止冒泡触发上面的单击回调}});
实际落地时,用户根本记不住“这里要双击”,尤其表单场景。Layui 最新也从不推荐这种交互。建议换成明确、可发现的操作方式:
button 或 icon,点击即执行“双击想做的事”(如编辑、刷新、跳转)lay-event 配合表格行工具栏,把复杂操作收进操作列,避免和选择逻辑耦合touchstart + setTimeout)代替双击,但仅限移动端且需额外处理 PC 端 fallback真正难的不是怎么绑事件,而是让交互意图清晰可预期——Layui 的下拉框设计初衷就是“选值”,不是“触发动作”。强行塞双击,最后大概率变成维护噩梦。