在开发移动端网页或 PWA(渐进式 Web 应用)时,很多开发者会遇到一个令人困惑的问题:在 iPhone 的 Safari 浏览器中,点击 HTML 的 <input> 输入框后,虚拟键盘没有自动弹出。
e.preventDefault() 或未正确聚焦。display: none、visibility: hidden 或位置偏移导致 Safari 认为该元素不可交互。.focus()。✅ 正确做法:确保在用户点击事件中直接调用 focus():
// ✅ 推荐:在用户点击回调中直接 focus
document.getElementById('btn').addEventListener('click', function() {
const input = document.getElementById('myInput');
input.removeAttribute('readonly'); // 如果之前设为 readonly
input.focus(); // 必须在用户手势内调用
});
.focus() 才会弹出键盘。如果在异步回调(如 fetch、setTimeout)中调用,则不会生效。
autofocus 在 iOS 上通常无效)。display: none,可改用 opacity: 0; position: absolute; 等方式隐藏。font-size ≥ 16px,防止 Safari 自动缩放导致布局异常。iPhone 上输入框不弹出键盘,本质是 Safari 对用户交互的安全限制。只要确保 focus() 调用发生在用户直接操作的同步上下文中,并保证输入框可见、可交互,即可正常唤起虚拟键盘。