我要你帮助我,我完全陷入了这个问题。
我想让我的代码可以通过键盘导航,并可以应用于屏幕阅读器设备。但是我有几个问题。
这是我在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>
当我在仅使用键盘(带有选项卡)的Windows中导航至
btn1
并按Enter(或空格)时,按钮被更改,但是它失去了焦点。如您所见,我尝试将其集中在JS上,但没有结果。我也尝试使用tabindex
标记,但也没有帮助。我希望它在按下时能够集中显示,因此它将更易于浏览并且可供屏幕阅读器访问。请帮忙!
编辑
使用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();
}
我为自己感到骄傲:)
最佳答案
我没有屏幕阅读器,因此进行测试很棘手,但是与更改按钮而不是专注于按钮本身相比,更改按钮可能会更好。
<div id="div1">
<button type="button" id="btn1">Change Text</button>
</div>
然后你的JS:
document.addEventListener('DOMContentLoaded', function () {
function changeText(btn) {
btn.textContent = btn.textContent === 'Change Text'
? 'Change Text2'
: 'Change Text';
btn.setAttribute('aria-hidden', true);
btn.focus();
}
document.getElementById('btn1').addEventListener('click', function (e) {
changeText(e.target);
}, false);
}, false);
关于javascript - JavaScript生成的代码和屏幕阅读器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34808205/