diff --git a/src/components/radioButton/radio-button.js b/src/components/radioButton/radio-button.js index c5ee3458bd6..84db83ec340 100644 --- a/src/components/radioButton/radio-button.js +++ b/src/components/radioButton/radio-button.js @@ -95,7 +95,17 @@ function mdRadioGroupDirective($mdUtil, $mdConstant, $mdTheming, $timeout) { */ function keydownListener(ev) { var keyCode = ev.which || ev.keyCode; - switch(keyCode) { + + // Only listen to events that we originated ourselves + // so that we don't trigger on things like arrow keys in + // inputs. + + if (keyCode != $mdConstant.KEY_CODE.ENTER && + ev.currentTarget != ev.target) { + return; + } + + switch (keyCode) { case $mdConstant.KEY_CODE.LEFT_ARROW: case $mdConstant.KEY_CODE.UP_ARROW: ev.preventDefault(); @@ -117,6 +127,7 @@ function mdRadioGroupDirective($mdUtil, $mdConstant, $mdTheming, $timeout) { } break; } + } } diff --git a/src/components/radioButton/radio-button.spec.js b/src/components/radioButton/radio-button.spec.js index 0cee983330c..d4b76757917 100644 --- a/src/components/radioButton/radio-button.spec.js +++ b/src/components/radioButton/radio-button.spec.js @@ -106,7 +106,9 @@ describe('radioButton', function() { var rbGroupElement = element.eq(0); rbGroupElement.triggerHandler({ type: 'keydown', - keyCode: $mdConstant.KEY_CODE.RIGHT_ARROW + keyCode: $mdConstant.KEY_CODE.RIGHT_ARROW, + currentTarget: rbGroupElement[0], + target: rbGroupElement[0] }); expect($rootScope.color).toEqual('green'); @@ -143,7 +145,9 @@ describe('radioButton', function() { element.triggerHandler('mousedown'); element.triggerHandler({ type: 'keydown', - keyCode: $mdConstant.KEY_CODE.DOWN_ARROW + keyCode: $mdConstant.KEY_CODE.DOWN_ARROW, + currentTarget: element[0], + target: element[0] }); expect(element[0]).toHaveClass('md-focused'); })); @@ -257,6 +261,8 @@ describe('radioButton', function() { function rightArrow() { rbGroupElement.triggerHandler({ type: 'keydown', + target: rbGroupElement[0], + currentTarget: rbGroupElement[0], keyCode: $mdConstant.KEY_CODE.RIGHT_ARROW }); }