step 属性在 type="date" 上完全无效,所有主流浏览器均忽略其值;真正稳定支持 step 的只有 number、range 和较新版本的 time 类型。

step 属性在 type="date" 上基本无效,别指望它能控制“按周选”或“隔天跳”。浏览器解析该属性但不执行逻辑,所有主流实现(Chrome、Firefox、Safari)都忽略 step 值。
为什么 step="7" 在 date 输入框里没反应
这不是 bug,是规范允许的“不实现”。HTML 标准虽列出 type="date" 支持 step,但实际渲染时:
- 日期选择器 UI 仍按天粒度展示,无法跳转到“下下周日”
- stepUp()/stepDown() 方法调用后无变化,或直接报错
- 表单提交校验不检查 stepMismatch,validity.stepMismatch 恒为 false
- DevTools 中能看到 step="7" 属性存在,但行为完全不受影响
type="date" 的 step 应该设成多少
设什么都一样——建议干脆不写。原因包括:
- 所有已知浏览器(含 iOS Safari 16+、Android Chrome 120+)均未实现该功能
- 即使写 step="1" 或 step="any",也不会改变任何行为
- 若你真需要“每周一”或“每月1号”这类约束,必须用 JS 控制:input 事件中截取值、校验是否为周一、不符合则重置或提示
- 后端永远要二次校验,前端靠 step 做日期粒度控制等于没控
哪些 type 真正支持 step 且行为稳定
目前只有三类可信赖:
- type="number":步进、校验、箭头、粘贴拦截(部分)都生效,但需注意浮点精度(如 step="0.1")
- type="range":滑块停靠点严格对齐 min + n × step,拖动后自动修正,不参与表单验证
- type="time":仅限较新 Safari(≥15.5)、Chrome/Firefox;step="60"(默认)对应分钟级,step="1" 必须配带秒的 value="14:25:30"
真正麻烦的是你以为它在 date 上起作用,结果上线后用户照常选任意日期,而你连个校验钩子都抓不到——step 在 date 类型上不是“弱支持”,是“形同虚设”。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











