能否在aria-label的内容更改后,让屏幕阅读器重新读取选择元素?
我写了一个简单的片段,虽然没有遵循大多数aria约定,但可以展示我的意思。
如果您打开屏幕阅读器并点击div,它将会朗读标签“未选中”;如果您按下空格键,标签将会更新,但屏幕阅读器仍将保持静音。不过,如果您再次点击,则它将朗读新标签。
这是让屏幕阅读器读取更新的正确方法吗?还是有其他我不知道的方法?
谢谢你的帮助。
我写了一个简单的片段,虽然没有遵循大多数aria约定,但可以展示我的意思。
如果您打开屏幕阅读器并点击div,它将会朗读标签“未选中”;如果您按下空格键,标签将会更新,但屏幕阅读器仍将保持静音。不过,如果您再次点击,则它将朗读新标签。
这是让屏幕阅读器读取更新的正确方法吗?还是有其他我不知道的方法?
let toggleSwitch = document.querySelector('.toggle-switch');
toggleSwitch.addEventListener("keyup", function(e) {
let code = (e.keyCode ? e.keyCode : e.which);
if (code == 32) {
let nextState = toggleSwitch.getAttribute('aria-label') == 'unchecked' ? 'checked' : 'unchecked';
toggleSwitch.setAttribute('aria-label', nextState);
}
})
.toggle-switch {
width: 50px;
height: 50px;
}
.toggle-switch[aria-label="unchecked"] {
background: red;
}
.toggle-switch[aria-label="checked"] {
background: green;
}
Press space to change state
<div class="toggle-switch" tabindex="0" aria-label="unchecked"></div>
aria-label
的更改,但重新聚焦按钮将会朗读出正确的值 - 所以根据你上面所述,一切都按照规范编码,我们只是需要那个参考。或者找到一个非常简单的方法(不引入单独的活动区域,这在这里感觉有点繁琐和过度),让屏幕阅读器始终捕捉到当前的aria-label
内容。 - Philzenaria-label
来指示一个状态(他们使用"checked"/"unchecked"),所以aria-label
的变化必须要宣布。通常情况下,aria-label
不会改变,但如果它改变了,可能不需要宣布,如果它没有被用来指示一个状态。但正如之前提到的,它似乎被用作一个状态,所以必须要宣布。 - slugolicious