layui弹窗输入框被软键盘遮挡时,首选为input添加readonly属性(不可用disabled);若需支持手动输入,则通过visualviewport.resize或window.resize监听+scrollintoview({block:'center'})动态调整位置。

在Layui弹窗中,用户点击输入框后软键盘弹出,直接盖住输入框导致无法查看已输入内容,尤其在微信内置浏览器和iOS Safari中高频复现。
给输入框加 readonly 属性(推荐)
这一步操作起来很简单,直接在HTML中为input标签添加readonly即可。
【必须加 readonly,不能用 disabled】 disabled会导致Layui弹窗内表单验证失效、laydate等组件初始化失败,且输入框视觉变灰,破坏弹窗一致性。
示例写法:<input type="text" class="layui-input" readonly>
若弹窗是JS动态渲染的(如layer.open中传入content为字符串或DOM),需在渲染完成后手动设置:document.querySelector('.layui-layer .layui-input').readOnly = true。
监听 focus 事件并滚动到可视区域
仅当必须支持手动输入+选择双模式时启用,比如搜索框需支持关键词输入与下拉补全。
第一步:确保弹窗容器未设置 overflow: hidden,否则 scrollIntoView 会被截断;
第二步:为弹窗内所有可编辑输入框绑定 focus 事件;
第三步:触发 scrollIntoView({ block: 'center', behavior: 'smooth' }),强制将输入框垂直居中显示;
注意:iOS 15.4+ 已废弃 scrollIntoViewIfNeeded,请勿使用;block: 'center' 比 'nearest' 更可靠,能避开顶部导航栏和底部TabBar遮挡。
动态调整弹窗位置避开键盘
方法一:监听 visualViewport.resize(现代浏览器首选)
在弹窗打开后执行:visualViewport?.addEventListener('resize', () => { const input = document.activeElement; if (input && input.matches('.layui-layer input:not([readonly])')) { input.scrollIntoView({ block: 'center' }); } });
方法二:降级监听 window.resize(兼容旧安卓)
用 setTimeout 延迟 300ms 执行 scrollIntoView,避开键盘动画未完成时的视口高度误判;
【关键前提:弹窗必须挂载在 body 下】 若 layer.open 的 area 或 offset 导致弹窗被局部 overflow 容器裁剪,滚动将完全失效。











