日历弹出来以后输入框是只读的,用户想直接敲 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 过去也能用键盘打开。
改完照着核一遍,不用鼠标直接手输日期能提交,格式错时提示写清正确写法。
