IE10-IE11中IE Touch上的双击错误(链接必须点击两次)



我在IE11 Mobile(Lumia 520 Phone)上的现有导航菜单上遇到了这个问题,我的子菜单中的每个链接在第一次点击时都没有点击。

这个fiddle repo是一个部分弹出型可访问的导航菜单,取自WAI应用程序菜单示例。

如果你在IE10或IE11 Mobile或Touch上测试它,你会发现所有子菜单链接都不起作用。

必须单击它们两次才能触发单击事件。

为什么?

此错误是从IE10-11 for touch开始部署的"帮助模拟触摸设备上的悬停"功能的结果。

简而言之,导致并需要双击的是将aria-haspopup=true作为子菜单父元素级别。正因为如此,IE Touch错误地认为所有这些链接都是切换的,并将其视为切换。我还应该注意到,出于类似的原因,iOS Safari有自己的方法来处理带有":悬停[s]的元素,该元素使用可见性或显示来隐藏或显示另一个元素"。

如MSDN的Internet Explorer 10示例和教程所述:

或者,InternetExplorer10将新的行为添加到现有的ariahaspopup属性中,以模拟具有隐藏交互式内容的悬停在页面上的元素。

问题是,虽然它被认为是有帮助的,但它的实现是基于对aria haspopup是什么以及它应该做什么的不完整和有点误导的解读

  1. 从技术上讲,aria-haspopup是一个属性(而不是状态)。这意味着IE在运行时不应该更改的元素上放置了触摸行为。除非一个回应性的环境可能需要这样的改变;即使显示了弹出元素,aria-haspopup='true'也应保持为true。交换机的状态改为aria-expanded

  2. 这个概念只适用于在该教程中实现的ariahaspopup的MSDN示例。即如果aria-haspopup=true位于切换按钮本身,则IE Touch功能将按预期工作但是如果aria-haspopup=true属性像我的repo一样放在父级,或者像更传统的应用程序菜单一样,根据W3C/WAI的例子,这是一个问题。

绕过这个错误的解决方案是,要么因为IE10-11 Touch而不在父元素上使用aria-haspopup=true(这对可访问性来说很糟糕),要么在服务器端或相应地使用Javascript将其从支持触摸的IE10/IE11中删除。

最新更新