type="time"的value必须是补零的24小时制字符串,如"09:30"或"14:25:30";min/max需与step格式严格对齐;step为整数秒并决定value结构;safari≤15.4静默降级为text。

value 必须是补零的 24 小时制字符串
浏览器只认 "09:30" 或 "14:25:30" 这种格式,任何偏差都会导致初始值不显示,且无报错提示:
-
"9:30"(缺前导零)→ 被忽略 -
"09:30 AM"(含 AM/PM)→ 被忽略 -
"09:30:00.123"(带毫秒)→ 被忽略 -
new Date().toLocaleTimeString()返回"2:30:00 PM"→ 不能直接用
正确做法是手动补零:${String(hours).padStart(2, '0')}:${String(minutes).padStart(2, '0')},或用 date.toTimeString().slice(0, 5)(注意时区)。
min/max 必须与 step 格式严格对齐
min 和 max 不是“提示”,而是硬性约束——但仅当格式完全匹配 step 时才生效:
-
step="60"(默认)→min必须是"09:00",写成"09:00:00"或"9:00"都无效 -
step="1"(支持秒)→max必须是"17:30:00","17:30"会被忽略 - 设了
min="08:00"但用户仍可键盘输入"07:59",前端需监听input事件校验
验证是否生效:打开开发者工具,检查元素上渲染出的 min 属性值是否和你写的字符串**完全一致**。
step 值必须是整数秒,且决定 value 的结构
step 不只是 UI 粒度控制,它强制约束你传给 value 的字符串格式:
-
step="60"→value必须是"HH:MM",如"14:25" -
step="30"→value必须带秒:"14:25:00"或"14:25:30" -
step="1"→value="14:25"会清空输入框,必须写"14:25:30" -
step="0.5"或step="1.5"→ 浏览器直接忽略该属性
别以为改 step 只是“让选择更细”——它会立刻让你的默认值失效,除非同步修正 value 字符串。
Safari ≤ 15.4 会静默降级为 text,检测比 polyfill 更关键
旧版 Safari(包括 iOS 15.4 及更早)不支持 type="time",但它不会报错,而是把输入框当 type="text" 渲染:
- 不唤起系统时间选择器
-
min/max/step全部失效 -
checkValidity()对非法格式也返回true - 用户可随意输入
"25:00"或"abc",无任何拦截
检测方式必须用 JS:const el = document.createElement('input'); el.type = 'time'; if (el.type !== 'time') { /* fallback */ }。别依赖 typeof HTMLInputElement.prototype.showPicker,它在新旧 Safari 中都不可靠。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











