我们正在对我们的应用程序进行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生成这个或可以/我应该看一个手动注入的方法?如果是后者,有什么建议吗?
感谢您的帮助!
答案 0 :(得分:0)
添加onfocus事件处理程序不足以使表单元格可访问。表格单元格不是可聚焦元素。 (Focusable elements通常是a
元素,href
属性,link
元素href
属性,button
,input
时type
不是&#34;隐藏&#34;,select
和textarea
。)
为了使其他元素可以集中,您应该将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>
将onfocus
和tabindex
放在td
元素上会导致可访问性问题,因为元素本身包含一个可列表元素。
只要选择带键盘的内部链接就可以实现您所期望的目标,并且可以清楚地访问此代码。
如果td
中的元素没有任何可聚焦元素,那么您可以在onfocus
本身添加td
事件处理程序,但您必须满足更多条件:
td
应该是可关注的(tabindex
)td
应表示为role=button
或role=link
,具体取决于主要行动table
如果用于展示,则应具有presentation
角色(这显然就是这种情况)