step属性仅对type="number"和type="range"生效,type="time"中单位为秒,小数step易受浮点精度影响,需换算单位或统一小数位数并同步校验value对齐。

step 属性只对 type="number" 和 type="range" 生效
给 type="text"、type="email" 或其他类型加 step,浏览器直接忽略,控制台也不会报错。必须显式写成 <input type="number" step="0.1"> 或 <input type="range" step="5"> 才起作用。常见错误是误以为只要输入的是数字,step 就自动生效——不是的,类型决定属性是否被解析。
step 值必须和 min、max、value 对齐
浏览器会静默修正不合规的初始值,导致拖不动、点不准、箭头跳变异常。比如 min="0"、step="0.25" 时,value="1.1" 是非法的(因为 1.1 % 0.25 !== 0),Chrome 可能自动改成 1.0 或 1.25,但 DOM 上看不出变化。
- 初始化时确保
value === min + n × step(n为整数),例如min="0.5"、step="0.25",就该用value="1.25",别用"1.2" - 动态改
step后,不能只写el.step = "0.25",必须同步重置value:el.value = Math.round(parseFloat(el.value) / 0.25) * 0.25 - 推荐用
el.setAttribute('step', '0.25'),比直接赋值更稳定;改完可调el.checkValidity()主动触发校验
step 在 type="time" 中单位是秒,不是分钟
想让时间选择器每 15 分钟一档,不能写 step="15"(那是 15 秒),得换算:15 × 60 = 900,所以是 <input type="time" step="900">。同理,每 5 分钟 → step="300",每小时 → step="3600"。注意 value 的秒数部分也得是 0(如 value="14:30"),否则某些浏览器可能舍入或显示异常。
小数 step 容易因浮点精度失效
step="0.1" 在二进制中无法精确表示,旧版 Chrome 曾把它四舍五入成 step="1",结果所有增减都按整数跳。这不是配置错误,而是 IEEE 754 的固有限制。
- 最可靠方案:换算单位。金额用“分”代替“元”,写
min="100"、step="1"、value="199" - 若必须用小数,统一小数位数:
min="0.00"、max="10.00"、step="0.01",避免混用整数与小数 - JS 校验时别用
(value - min) % step === 0,改用Math.abs(((value - min) / step) % 1)
真正难处理的不是怎么写,而是浏览器在你没注意的时候已经悄悄改了 value,还让你以为是用户操作问题。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











