必须支持键盘上下选择与确认
别名: 补全键盘操作 · aria combobox · 只能鼠标点候选
概念解释
候选列表打开后,手不该被迫离开键盘去点某一行。组合框键盘选择(combobox keyboard selection)要求方向键在列表里移动高亮、回车(或 Tab,按约定)把高亮项写入槽。只有鼠标能点候选,键盘用户就只能把列表当摆设,或用槽里的不完整前缀硬提交。它管的是不碰指针能否完成一次选择,不是列表会不会盖住槽,也不是异步刷新会不会换行。
机制
补全发生在打字途中,手已经在键上。强迫去抓指针,是一次模式切换:找鼠标、瞄准、再回到键。方向键把列表变成槽的延伸,高亮行是当前将要接受的对象。回车接受该项;Esc 关掉列表并留下已打的前缀;Tab 是「接受并走到下一字段」还是「只离开槽」,必须全产品一致。读屏器依赖 combobox / listbox 角色和 aria-activedescendant(或等价)才能跟上高亮,没有键盘模型就没有可访问模型。缺键盘时,人们会提交未完成的前缀,后端收到的是半截地名或半截邮箱。
怎么研究
禁止使用指针,只靠键盘完成「从候选里挑指定项」。记录能否打开列表、高亮是否可见、回车是否写入正确项、Esc 是否可退。自变量:焦点在槽还是在列表 DOM、IME 组字时方向键归谁。因变量:完成率、误把回车当提交搜索。对照常见的组合框键盘模式做走查,但要测的是人能不能选中,不是属性标得全不全。中文组字期间上下键常用于选词,与列表导航冲突,必须单列条件。
边界
触屏主路径没有方向键,键盘支持仍要给外接键盘和读屏器留着,不能因为「我们是 App」删掉。部分搜索框回车表示「用原文搜」,与「接受高亮」冲突时,用方向键进入列表后再回车才接受,未进入则提交原文——分叉要稳定。只读展示的建议芯片不是组合框,不该套方向键。自定义画布列表若没有把高亮暴露给辅助技术,键盘看着能走,读屏器仍然是盲的。
怎么落地
- 实现上/下移动高亮、回车写入高亮项、Esc 关闭列表;高亮必须看得见。
- 把控件做成真正的组合框角色,让读屏器跟随当前项。
- 规定 Tab 与回车在「接受候选」和「提交原文」上的分工,并在 IME 组字时把方向键先交给输入法。
- 验证:拔掉鼠标,打前缀,用键选第三项并确认。槽里应是该项全文。Esc 后应回到前缀。组字中文时上下键不应误选候选城市。