From bedf5a1e42a519fb3f478d9ccbf37c10e7e7402d Mon Sep 17 00:00:00 2001 From: Jeferson Estevo Date: Wed, 29 Mar 2017 18:31:28 -0300 Subject: [PATCH] fix(autocomplete): do not trigger submit on ENTER (#3727) * fix(autocomplete): do not trigger submit on ENTER When an option is selected with the ENTER key, it should not submit the form and prevent the default input behavior Fixes #3159 * test(autocomplete): removing extra detectChanges --- src/lib/autocomplete/autocomplete-trigger.ts | 1 + src/lib/autocomplete/autocomplete.spec.ts | 14 ++++++++++++++ 2 files changed, 15 insertions(+) diff --git a/src/lib/autocomplete/autocomplete-trigger.ts b/src/lib/autocomplete/autocomplete-trigger.ts index 25fa1ee9a18..22dd3426569 100644 --- a/src/lib/autocomplete/autocomplete-trigger.ts +++ b/src/lib/autocomplete/autocomplete-trigger.ts @@ -205,6 +205,7 @@ export class MdAutocompleteTrigger implements ControlValueAccessor, OnDestroy { _handleKeydown(event: KeyboardEvent): void { if (this.activeOption && event.keyCode === ENTER) { this.activeOption._selectViaInteraction(); + event.preventDefault(); } else { this.autocomplete._keyManager.onKeydown(event); if (event.keyCode === UP_ARROW || event.keyCode === DOWN_ARROW) { diff --git a/src/lib/autocomplete/autocomplete.spec.ts b/src/lib/autocomplete/autocomplete.spec.ts index 0c8b636f604..f7ca92a28b8 100644 --- a/src/lib/autocomplete/autocomplete.spec.ts +++ b/src/lib/autocomplete/autocomplete.spec.ts @@ -631,6 +631,20 @@ describe('MdAutocomplete', () => { }); })); + it('should prevent the default enter key action', async(() => { + fixture.whenStable().then(() => { + fixture.componentInstance.trigger._handleKeydown(DOWN_ARROW_EVENT); + + fixture.whenStable().then(() => { + spyOn(ENTER_EVENT, 'preventDefault'); + + fixture.componentInstance.trigger._handleKeydown(ENTER_EVENT); + + expect(ENTER_EVENT.preventDefault).toHaveBeenCalled(); + }); + }); + })); + it('should fill the text field, not select an option, when SPACE is entered', async(() => { fixture.whenStable().then(() => { typeInElement('New', input);