inputmode 是键盘提示而非开关,需与 type 等配合使用;decimal 支持小数点,numeric 仅数字;iOS Safari 16.4+ 和 Android Chrome 基本支持,但 search/url 无效,国产输入法多忽略。

inputmode 不是开关,是提示;写了不等于键盘一定变,但不写基本没机会变。
inputmode="decimal" 和 inputmode="numeric" 到底弹什么键盘
两者都试图唤起数字键盘,但关键区别在小数点:inputmode="decimal" 会带 .(部分系统还带 ,),inputmode="numeric" 只有 0–9,没有小数点、负号或逗号。
实测中,iOS Safari 16.4+ 对 decimal 支持较稳,Android Chrome 多数也识别;但 numeric 在旧版 iOS 上容易 fallback 成全键盘,尤其当 type 没配对时。
- 金额、评分、身高体重 → 必须用
decimal - 验证码、手机号、商品数量(整数)→ 用
numeric - 别指望
numeric能拦住用户粘贴字母——它只管键盘布局,不管输入内容
为什么加了 inputmode 却没反应
最常见原因不是写错了,而是被其他属性压制或环境不支持:
立即学习“前端免费学习笔记(深入)”;
-
type="number"会直接覆盖inputmode,尤其在 iOS 上,inputmode="decimal"完全失效 - 某些安卓定制输入法(如华为 EMUI 旧版、vivo 小窗键盘)压根不读
inputmode,只认type -
inputmode="search"或inputmode="url"在 iOS Safari 中完全无效——官方根本不支持这两个值 - 没写
type属性(比如裸<input>)时,inputmode才更可能被浏览器采纳
怎么和 type、pattern、autocorrect 配合才不翻车
单独写 inputmode 是低效的,必须组合使用:
- 金额输入:用
<input type="text" inputmode="decimal" pattern="[0-9]*\.?[0-9]*">,再加 JS 格式化,避开type="number"的滚动条和科学计数法问题 - 手机号:优先
type="tel" inputmode="tel",双保险;inputmode="tel"是目前跨端兼容性最好的数字键盘触发方式 - 邮箱:用
type="email" inputmode="email",虽然inputmode效果有限,但不冲突,且部分安卓输入法响应更好 - 必须关掉干扰项:
autocapitalize="none" autocorrect="off" spellcheck="false",否则 iOS 输入法可能自动补全或大写首字母
真机测试比文档更重要
文档写的“支持”,不等于你用户的手机能弹出对应键盘。截至 2026 年 5 月:
- iOS Safari 16.4+ 支持
decimal、numeric、tel、email,但search和url仍被忽略 - Android Chrome 基本全覆盖,但微信 X5 内核、QQ 浏览器等仍大概率忽略
inputmode - 国产输入法(搜狗、百度)多数只看
type,inputmode形同虚设
真正容易被忽略的是:键盘右下角按钮文案(如「搜索」「前往」)不能靠 inputmode 控制,得用 enterkeyhint,而且它在低端安卓 WebView 中经常显示成「完成」甚至「换行」。



















