【发布时间】:2016-04-20 21:04:13
【问题描述】:
我请你帮帮我,我完全被这个问题困住了。
我想让我的代码可以通过键盘导航并适用于屏幕阅读器设备。但我有几个问题。
这是我在 JS 中的代码:
function changeText()
{
document.getElementById('div1').innerHTML = '<input id="btn2" type="button" onclick="changeText2()" value="Change Text2" />';
document.getElementById('btn1').setAttribute("aria-hidden",true);
document.getElementById('div1').focus();
}
function changeText2()
{
document.getElementById('div1').innerHTML = '<input id="btn3" type="button" onclick="changeText()" value="Change Text" />';
document.getElementById('btn1').setAttribute("aria-hidden",true);
}
和 HTML:
<div id="div1">
<input id="btn1" type='button' onclick='changeText()' value='Change Text'/>
</div>
当我在仅使用键盘(带有选项卡)的窗口中导航到 btn1 然后按回车键(或空格)时,按钮已更改,但它失去了焦点。如您所见,我尝试将其集中在 JS 上,但没有结果。我也尝试使用tabindex 标签,但也没有帮助。我希望它在按下时能够聚焦,这样屏幕阅读器更容易导航和访问。
请帮忙!
编辑
Focus 已使用 James Long 解决方案在按钮上进行了测试,并且可以正常工作!
但是,btn.setAttribute('aria-hidden', true); 应该被删除。
最终编辑
我刚刚知道了,哈哈!为了让我的示例正常工作,我应该关注btn2 而不是btn1。这太愚蠢了!所以,它是这样的:
function changeText()
{
document.getElementById('div1').innerHTML = '<input id="btn2" type="button" onclick="changeText2()" value="Change Text2" />';
document.getElementById('btn2').focus();
}
function changeText2()
{
document.getElementById('div1').innerHTML = '<input id="btn1" type="button" onclick="changeText()" value="Change Text" />';
document.getElementById('btn1').focus();
}
我为自己感到骄傲:)
【问题讨论】:
-
如果您希望屏幕阅读器可以访问该按钮,我看不出将
aria-hidden属性设置为 true 的意义。 -
对亚当来说,我是为
btn1做的,同时显示btn2。因为我真的不知道屏幕阅读器是否会读取由 JS 生成的默认(硬编码)btn1和btn2(或btn3)。但是在 James Long 的回答中有 'aria-hidden',我认为这并不重要,因为即使我能理解它也应该被删除(而且我是新的 :))对于 Alteyss,你怎么能编辑我的题?如果焦点对您不起作用,请考虑在下面编辑您的答案,因为 James Long 的答案有焦点。
标签: javascript accessibility wai-aria screen-readers wcag2.0