diff --git a/src/ngAria/aria.js b/src/ngAria/aria.js
index 036dd42b47de..08a26e73fc7a 100644
--- a/src/ngAria/aria.js
+++ b/src/ngAria/aria.js
@@ -377,6 +377,25 @@ ngAriaModule.directive('ngShow', ['$aria', function($aria) {
});
}
}
+
+ if (elem[0].nodeName === 'A') {
+ if ($aria.config('bindRoleForClick') && !attr.href && !attr.xlinkHref && !attr.role) {
+ elem.attr('role', 'link');
+ }
+ if ($aria.config('bindKeypress')) {
+ elem.on('keypress', function(event) {
+ var keyCode = event.which || event.keyCode;
+ var hasHref = attr.href || attr.xlinkHref;
+ if ((keyCode === 32 || keyCode === 13) && !hasHref && !attr.ngKeypress) {
+ scope.$apply(callback);
+ }
+
+ function callback() {
+ fn(scope, { $event: event });
+ }
+ });
+ }
+ }
};
}
};
diff --git a/test/ngAria/ariaSpec.js b/test/ngAria/ariaSpec.js
index 73b015f710c3..e547f8bd30cc 100644
--- a/test/ngAria/ariaSpec.js
+++ b/test/ngAria/ariaSpec.js
@@ -755,6 +755,38 @@ describe('$aria', function() {
element.triggerHandler({ type: 'keypress', keyCode: 13 });
expect(element.text()).toBe('');
});
+
+ it('should apply role to anchor elements without href ', function() {
+ compileElement('{{event.type}}{{event.keyCode}}');
+ expect(element.attr('role')).toBe('link');
+ });
+
+ it('should bind keypress to anchor elements when href is falsy', function() {
+ compileElement('{{event.type}}{{event.keyCode}}');
+ expect(element.text()).toBe('');
+ element.triggerHandler({ type: 'keypress', keyCode: 32 });
+ expect(element.text()).toBe('keypress32');
+ element.triggerHandler({ type: 'keypress', keyCode: 13 });
+ expect(element.text()).toBe('keypress13');
+ });
+
+ it('should not bind keypress to anchor elements when keypress is not falsy', function() {
+ compileElement('{{event.type}}{{event.keyCode}}');
+ expect(element.text()).toBe('');
+ element.triggerHandler({ type: 'keypress', keyCode: 32 });
+ expect(element.text()).toBe('');
+ element.triggerHandler({ type: 'keypress', keyCode: 13 });
+ expect(element.text()).toBe('');
+ });
+
+ it('should not bind keypress to anchor elements when href is not falsy', function() {
+ compileElement('{{event.type}}{{event.keyCode}}');
+ expect(element.text()).toBe('');
+ element.triggerHandler({ type: 'keypress', keyCode: 32 });
+ expect(element.text()).toBe('');
+ element.triggerHandler({ type: 'keypress', keyCode: 13 });
+ expect(element.text()).toBe('');
+ });
});
describe('actions when bindRoleForClick is set to false', function() {