可访问性-失去焦点,我应该强迫焦点下一个焦点
Accessibility - lost focus, should I force focus next focusable?
我正在创建一个大表单,并将在各节之间提供按钮导航,以方便访问。
这意味着你可以通过按钮导航展开/折叠下一节或上一节。
然而,当你切换section时,当前section被display
CSS属性隐藏(下一个显示),所以刚刚使用的按钮不再集中,因为它不可见。
看一下这个JSFiddle或下面的代码来理解问题。
HTML:<a href="#">An anchor</a>
<article>
<header>First box</header>
<main>
This is first box.
<label><input type="radio" class="focusable" />This is input</label>
<button class="next focusable">Next box</button>
</main>
</article>
<article class="box-hidden">
<header>Second box</header>
<main>
This is second box.
<button class="focusable">Extra button</button>
<label><input type="radio" class="focusable" />This is input</label>
<button class="prev focusable">Previous box</button>
<button class="next focusable">Next box</button>
</main>
</article>
<article class="box-hidden">
<header>Third box</header>
<main>
This is third box.
<label><input type="radio" class="focusable" />This is input</label>
<button class="prev focusable">Previous box</button>
</main>
</article>
<a href="#">An anchor</a>
CSS: .box-hidden main {
display: none;
}
/* Only cosmetic below */
article { background: #ddd; margin: 10px 0; }
header { background: #ccc; }
button:focus { outline: 2px solid blue; }
JQuery: $( 'body' ).on('click', '.next', function( event ) {
event.preventDefault();
var next = $( this ).closest( 'article' ).next( 'article' );
$( 'article' ).addClass( 'box-hidden' );
$( next ).removeClass( 'box-hidden' );
});
$( 'body' ).on('click', '.prev', function( event ) {
event.preventDefault();
var prev = $( this ).closest( 'article' ).prev( 'article' );
$( 'article' ).addClass( 'box-hidden' );
$( prev ).removeClass( 'box-hidden' );
});
当您使用下一个或上一个按钮时,焦点会丢失,您必须从页面开始重新开始。这是不可能的。
我的解决方案是找到最近的可对焦(这很糟糕,因为我使用类due第一个可对焦可以输入另一个按钮)在打开部分并对焦它:
JSFiddle或添加到JQuery:
$( next ).find( '.focusable' )[0].focus();
在两个函数结束时,类似地将第二个函数中的$( next )
替换为$( prev )
。
所以它看起来像:
//[...]
$( next ).removeClass( 'box-hidden' );
$( next ).find( '.focusable' )[0].focus();
});
但是我不确定它是正确的方式,它不是通过可聚焦的元素混淆用户导航吗?
也许我应该用另一种方法?
注意:按钮是JS附加的,所以非JS用户不要使用它们。
提前感谢您的建议!
我相信你发现了一个可用性问题,而不是可访问性问题。我将用展开/折叠按钮替换这些部分的"下一步"answers"上一步"按钮。这将立即解决你的可访问性问题(因为这些按钮总是可见的),它将是一个用户熟悉的UI模型,并解决(我认为是)一个非标准的和令人困惑的交互模型。
这是为这个实现更新的JSfiddle(你可能可以找到比我使用的更好的图标)http://jsfiddle.net/zwLLrg9d/7/
我也改变了这一点,以便有正确的使用分段内容。绝对不建议使用多个<header>
元素实例。
相关文章:
- 我应该如何从xml文件构建一个javascript页面
- 我应该使用Ng提交还是点击表格
- 在Redux中,我应该在哪里编写复杂的异步流
- 我应该如何检查主干.主干.模型更改时查看
- 我应该先学习Angularjs还是Laravel
- 是否有任何可能的原因使我应该指定类型=“”;按钮“;用于我的按钮元素
- 在ES6 Promise中,我应该在解决/拒绝之前使用return吗
- 我应该将MVC视图特定的javascript文件放在哪个文件夹中
- 我应该始终删除EventListener吗
- 我应该如何衡量JS的单元测试覆盖率?我可以'我对jscoverage不满意
- 当一些事情可以通过JS或CSS完成时,我应该选择哪种方式
- 我应该如何将响应数据保存在对象(json)中以获得更好的操作和性能
- 我应该如何声明我的自调用函数
- 我应该/如何清除mousemove JQuery事件侦听器
- 我应该如何在 UL 内触发 IMG 标签的点击
- 我应该返回一个类似console.log()的方法调用吗
- 我应该用K&编写javascript时的R样式
- 我应该如何应用if-else条件来向具有不同用户角色的人显示不同的菜单
- 我应该怎么做才能将这个数组从随机更改为在页面刷新时按顺序显示
- 可访问性-失去焦点,我应该强迫焦点下一个焦点