日历弹出来以后输入框是只读的,用户想直接敲 2026-03-08 敲不进去,只能一个月一个月往回翻,选去年的日期要点十几下。第一次遇到会往复杂处想,其实漏掉的多是个小前提。

<input type='text' id='d' placeholder='YYYY-MM-DD'>
<button aria-label='打开日历'>日历</button>
<span class='hint'>例:2026-03-08</span>

为了绕开格式校验把输入框设成 readonly,取值全交给日历组件,手输这条路被彻底关掉,反而挡住了手输更快的那批人,也挡住了批量粘贴。这一点先确认清楚,后面就不用反复试。

「日期控件键盘输入」这类改动最怕改一半,回滚脚本先准备好,再动生产。把复现步骤压到三条以内,交给同事也能跑出来,才算真的定位清楚。

改动写完就同步给同事,下一个人踩同一个坑,成本还是你的。

具体做法是,输入框保留可编辑,并在占位符里给出允许的格式;输入完先做一次格式校验,不合法再退回日历去挑;日历弹出按钮单独给一个 aria-label,Tab 过去也能用键盘打开。

改完照着核一遍,不用鼠标直接手输日期能提交,格式错时提示写清正确写法。

作者 9823189