From 159a880a1af352909398d1d7e0af9218702479b1 Mon Sep 17 00:00:00 2001 From: Jeferson Estevo Date: Wed, 22 Mar 2017 16:29:49 -0300 Subject: [PATCH 1/2] 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 --- src/lib/autocomplete/autocomplete-trigger.ts | 1 + src/lib/autocomplete/autocomplete.spec.ts | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+) diff --git a/src/lib/autocomplete/autocomplete-trigger.ts b/src/lib/autocomplete/autocomplete-trigger.ts index 6d3c550022fc..ef4b449f2f35 100644 --- a/src/lib/autocomplete/autocomplete-trigger.ts +++ b/src/lib/autocomplete/autocomplete-trigger.ts @@ -204,6 +204,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 7118f73ae3cb..e841583e437a 100644 --- a/src/lib/autocomplete/autocomplete.spec.ts +++ b/src/lib/autocomplete/autocomplete.spec.ts @@ -611,6 +611,24 @@ describe('MdAutocomplete', () => { }); })); + it('should not call the default input behaviour when an option is selected with ENTER', + async(() => { + fixture.whenStable().then(() => { + fixture.componentInstance.trigger._handleKeydown(DOWN_ARROW_EVENT); + + fixture.whenStable().then(() => { + fixture.detectChanges(); + + spyOn(ENTER_EVENT, 'preventDefault'); + + fixture.componentInstance.trigger._handleKeydown(ENTER_EVENT); + fixture.detectChanges(); + + 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); From b1c47ca5b3eb3cdb129a3cfbced1d4f3ff8d3a53 Mon Sep 17 00:00:00 2001 From: Jeferson Estevo Date: Fri, 24 Mar 2017 21:24:54 -0300 Subject: [PATCH 2/2] test(autocomplete): removing extra detectChanges --- src/lib/autocomplete/autocomplete.spec.ts | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/lib/autocomplete/autocomplete.spec.ts b/src/lib/autocomplete/autocomplete.spec.ts index e841583e437a..cdba0d15f889 100644 --- a/src/lib/autocomplete/autocomplete.spec.ts +++ b/src/lib/autocomplete/autocomplete.spec.ts @@ -611,18 +611,14 @@ describe('MdAutocomplete', () => { }); })); - it('should not call the default input behaviour when an option is selected with ENTER', - async(() => { + it('should prevent the default enter key action', async(() => { fixture.whenStable().then(() => { fixture.componentInstance.trigger._handleKeydown(DOWN_ARROW_EVENT); fixture.whenStable().then(() => { - fixture.detectChanges(); - spyOn(ENTER_EVENT, 'preventDefault'); fixture.componentInstance.trigger._handleKeydown(ENTER_EVENT); - fixture.detectChanges(); expect(ENTER_EVENT.preventDefault).toHaveBeenCalled(); });