为何input type=time在部分浏览器出现stepMismatch无效错误
问题原因
input[type=time]的step属性默认值为60(单位为秒),也就是默认仅支持整分钟精度的时间值。你传入的00:00:00.750包含秒和毫秒,不属于整分钟的合法取值范围,因此触发stepMismatch校验失败。- 不同浏览器对默认步长的校验实现有差异:Chrome对初始传入的高精度值会做兼容处理,而Safari 15、Firefox 93+的校验逻辑更严格,只要实际值精度超出默认步长允许的范围,就会直接判定为无效。
step属性的作用逻辑 对于type=time的输入框,step属性定义了合法时间值的最小间隔,单位为秒,规则如下:
- 所有合法值必须是
00:00:00加上step整数倍的时间点 - 默认值为60,仅允许整分钟取值(如
09:15、18:30等) - 若设置为
1,则允许到秒级的取值(如09:15:30) - 若设置为
0.001,则允许到毫秒级的取值(如09:15:30.123)
消除无效状态的方案
根据你的业务需要的时间精度,显式声明对应的step值即可。
如果你的场景需要支持毫秒级精度,修改代码如下:
<input type="time" value="00:00:00.750" step="0.001" onchange="console.log(this.validity)" />
如果只需要秒级精度,设置step="1"即可;如果仅需要整分钟,把value调整为整分钟格式(如00:00)即可,不需要额外修改step。
内容的提问来源于stack exchange,提问作者connexo
相关产品推荐
相关产品推荐

