【发布时间】:2023-04-03 09:31:02
【问题描述】:
我继承了一个 vuejs 项目。使用屏幕阅读器作为辅助设备的人抱怨他们的屏幕阅读器无法阅读由vue-search-select 制作的下拉菜单中的选项。以下是重现问题的方法:
- 安装 NVDA 等屏幕阅读器。
- 打开 NVDA 屏幕阅读器。
- 转到https://vue-search-select.netlify.app/#/model
- Tab 到搜索文本字段。
- 确认结果下拉菜单出现。
- 按向下箭头键可专注于任何搜索结果项。
- 确认 NVDA 说出“空白”一词,而不是实际读出所选项目的内容。
这是一个 10 秒的剪辑,演示了第 3 步(共 7 步)。
https://www.youtube.com/watch?v=Nxx1k1oKETI
如何修改vue-search-select,以便在第 7 步中,屏幕阅读器将读出所选项目的内容,而不是读出单词“Blank”?
现在,作为一个临时解决方案,我正在尝试编写一个setTimeout 函数,该函数将自动添加适当的元数据以强制屏幕阅读器读出内容。但我不确定这种方法会有多成功。我更喜欢vue-search-select 的惯用方法。
我尝试像这样添加 customAttr:
<model-select :custom-attr="ariaAttrs" />
function ariaAttrs() {
return function() { return '" aria-label="hello" tabindex="0'; }
}
虽然属性确实出现在我的开发者控制台的检查器中,但我的屏幕阅读器仍然没有读出选项。
【问题讨论】:
-
Vue 期望将属性放在模板中的元素上
-
@DerekPollard -
<model-select :custom-attr="ariaAttrs" />function ariaAttrs() {return function() { return '" aria-label="hello" tabindex="0'; }}是否满足您对“模板中元素的属性”的定义?如果不是,你能澄清一下吗?谢谢! -
从我在代码中可以看出,当您按下向上和向下箭头键时,浏览器实际上并不是
.focus()。相反,vue-search-select只是从相应的<div class="">项中添加或删除 css 类selected。因为div.selected实际上不在.focus()中,所以屏幕阅读器自然会说出“空白”这个词来表示您实际上没有关注任何内容。
标签: vue.js vue-select