time输入框的min/max必须严格为HH:MM格式(如"09:00"),Safari虽不渲染原生选择器但参与校验;step影响精度,动态设置需用setAttribute或dispatchEvent触发重绘,且value超限需手动清空。

time 输入框的 min/max 必须是 HH:MM 格式
浏览器只认严格格式的字符串,min="09:00" 可以生效,min="9:00"、min="09:0"、min="09:00:00" 全部无效。Safari 虽然不渲染原生选择器,但 min/max 仍会参与表单校验(前提是格式合法)。验证是否写对,最直接的方法是打开开发者工具,检查元素上渲染出的 min 属性值——它必须和你写的字符串**逐字符一致**。
step 属性决定 min/max 的精度匹配
如果写了 step="1"(支持秒),那么 min 和 max 就必须带秒,比如 min="09:00:00";否则整个属性被忽略。反之,没设 step(默认分钟级),max="17:30:00" 会被浏览器静默丢弃,必须写成 max="17:30"。常见翻车:后端返回时间字段如 "14:5" 或 "2:30 PM",前端不格式化就直接赋给 min/max,结果限制完全不生效。
动态设置 min/max 要用 setAttribute 或触发重绘
直接写 input.min = "08:00" 在部分 Safari(尤其 iOS ≤ 15.5)和旧版 Chrome 中,UI 日历不会更新,用户仍能点选超限时间。可靠做法只有两种:
• 用 input.setAttribute('min', '08:00'),强制 DOM 属性变更并重绘控件
• 或写 input.min = '08:00' 后立刻触发事件:input.dispatchEvent(new Event('input', { bubbles: true }))
另外,如果当前 input.value 已超出新设的 max,浏览器不会自动清空,需手动判断:if (input.value && input.value > input.max) input.value = ''
Safari 不支持原生 time,降级方案不能只靠 CSS
桌面和 iOS Safari 都把 <input type="time"> 当作普通文本框,既无滚动选择器,也无键盘输入校验。别指望 :invalid 伪类或 Modernizr.inputtypes.time 做兼容判断——这些在新版浏览器里已不可靠。务实做法是先渲染原生控件,再用 JS 检测:const el = document.createElement('input'); el.type = 'time'; if (el.type !== 'time') { /* 加载 select 或轻量 JS 时间选择器 */ }。重点在于:value、min、max 的格式合法性,是跨平台可用的底线,不是可选项。
立即学习“前端免费学习笔记(深入)”;



















