可访问性asp.net菜单上的WAVE扫描显示错误

时间:2017-10-06 22:33:56

标签: asp.net accessibility

我们正在对我们的应用程序进行WAVE扫描,以检测可访问性问题。我现在正在看的是“依赖于设备的事件处理程序”。这些显示在asp:Menu控件上。似乎相关的消息说:“onmouseover事件,但不是onfocus事件”。当我查看页面源代码时,我确实看到生成的html如:

<td onmouseover="Menu_HoverStatic(this)" onmouseout="Menu_Unhover(this)" onkeyup="Menu_Key(event)" id="ctl00_MainMenun4">

这告诉我它需要一个与onmouseover处理程序相同的onfocus事件处理程序。我在这个假设中是否正确。有没有办法让asp.net生成这个或可以/我应该看一个手动注入的方法?如果是后者,有什么建议吗?

感谢您的帮助!

3 个答案:

答案 0 :(得分:0)

添加onfocus事件处理程序不足以使表单元格可访问。表格单元格不是可聚焦元素。 (Focusable elements通常是a元素,href属性,link元素href属性,buttoninputtype不是&#34;隐藏&#34;,selecttextarea。)

为了使其他元素可以集中,您应该将tabindex attribute设置为&#34; 0&#34;。这会将示例中的td元素放在Tab键顺序中,并使用键盘使其可以访问。如果它可以接收键盘焦点,它也可以触发你的听众将要等待的焦点事件。

答案 1 :(得分:0)

我找到了答案。见this MS article。对于asp:Menu控件,我需要将Menu的RenderingMode设置为MenuRenderingMode.List并更改web.config controlRenderingCompatibilityVersion =“4.0”中的pages元素。

答案 2 :(得分:0)

<td onmouseover="Menu_HoverStatic(this)" onmouseout="Menu_Unhover(this)" onkeyup="Menu_Key(event)" id="ctl00_MainMenun4">
     

这告诉我它需要一个与onmouseover处理程序相同的onfocus事件处理程序。我在这个假设中是否正确。有没有办法让asp.net生成这个

这取决于td

中的内容

例如,你可以完美地拥有:

<td onmouseover="func_somewhat()"><a href="example.htm">Click</a></td>

onfocustabindex放在td元素上会导致可访问性问题,因为元素本身包含一个可列表元素。

只要选择带键盘的内部链接就可以实现您所期望的目标,并且可以清楚地访问此代码。

如果td中的元素没有任何可聚焦元素,那么您可以在onfocus本身添加td事件处理程序,但您必须满足更多条件:

  • td应该是可关注的(tabindex
  • td应表示为role=buttonrole=link,具体取决于主要行动
  • table如果用于展示,则应具有presentation角色(这显然就是这种情况)