OAA WIDGET_11: Check that non-form and non-anchor elements with event handlers have valid roles.
Details
- Check that non-form and non-anchor elements with event handlers have valid roles.
Rulesets
- WCAG 2.0 Requirement 2.1.1 Keyboard
- Status: Accepted
- Severity: Violation
- Priority: Priority 1
- IITAA 1.0 13.2 Ensure that significant interactions can be performed with both keyboard and mouse.
- Type:
- Severity: Violation
- Priority: Priority 1
- Status: Accepted
Markup References
- ARIA 1.0: [role="alert"]
- ARIA 1.0: [role="alertdialog"]
- ARIA 1.0: [role="application"]
- ARIA 1.0: [role="article"]
- ARIA 1.0: [role="banner"]
- ARIA 1.0: [role="button"]
- ARIA 1.0: [role="checkbox"]
- ARIA 1.0: [role="columnheader"]
- ARIA 1.0: [role="combobox"]
- ARIA 1.0: [role="complementary"]
- ARIA 1.0: [role="contentinfo"]
- ARIA 1.0: [role="definition"]
- ARIA 1.0: [role="dialog"]
- ARIA 1.0: [role="directory"]
- ARIA 1.0: [role="document"]
- ARIA 1.0: [role="form"]
- ARIA 1.0: [role="grid"]
- ARIA 1.0: [role="gridcell"]
- ARIA 1.0: [role="group"]
- ARIA 1.0: [role="heading"]
- ARIA 1.0: [role="img"]
- ARIA 1.0: [role="link"]
- ARIA 1.0: [role="list"]
- ARIA 1.0: [role="listbox"]
- ARIA 1.0: [role="listitem"]
- ARIA 1.0: [role="log"]
- ARIA 1.0: [role="main"]
- ARIA 1.0: [role="marquee"]
- ARIA 1.0: [role="math"]
- ARIA 1.0: [role="menu"]
- ARIA 1.0: [role="menubar"]
- ARIA 1.0: [role="menuitem"]
- ARIA 1.0: [role="menuitemcheckbox"]
- ARIA 1.0: [role="menuitemradio"]
- ARIA 1.0: [role="navigation"]
- ARIA 1.0: [role="note"]
- ARIA 1.0: [role="option"]
- ARIA 1.0: [role="presentation"]
- ARIA 1.0: [role="progressbar"]
- ARIA 1.0: [role="radiogroup"]
- ARIA 1.0: [role="region"]
- ARIA 1.0: [role="row"]
- ARIA 1.0: [role="rowgroup"]
- ARIA 1.0: [role="rowheader"]
- ARIA 1.0: [role="scrollbar"]
- ARIA 1.0: [role="search"]
- ARIA 1.0: [role="separator"]
- ARIA 1.0: [role="slider"]
- ARIA 1.0: [role="spinbutton"]
- ARIA 1.0: [role="status"]
- ARIA 1.0: [role="tab"]
- ARIA 1.0: [role="tablist"]
- ARIA 1.0: [role="tabpanel"]
- ARIA 1.0: [role="textbox"]
- ARIA 1.0: [role="timer"]
- ARIA 1.0: [role="toolbar"]
- ARIA 1.0: [role="tooltip"]
- ARIA 1.0: [role="tree"]
- ARIA 1.0: [role="treegrid"]
- ARIA 1.0: [role="treeitem"]
Validation Code
Message
A non-form (e.g. input, button, select and textarea elements) or non-anchor element (e.g. 'a' element) has a onKeyXXX, onMouseXXX or onClick event handler and does not have a role attribute or the role value is not a valid ARIA role value.
Dependencies
None
Context
.nonfocusableElementsContainingEvents
Parameters
None
Code
function (ruleContext) {
var passed = true;
/*SMF TODO the following should be taken care of in the context */
if (ruleContext.nodeName.toLowerCase() == "a" && OpenAjax.a11y.xbrowser.hasAttribute(ruleContext, 'href')) return new ValidationResult(passed, [ruleContext], '', '', []);
if (ruleContext.nodeName.toLowerCase() == "area" && OpenAjax.a11y.xbrowser.hasAttribute(ruleContext, 'href')) return new ValidationResult(passed, [ruleContext], '', '', []);
var events = util.getEvents(ruleContext);
if (events.length > 0) {
function hasEvent(a) {
if (OpenAjax.a11y.xbrowser.indexOf(events, ('on' + a)) != -1) return 'on' + a;
if (OpenAjax.a11y.xbrowser.indexOf(events, a) != -1) return a;
return '';
}
function hasTargetEvent() {
var found = false;
var _targetEvents=new Array("click","keyup","keydown","keypress", "mousedown","mouseup","mousemove","mouseout","mouseover");
for (i = 0; i < _targetEvents.length && !found; i ++) {
found = hasEvent(_targetEvents[i]);
if (!found) found = hasEvent(_targetEvents[i]);
}
return found;
}
passed = !hasTargetEvent();
}
return new ValidationResult(passed, [ruleContext], '', '', []);
}
>