常见问题区块点开后箭头从下往上转,内容正常展开,读屏只重复一遍按钮标题,没有说已展开还是已收起,用户不知道这一下到底生效没有。乍看像缓存或者权限的锅,追下去往往不是。
<button aria-expanded='false' aria-controls='faq1'>运费怎么算</button>
<div id='faq1' hidden>…</div>
<script>btn.setAttribute('aria-expanded', open)</script>
追下去是这么回事:按钮的展开状态只写在 class 和图标旋转上,没有同步到 aria-expanded,读屏拿不到状态变化。内容区也没有和按钮建立关联,读屏不知道这块面板归谁管。
「手风琴展开状态」相关的日志我一般连着看前后五分钟,单看一条报错经常判断不出是哪一步失败。一次只改一处,改完立刻验证,几个改动叠在一起,出问题就说不清是谁导致的。
先做最小复现,能稳定跑出来的问题,排查成本会低一个数量级。
具体做法是,给触发按钮补上 aria-expanded,初值写成 false,点一次就翻转一次;用 aria-controls 指向面板的 id,让读屏知道展开的是哪一块;面板收起时用 hidden 属性藏起来,别只靠高度为零。
验收就看一点,读屏聚焦按钮时先报已收起,按下回车后同一位置报已展开。
