必须用 value 属性设默认值,格式严格为“hh:mm”(24小时制、两位小时+冒号+两位分钟),非法格式如缺零、含秒或12小时制将被忽略;常见失效原因为js覆盖、form.reset()回滚或框架同步问题。

HTML <input type="time"> 默认值怎么设才生效
必须用 value 属性,且格式严格为 "HH:MM"(24 小时制,两位数小时 + 冒号 + 两位数分钟),不能带秒、时区或空格。浏览器会忽略非法格式,表现为清空或回退到初始状态。
-
value="09:30"✅ 有效 -
value="9:30"❌ 小时没补零,多数浏览器不认 -
value="09:30:00"❌ 含秒,type="time"不支持 -
value="09:30 AM"❌ 12 小时制 + 文字,完全无效
为什么设置了 value 却没显示默认时间
常见原因不是代码写错,而是 JavaScript 动态操作覆盖了初始值,或者表单重置逻辑干扰。尤其注意:
- 页面加载后立即执行的
document.getElementById(...).value = ""会清掉默认值 - 使用
form.reset()会把value回滚到 HTML 中写的原始值 —— 如果原始value是空字符串,就显示为空 - 某些框架(如 Vue/React)在初始化时未将
value同步到响应式数据,导致 DOM 值存在但视图不更新
step 属性会影响默认时间的可选范围吗
不影响默认值本身,但会影响用户能否通过上下箭头或点击选择该时间。例如:<input type="time" value="09:30" step="300">(5 分钟步长),此时 09:30 仍是合法默认值;但如果设 step="600"(10 分钟),09:30 仍能显示,只是用户无法用控件微调到它(只能选 09:20 或 09:40)。
更关键的是:如果默认值本身不满足 step 约束(比如 value="09:07" step="300"),Chrome 会静默忽略该 value,输入框显示为空 —— 这是容易被忽略的兼容性陷阱。
服务端渲染或动态生成时如何安全设置默认时间
别拼接字符串,用 toISOString() 截取再格式化更可靠。例如在 JS 中生成当前时间的默认值:
const now = new Date();
const timeStr = now.toTimeString().slice(0, 5); // "09:30"
// 然后注入到 input 的 value 属性中
document.querySelector('input[type="time"]').value = timeStr;
但注意:服务端直出 HTML 时,应直接写死 value,避免依赖客户端 JS;若需动态,默认逻辑必须在 DOM ready 后立即执行,且确保不被后续脚本覆盖。
最易被忽略的一点:移动端 Safari 对 value 的解析比桌面 Chrome 更严格,少一个零都可能失效。测试时务必真机验证。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











