如何让JAWS读取fieldset元素的aria-describedby属性?
JAWS下fieldset的aria-describedby不生效?这些坑你可能踩了
嘿,作为同样折腾过JAWS无障碍适配的开发者,我太懂这种明明按文档规范来却没效果的挫败感了!咱们一步步拆解问题:
触发时机搞反了:你是不是以为聚焦fieldset本身时会读描述?其实fieldset默认是不可聚焦的容器元素,JAWS只会在焦点进入fieldset内的第一个表单控件时,才会读取fieldset的关联描述。比如当光标移到fieldset里的输入框、单选按钮时,才会触发描述的朗读,而不是点击fieldset空白处哦。
描述元素被JAWS忽略了:如果你的描述元素用了
display: none或者visibility: hidden,哪怕ID完全正确,JAWS也会跳过它。如果需要视觉隐藏描述但让屏幕阅读器读取,一定要用仅屏幕阅读器可见的样式(比如.sr-only),而不是直接隐藏元素。JAWS版本拖后腿:旧版本的JAWS(比如18及更早)对fieldset的
aria-describedby支持确实存在兼容性bug。如果条件允许,升级到JAWS 2020+的版本再测试,兼容性会好很多。给你一个验证用的正确示例:
<fieldset aria-describedby="shipping-note"> <legend>配送地址</legend> <p id="shipping-note">偏远地区可能需要额外3个工作日送达</p> <label for="addr">详细地址:</label> <input type="text" id="addr"> </fieldset>
当焦点移到addr输入框时,JAWS应该会读出类似“配送地址 字段集,偏远地区可能需要额外3个工作日送达 详细地址 编辑”的内容。
- 终极替代方案:如果以上方法都不生效,把描述内容嵌入
legend里用视觉隐藏的span包裹,这是JAWS一定会识别的稳妥方式:
<fieldset> <legend>配送地址 <span class="sr-only">偏远地区可能需要额外3个工作日送达</span></legend> <label for="addr">详细地址:</label> <input type="text" id="addr"> </fieldset>
对应的.sr-only标准样式:
.sr-only { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border: 0; }
内容的提问来源于stack exchange,提问作者Bryce Johnson
相关产品推荐
相关产品推荐

