最可靠方案是type="tel"配合前端过滤,因iOS仅认type="tel"或"type=number",Android虽支持inputmode但常降级,微信X5内核只响应type="tel"。

inputmode="numeric" 为什么手机上还是弹出全键盘?
因为 inputmode="numeric" 本身不保证纯数字键盘,它只是给浏览器的“提示”,实际触发哪种键盘,取决于 type 属性和平台行为。iOS Safari 对 inputmode 支持弱,Android Chrome 虽支持但会 fallback 到 type 的语义。单纯写 inputmode="numeric" 而不配对 type,大概率无效。
必须搭配 type="text" 或 type="tel" 才能稳定唤起数字盘?
不是“必须”,而是有明确优先级:浏览器优先看 type,再参考 inputmode。实测下来最可靠组合是:
-
type="tel"→ iOS 和 Android 都默认弹出数字键盘(带 * # 键),适合金额、编号等允许非纯数字的场景 -
type="number"→ 触发数字键盘,但会带来副作用:iOS 自动加 spinner、长按触发放大、部分安卓机型提交时校验小数点/负号失败 -
type="text" inputmode="numeric"→ Android Chrome 有效;iOS Safari 大概率忽略inputmode,仍弹英文键盘
想强制纯数字(无符号、无小数点)怎么写?
光靠 HTML 属性做不到“强制”,得配合限制逻辑。关键点:
将调研报告、方案对比、数据分析、需求梳理、会议纪要、设计说明、代码评审、学习笔记等任务产物输出为可在浏览器直接打开的单文件 HTML,替代 Markdown 作为最终交付物。Markdown 在信息密度、视觉清晰度和可分享性上已跟不上 AI 产物的丰富度,HTML 能同时承载排版、表格、SVG 等。
- 用
type="tel"+inputmode="numeric"作为基础,兼容性最好 - 加
pattern="[0-9]*"和inputmode="decimal"(注意:不是numeric)反而可能触发带小数点的键盘,要避开 - 用 JS 拦截非法输入:
oninput中用正则/\D/g清除非数字字符,但别用onkeypress—— iOS 不触发 - 避免
min/max或step,它们会让type="number"在某些安卓 WebView 中行为异常
Android 和 iOS 的键盘行为差异到底在哪?
根本区别不在 HTML 层,而在系统级输入法映射逻辑:
立即学习“前端免费学习笔记(深入)”;
- iOS:只认
type="tel"、type="number"和少数inputmode值(如decimal),且inputmode="numeric"几乎被无视 - Android:Chrome 100+ 支持
inputmode较好,但 WebView(尤其旧版)可能降级为type决定 - 微信内置浏览器(X5):只响应
type="tel",其他全忽略 —— 这是最常翻车的场景
所以真正能跨端稳定的方案,只有 type="tel" 加前端过滤,别指望单靠 inputmode 解决问题。


















