inputmode="none"仅阻止自动弹出软键盘,不禁止手动聚焦、粘贴或外接键盘输入;需配合blur()、tabindex="-1"、禁用右键等手段才能彻底禁用键盘交互。

inputmode="none" 本身不“禁用”系统键盘,它只是告诉浏览器“别自动弹出软键盘”——用户依然可以手动点输入框、聚焦、粘贴、甚至用外接键盘输入。真要彻底阻止键盘交互,得组合其他手段。
inputmode="none" 的真实作用和常见误解
它不是 disabled,也不等价于 readonly:
• 用户点击后输入框仍可获得焦点,光标会闪;
• 长按仍可能唤出系统菜单(复制/粘贴/全选);
• 外接物理键盘或辅助设备(如 Switch 控制器)仍能输入;
• iOS 和部分安卓 WebView 完全忽略该属性,直接弹默认键盘。
想真正阻止键盘弹出,必须配合 focus 拦截
单纯写 inputmode="none" 没用,关键是在用户触发聚焦时主动 blur:
- 监听
focus或click事件,立刻执行el.blur() - 加上
tabindex="-1"防止键盘 Tab 进入 - 禁用右键和长按:加
oncontextmenu="return false"和onselectstart="return false" - 注意:iOS Safari 中
blur()在 touchend 后延迟生效,建议加setTimeout(() => el.blur(), 0)
更可靠的替代方案:用 div + contenteditable=false
如果目标是“显示文字但不让任何键盘介入”,<div contenteditable="false">内容</div> 比 input 更干净:
• 不会响应任何聚焦行为
• 不触发软键盘(除非误配了 inputmode)
• 可用 user-select: none 防止选中
• 若需表单提交值,用隐藏的 <input type="hidden"> 同步数据
立即学习“前端免费学习笔记(深入)”;
容易被忽略的边界情况
• 屏幕阅读器仍可能把 inputmode="none" 的输入框当作可操作控件播报,需加 aria-hidden="true" 并用 role="presentation" 显式声明不可交互
• inputmode="none" + type="number" 组合在 iOS 上可能引发键盘闪退,应避免
• 真机测试必须覆盖 vivo、华为、小米等国产输入法——它们基本不识别 inputmode,只看 type 和 CSS 样式



















