diff --git a/src/components/checkbox/checkbox.js b/src/components/checkbox/checkbox.js index a1ba4b7bc24..a23618606bf 100644 --- a/src/components/checkbox/checkbox.js +++ b/src/components/checkbox/checkbox.js @@ -168,10 +168,19 @@ function MdCheckboxDirective(inputDirective, $mdAria, $mdConstant, $mdTheming, $ function keypressHandler(ev) { var keyCode = ev.which || ev.keyCode; - if (keyCode === $mdConstant.KEY_CODE.SPACE || keyCode === $mdConstant.KEY_CODE.ENTER) { - ev.preventDefault(); - element.addClass('md-focused'); - listener(ev); + ev.preventDefault(); + switch(keyCode) { + case $mdConstant.KEY_CODE.SPACE: + element.addClass('md-focused'); + listener(ev); + break; + case $mdConstant.KEY_CODE.ENTER: + var form = $mdUtil.getClosest(ev.target, 'form'); + //We have to use a native event here as the form directive does not use jqlite + if(form) { + form.dispatchEvent(new Event('submit')); + } + break; } } diff --git a/src/components/checkbox/checkbox.spec.js b/src/components/checkbox/checkbox.spec.js index b95af96e8ca..5c64659905b 100644 --- a/src/components/checkbox/checkbox.spec.js +++ b/src/components/checkbox/checkbox.spec.js @@ -280,6 +280,39 @@ describe('mdCheckbox', function() { expect(isChecked(checkbox)).toBe(true); }); + it('should set the checkbox to checked when focused and SPACE keypress event fired', function () { + var checkbox = compileAndLink(''); + checkbox.triggerHandler({ + type: 'keypress', + keyCode: $mdConstant.KEY_CODE.SPACE + }); + expect(isChecked(checkbox)).toBe(true); + }); + + it('should should NOT set the checkbox to checked when focused and ENTER keypress event fired', function () { + var checkbox = compileAndLink(''); + checkbox.triggerHandler({ + type: 'keypress', + keyCode: $mdConstant.KEY_CODE.ENTER + }); + expect(isChecked(checkbox)).toBe(false); + }); + + it('should submit a parent form when ENTER is pressed', function () { + + var form = compileAndLink('
'); + + angular.element(form[0].getElementsByTagName('md-checkbox')[0]).triggerHandler({ + type: 'keypress', + keyCode: $mdConstant.KEY_CODE.ENTER + }); + + pageScope.$apply(); + + expect(form[0].classList.contains('ng-submitted')).toBe(true); + + }); + it('should mark the checkbox as selected on load with ng-checked', function() { pageScope.isChecked = function() { return true; };