为什么这个 input type=time 在某些带有 "stepMismatch": true 的浏览器中无效?

Why is this input type=time invalid in some browsers with a "stepMismatch": true?

我有一个非常简单的 input type=time,根据 MDN 具有有效时间值:

:invalid { border-color: red; }
<input type="time" value="00:00:00.750" onchange="console.log(this.validity)" />

如果我只是 运行 片段 (Safari) 并编辑值 (Firefox 93),无论我将其编辑成什么,输入都被视为 无效 之后,"stepMismatch": true 有效性失败原因(Safari 15、Firefox 93 和 94、MacOS 12)。

这是怎么回事? step 如何为这种输入类型工作,以及如何摆脱无效状态?

根据 MDNinput[type=time] 的默认 step 属性等于 60,以秒为单位。

这意味着在没有显式 step 属性的情况下,时间只能以一分钟的倍数更改。

stepmin 属性一起工作,否则与 value 属性一起工作,因此设置初始 value="00:00:00.750" 意味着只有过去 750 毫秒的值给定的一分钟被认为是有效的,并且根据浏览器及其显示输入的方式,用户甚至可能无法做到这一点。

设置 step="1" 可以让您根据需要设置时间的秒部分,step="0.001" 也可以让您设置毫秒。 step="any" 也是一个选项,但目前还没有明确定义。我个人认为这意味着它基本上完全禁用分辨率检查,但浏览器可能不同意。