以下链接包含我最初由Marcy Sutton设想的拉出式菜单设计的扩展。我想要的效果是创建一个包含子菜单的导航菜单。在屏幕阅读器的上下文中,此按钮中的元素将被禁用,直到有人按下按钮打开所需信息。
在Firefox,Chrome和IE上测试此菜单后,菜单按预期运行。然而,当运行名为NVDA的流行屏幕阅读器时,错误的按钮似乎会启动。以下是重现错误的步骤:
Codepen:https://codepen.io/nitronova/pen/qPbpMO
function initApp()
{ // Bind actions to functions.
navButton.addEventListener( "click", handleNavButtonClick, false );
conWrap.addEventListener( "click", handleOutMenuClick, false );
document.body.addEventListener( "keyup", handleKeyup, false ) /* navMenu. */
for( var i = 0; i < navButtons.length; i++ )
{
navButtons[i].addEventListener( "click", handleSubMenuButtonClick, false );
console.log('closing submenus init');
closeSubMenu(navButtons[i]);
}
console.log('closing the nav menu init');
closeNavMenu();
}
请注意:主导航按钮(“navButton”)获取自己的函数handleNavButtonClick,而子菜单(“navButtons”)获取handleSubMenuButtonClick。两个完全独立的功能。问题不在于脚本中的函数,而在于NVDA如何导致错误的函数(或事件触发器)触发。
没有错误消息;行为路径是问题所在。我有截图,证明在NVDA运行时错误的事件正在触发。 https://imgur.com/a/OW1Iv
老实说,我仍然是JavaScript的新手。这里有没有人对此有任何解释?有什么我做错了吗?