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

Commit 93e52a4

Browse files
committed
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.
1 parent d8492f4 commit 93e52a4

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
@@ -334,7 +334,8 @@ ngAriaModule.directive('ngShow', ['$aria', function($aria) {
334334

335335
if ($aria.config('bindKeypress') && !attr.ngKeypress && !isNodeOneOf(elem, nodeBlackList)) {
336336
elem.on('keypress', function(event) {
337-
if (event.keyCode === 32 || event.keyCode === 13) {
337+
var keyCode = event.which || event.keyCode;
338+
if (keyCode === 32 || keyCode === 13) {
338339
scope.$apply(callback);
339340
}
340341

test/ngAria/ariaSpec.js

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

587587
var clickFn;
588588

589-
it('should a trigger click from the keyboard', function() {
589+
it('should trigger click from the keyboard', function() {
590590
scope.someAction = function() {};
591591

592592
var elements = $compile('<section>' +
@@ -608,6 +608,28 @@ describe('$aria', function() {
608608
expect(clickFn).toHaveBeenCalledWith('li');
609609
});
610610

611+
it('should trigger click in some browsers that provide event.which instead event.keyCode', function() {
612+
scope.someAction = function() {};
613+
614+
var elements = $compile('<section>' +
615+
'<div class="div-click" ng-click="someAction(\'div\')" tabindex="0"></div>' +
616+
'<ul><li ng-click="someAction( \'li\')" tabindex="0"></li></ul>' +
617+
'</section>')(scope);
618+
619+
scope.$digest();
620+
621+
clickFn = spyOn(scope, 'someAction');
622+
623+
var divElement = elements.find('div');
624+
var liElement = elements.find('li');
625+
626+
divElement.triggerHandler({type: 'keypress', which: 32});
627+
liElement.triggerHandler({type: 'keypress', which: 32});
628+
629+
expect(clickFn).toHaveBeenCalledWith('div');
630+
expect(clickFn).toHaveBeenCalledWith('li');
631+
});
632+
611633
it('should not override existing ng-keypress', function() {
612634
scope.someOtherAction = function() {};
613635
var keypressFn = spyOn(scope, 'someOtherAction');

0 commit comments

Comments
 (0)