为什么这个 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
如何为这种输入类型工作,以及如何摆脱无效状态?
根据 MDN,input[type=time]
的默认 step
属性等于 60
,以秒为单位。
这意味着在没有显式 step
属性的情况下,时间只能以一分钟的倍数更改。
step
与 min
属性一起工作,否则与 value
属性一起工作,因此设置初始 value="00:00:00.750"
意味着只有过去 750 毫秒的值给定的一分钟被认为是有效的,并且根据浏览器及其显示输入的方式,用户甚至可能无法做到这一点。
设置 step="1"
可以让您根据需要设置时间的秒部分,step="0.001"
也可以让您设置毫秒。 step="any"
也是一个选项,但目前还没有明确定义。我个人认为这意味着它基本上完全禁用分辨率检查,但浏览器可能不同意。
我有一个非常简单的 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
如何为这种输入类型工作,以及如何摆脱无效状态?
根据 MDN,input[type=time]
的默认 step
属性等于 60
,以秒为单位。
这意味着在没有显式 step
属性的情况下,时间只能以一分钟的倍数更改。
step
与 min
属性一起工作,否则与 value
属性一起工作,因此设置初始 value="00:00:00.750"
意味着只有过去 750 毫秒的值给定的一分钟被认为是有效的,并且根据浏览器及其显示输入的方式,用户甚至可能无法做到这一点。
设置 step="1"
可以让您根据需要设置时间的秒部分,step="0.001"
也可以让您设置毫秒。 step="any"
也是一个选项,但目前还没有明确定义。我个人认为这意味着它基本上完全禁用分辨率检查,但浏览器可能不同意。