diff --git a/src/ngAria/aria.js b/src/ngAria/aria.js index 91a96979d985..44522df72361 100644 --- a/src/ngAria/aria.js +++ b/src/ngAria/aria.js @@ -334,7 +334,8 @@ ngAriaModule.directive('ngShow', ['$aria', function($aria) { if ($aria.config('bindKeypress') && !attr.ngKeypress && !isNodeOneOf(elem, nodeBlackList)) { elem.on('keypress', function(event) { - if (event.keyCode === 32 || event.keyCode === 13) { + var keyCode = event.which || event.keyCode; + if (keyCode === 32 || keyCode === 13) { scope.$apply(callback); } diff --git a/test/ngAria/ariaSpec.js b/test/ngAria/ariaSpec.js index 8da1f83c7611..5ba258a52e31 100644 --- a/test/ngAria/ariaSpec.js +++ b/test/ngAria/ariaSpec.js @@ -586,7 +586,7 @@ describe('$aria', function() { var clickFn; - it('should a trigger click from the keyboard', function() { + it('should trigger click from the keyboard', function() { scope.someAction = function() {}; var elements = $compile('
' + @@ -608,6 +608,28 @@ describe('$aria', function() { expect(clickFn).toHaveBeenCalledWith('li'); }); + it('should trigger click in some browsers that provide event.which instead event.keyCode', function() { + scope.someAction = function() {}; + + var elements = $compile('
' + + '
' + + '' + + '
')(scope); + + scope.$digest(); + + clickFn = spyOn(scope, 'someAction'); + + var divElement = elements.find('div'); + var liElement = elements.find('li'); + + divElement.triggerHandler({type: 'keypress', which: 32}); + liElement.triggerHandler({type: 'keypress', which: 32}); + + expect(clickFn).toHaveBeenCalledWith('div'); + expect(clickFn).toHaveBeenCalledWith('li'); + }); + it('should not override existing ng-keypress', function() { scope.someOtherAction = function() {}; var keypressFn = spyOn(scope, 'someOtherAction');