Skip to content
This repository was archived by the owner on Apr 12, 2024. It is now read-only.

Commit 249f9b8

Browse files
andrewaustinNarretz
authored andcommitted
fix(ngAria): change accessibility keypress event to use event.which if it is provided
In Firefox, keyboard events for printable characters (e.g. space) do not use event.keyCode. Use event.which if it is provided before falling back to event.keyCode. Closes #11340
1 parent 992114f commit 249f9b8

File tree

2 files changed

+25
-2
lines changed

2 files changed

+25
-2
lines changed

src/ngAria/aria.js

+2-1
Original file line numberDiff line numberDiff line change
@@ -347,7 +347,8 @@ ngAriaModule.directive('ngShow', ['$aria', function($aria) {
347347

348348
if ($aria.config('bindKeypress') && !attr.ngKeypress && !isNodeOneOf(elem, nodeBlackList)) {
349349
elem.on('keypress', function(event) {
350-
if (event.keyCode === 32 || event.keyCode === 13) {
350+
var keyCode = event.which || event.keyCode;
351+
if (keyCode === 32 || keyCode === 13) {
351352
scope.$apply(callback);
352353
}
353354

test/ngAria/ariaSpec.js

+23-1
Original file line numberDiff line numberDiff line change
@@ -598,7 +598,7 @@ describe('$aria', function() {
598598

599599
var clickFn;
600600

601-
it('should a trigger click from the keyboard', function() {
601+
it('should trigger a click from the keyboard', function() {
602602
scope.someAction = function() {};
603603

604604
var elements = $compile('<section>' +
@@ -620,6 +620,28 @@ describe('$aria', function() {
620620
expect(clickFn).toHaveBeenCalledWith('li');
621621
});
622622

623+
it('should trigger a click in browsers that provide event.which instead of event.keyCode', function() {
624+
scope.someAction = function() {};
625+
626+
var elements = $compile('<section>' +
627+
'<div class="div-click" ng-click="someAction(\'div\')" tabindex="0"></div>' +
628+
'<ul><li ng-click="someAction( \'li\')" tabindex="0"></li></ul>' +
629+
'</section>')(scope);
630+
631+
scope.$digest();
632+
633+
clickFn = spyOn(scope, 'someAction');
634+
635+
var divElement = elements.find('div');
636+
var liElement = elements.find('li');
637+
638+
divElement.triggerHandler({type: 'keypress', which: 32});
639+
liElement.triggerHandler({type: 'keypress', which: 32});
640+
641+
expect(clickFn).toHaveBeenCalledWith('div');
642+
expect(clickFn).toHaveBeenCalledWith('li');
643+
});
644+
623645
it('should not override existing ng-keypress', function() {
624646
scope.someOtherAction = function() {};
625647
var keypressFn = spyOn(scope, 'someOtherAction');

0 commit comments

Comments
 (0)