要使应用程序符合W3C feed pattern,我必须创建键盘命令,以帮助屏幕阅读器用户浏览通过无限滚动加载的内容。参见工作示例here。
在示例页面上,专注于列表中的一项,然后按PAGE_DOWN / PAGE_UP。看到?这样一来,您就可以浏览列表项,同时跳过每一项的内容。
如果您将重点放在其中一个项目中的按钮上并尝试从那里导航,则该按钮仍将在文章之间正确导航。 这就是我希望我的应用程序运行的方式,但事实并非如此。
我的代码与示例中的代码基本相同。 <article>
中有多个<section role="feed">
元素。使用jQuery,我将'keydown'事件附加到该<section>
,称为#product-grid
。
$('#product-grid').keydown(function(event) {
// Detect which key was pressed and execute appropriate action
});
HTML结构:
<section id="product-grid" role="feed">
<article tabindex="-1">
<a href="#"> having focus on this element prevents the 'keydown' event from firing
<img src="..."/>
<p>some text</p>
</a>
<div>
if you click on this non-interactive section instead,the event fires correctly
</div>
</article>
(...) many other <article> elements
</section>
在我的文章中,有一些锚点。如果您专注于它们并按某个键,则不会触发“ keydown”事件 。如果您将重点放在本文的其他任何地方,都可以。
据我了解,当后代项具有焦点时,父项(在这种情况下为#product-grid
)也会成为焦点。我说得对吗?
我尝试过的事情:
- 委托事件,使用on()捕获
#product-grid
中某些元素(包括锚元素)的keydown事件。 - 将keydown事件处理程序直接附加到
<article>
中的锚点。当我专注于它并按一个键时,什么也没有发生。根据我在SO上搜索得到的结果,这应该可以工作。
这是一个小提琴,您可以在其中重现问题: https://jsfiddle.net/fgzom4kw/
重现该问题:
- 单击任何项目的灰色背景(而不是锚点)。红色轮廓将表明它已聚焦。
- 使用PAGE UP和PAGE DOWN来浏览项目。
- 按TAB键,将焦点放在锚点之一上。
- 焦点对准锚点后,尝试使用PAGE UP和PAGE DOWN键再次导航。
将此行为与W3C example的行为进行比较。
问题已解决。有两种解决方案:
我的方式:https://stackoverflow.com/a/59449938/9811172
<matrixRef>
还是公路! </matrixRef>
Twisty的方式:https://stackoverflow.com/a/59448891/9811172
检查注释是否有任何警告。