inputmode 支持 text、decimal、numeric、tel、email、url、search、none 等值,其中 text、decimal、numeric、tel、email、url 较稳妥;decimal 唤出带小数点数字键盘,numeric 仅数字键,search 在部分 Android 触发搜索键盘,none 需配合 readonly 使用,verbatim 和 latin 无效。

inputmode 属性支持哪些值?哪些值实际有效
不是所有 inputmode 值在所有浏览器或系统上都起作用。iOS Safari 对 inputmode 支持较弱(iOS 16.4+ 才开始有限支持),Android Chrome 和 WebView 支持更完整,但依然有差异。
常用且较稳妥的取值包括:text、decimal、numeric、tel、email、url。其中 decimal 在多数 Android 设备上会唤出带小数点的数字键盘,而 numeric 通常只显示纯数字键(无小数点、无负号)。
-
search在部分 Android 浏览器中会触发搜索键盘(带“搜索”回车键),但 iOS 基本忽略 -
none可隐藏键盘(需配合readonly使用,否则可能被忽略) -
verbatim、latin等值目前基本无实际效果,不建议使用
为什么加了 inputmode 却没变键盘?常见原因
最常踩的坑是:只设 inputmode,没管 type。浏览器优先按 type 决定键盘,inputmode 是辅助修正。比如 <input type="text" inputmode="numeric"> 可能仍弹出全键盘;而 <input type="number" inputmode="decimal"> 才更大概率生效。
-
type="number"+inputmode="decimal"是控制带小数点数字键盘的黄金组合 -
type="text"下设inputmode效果不稳定,尤其 iOS 几乎无效 - 某些安卓定制 ROM(如华为 EMUI)会忽略
inputmode,只认type和pattern - 若元素被 CSS 设置了
user-select: none或pointer-events: none,键盘也可能无法触发
和 pattern、input type 配合使用的实操建议
单靠 inputmode 不足以保证输入格式,必须结合其他属性协同控制体验和校验。
使用 Puppeteer + Chrome 将 HTML 渲染为中文 PDF,自动处理图表等待、Tab 展开、动画、测高、白边消除、防分页,适用于看板、报表、网页和交互图表转 PDF。
立即学习“前端免费学习笔记(深入)”;
- 手机号场景:用
<input type="tel" inputmode="tel">,比type="text" inputmode="tel"更可靠;pattern="[0-9]{11}"可辅助前端校验,但不强制键盘类型 - 金额输入:推荐
<input type="text" inputmode="decimal" pattern="^\d*\.?\d*$">,并用 JS 拦截非法字符(因为type="number"在 iOS 有光标跳动、千分位等兼容问题) - 邮箱地址:直接用
<input type="email" inputmode="email">,此时inputmode是冗余但无害,可保留作为明确提示
移动端真机测试时容易被忽略的细节
模拟器或桌面 Chrome 的“设备模式”无法准确反映 inputmode 行为——它根本不调用真实虚拟键盘。必须在真机上验证,且要分机型、分系统版本。
- iOS 16.4 之前,
inputmode基本被 Safari 忽略;16.4+ 仅对decimal、numeric、tel有响应,且依赖type配合 - Android 上,WebView(如微信内嵌页)可能比 Chrome 更滞后,部分厂商 WebView 甚至完全不识别
inputmode - 用户长按输入框后选择“粘贴”,有时会绕过
inputmode限制,所以服务端仍需做格式校验
别指望一个属性解决所有键盘问题,它只是提示,不是指令。真正可控的是 type + JS 拦截 + 后端兜底。


















