step属性仅对type="number"、"range"、"time"、"date"、"datetime-local"、"month"、"week"生效;type="text"或"type=email"等无效;type="date"多数浏览器忽略step;type="time"和"type=datetime-local"的step单位为秒且须为整数。

直接写 step 属性没用,必须同时满足类型、取值规则和协同属性三个条件,否则浏览器完全忽略。
哪些 type 才认 step
step 只对 type="number"、type="range"、type="time"、type="date"、type="datetime-local"、type="month"、type="week" 生效。其他如 type="text" 或 type="email" 上加 step="0.01",DevTools 里能看到属性,但 spinner 不出现、校验不触发、stepUp() 报错或静默失败。
-
type="date"的step大部分浏览器直接忽略(设step="7"也还是按天选) -
type="time"的step单位是秒,不是分钟——step="900"才是 15 分钟,step="15"是 15 秒 -
type="datetime-local"的step必须是整数,step="30.5"会被截断为30
step 值怎么写才不踩精度坑
写 step="0.1" 看似合理,但二进制浮点无法精确表示 0.1,旧版 Chrome 曾把它当 step="1" 处理;Safari 对小于 0.01 的步长支持不稳定。更可靠的做法是换单位。
- 金额输入别用
step="0.01",改用min="0"、max="10000"、step="1",后端/显示层再除以 100 - 需要两位小数时,统一补零:
min="0.00"、max="10.00"、step="0.01",避免min="0"和step="0.01"混用 - 不要写
step="1/20"或科学记数法,浏览器不识别;step="any"是合法字符串,但它的作用是禁用步长对齐,不是“放开一切”
step 必须和 min/max 配合才能生效
step 的合法值序列是 min + n × step(n 为整数),起点永远是 min,不是 0。如果 min 和 step 不对齐,浏览器行为会分裂:Chrome 可能允许输入 min 值但箭头跳到下一个合法点,Firefox 可能直接拒绝初始值。
-
min="1"、step="0.3"时,合法值是 1.0、1.3、1.6…,但value="1.0"可能被某些浏览器静默修正为 1.2 -
min="1"、max="10"、step="2",最大可选值是 9,不是 10(因为 1 + n×2 = 10 无整数解) - 动态改
step后,别直接el.step = "0.5",用el.setAttribute("step", "0.5")更稳,之后立即调el.checkValidity()
最常被忽略的其实是 value 初始值是否落在 min + n × step 序列上——浏览器不会报错,但 spinner 可能失灵、自动跳变或提交失败,调试时建议打印真实刻度点验证。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











