- From: Marco Zehe <mzehe@mozilla.com>
- Date: Thu, 06 Mar 2014 13:54:29 +0100
- To: public-pfwg-comments@w3.org
- Message-ID: <53187005.3040304@mozilla.com>
Hi there! This is a proposal to enhance the description of the WAI-ARIA role "menu" to not use it for lists of autocomplete options, but only for real menu scenarios such as the context menu to an item, or the dropdown menu from a menu bar's menu item. I'm referring specifically to: http://www.w3.org/TR/wai-aria/roles#menu Instead, a widget with role of "listbox" should be used for such scenarios. Subsequently, the actual autocomplete items should not be menuitem, but option elements instead. So the documentation for role "menuitem" should probably also reference this. Rationale for this proposal: The short version is: Menus on Windows are a mess when it comes to support by assistive technologies and their assumptions on states of menus and where the focus is. Avoiding the role "menu" and "menuitem" for autocomplete scenarios avoids getting into such a mess. Long version: Win32 has always had a concept of a menu mode. This is a specific state applications get in when a menu bar or menu is open. This has been the case even on Windows 3.x, which was still Win16, and has been inherited into Windows 95 and into Microsoft Active Accessibility right from the start in 1996. Screen readers like JAWS and Window-Eyes have certain assumptions about how this menu mode should work. There are 4 events defined: SYSTEM_MENUSTART, SYSTEM_MENUPOPUPSTART, SYSTEM_MENUPOPUPEND and SYSTEM_MENUEND. For a menu bar and its dropdown menus, the only valid event sequence is that stated in the previous sentence. If an application doesn't follow that sequence, screen readers get utterly confused.. For context menus, the sequence is SYSTEM_MENUPOPUPSTART and SYSTEM_MENUPOPUPEND, omitting the other two. Even NVDA uses these, using the SYSTEM_MENUPOPUPSTART as a focus event to recognize that a context menu was opened. The moment such menus are active, focus events on widgets outside the menus cause confusion or are ignored. If an author now uses ARIA menubar, menu, and menuitem roles, the browsers have to translate those into the proper events so screen readers can support them. Examples of menus can be seen in Google Docs, or on the Freedom Scientific homepage. There, even keyboard navigation clearly indicates the menu bar and dropdown menu interaction, and events have to be fired correctly so screen readers can interact with those properly on Windows. In the case of an auto-complete, however, the situation is different entirely. Yes, visually they tend to pop up just like context menus, and often even are styled similarly. But the concept is different. It's not a list of executable functions to choose from, it's merely a list of suggested names or terms to fill in automatically for the user. Say you have an AutoComplete widget consisting of a text box and a container plus result items. If the typed text matches something in the auto complete list a live region announces that results are available, and the list appears. DownArrow selects the first item, up and down select more items, and tab or enter accepts the current item and completes the text in the textbox and returns focus to it. What happens if a web author uses menu and menuitem roles on such an autocomplete is this: 1. User types something. 2. AutoComplete function finds a match, sends info to the live region, and pops up the menu. Note that it only appears, it doesn't actually get focus. 3. Because of 2, a SYSTEM_MENUPOPUPSTART event is fired. NVDA and other screen readers think that a menu has popped up. For them, focus is now no longer in the text field, but on the menu, without any item selected. The result is that left and right arrow no longer read the characters inside the edit field, because a menu is active. 4. On the other hand, if the menu was a listbox instead, and the menuitems were options instead, the listbox and option items would appear, a live region text would tell the user auto complete results are available, but focus would not be stolen from the text box. Only if the user pressed DownArrow, focus would move into the listbox and select the first option. Pressing Enter or Tab would accept the item, and focus would be returned to the textbox. An alternative solution to the focus and menu mode inconsistencies could, in theory, be that browsers fire the menu start event only if an item within such a menu gains focus, if such a menu is created by WAI-ARIA markup. However, that way, authors would be forced to focus an item within a menu once they pop it up, or screen readers would never announce that a context menu, for example, had opened. So, to get the most consistent results acros assistive technologies, browsers, and operating systems, using listbox and option roles as a suggested way for auto complete widgets could go a long way towards relieving authors of doubt and uncertainty. Thanks! Marco -- Marco zehe Accessibility QA engineer and evangelist Mozilla Mail: mzehe@mozilla.com Blog: http://www.marcozehe.de Twitter: http://twitter.com/MarcoInEnglish
Received on Thursday, 6 March 2014 12:55:04 UTC