From fdded66b5ab2b118aa8462213b8d8562009b63cd Mon Sep 17 00:00:00 2001 From: Kristiyan Kostadinov Date: Thu, 27 Jul 2017 19:44:23 +0300 Subject: [PATCH] fix(autocomplete): don't prevent default enter action if panel is closed (#5977) Currently the autocomplete will always prevented the default enter key action, even if the panel is closed, which goes against the native behavior. Fixes #5976. --- src/lib/autocomplete/autocomplete-trigger.ts | 2 +- src/lib/autocomplete/autocomplete.spec.ts | 19 ++++++++++++++++--- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/src/lib/autocomplete/autocomplete-trigger.ts b/src/lib/autocomplete/autocomplete-trigger.ts index c645ff86e911..cdc00c36aeba 100644 --- a/src/lib/autocomplete/autocomplete-trigger.ts +++ b/src/lib/autocomplete/autocomplete-trigger.ts @@ -298,7 +298,7 @@ export class MdAutocompleteTrigger implements ControlValueAccessor, OnDestroy { _handleKeydown(event: KeyboardEvent): void { if (event.keyCode === ESCAPE && this.panelOpen) { this.closePanel(); - } else if (this.activeOption && event.keyCode === ENTER) { + } else if (this.activeOption && event.keyCode === ENTER && this.panelOpen) { this.activeOption._selectViaInteraction(); event.preventDefault(); } else { diff --git a/src/lib/autocomplete/autocomplete.spec.ts b/src/lib/autocomplete/autocomplete.spec.ts index 425aa491e003..d043c13ee17f 100644 --- a/src/lib/autocomplete/autocomplete.spec.ts +++ b/src/lib/autocomplete/autocomplete.spec.ts @@ -719,15 +719,28 @@ describe('MdAutocomplete', () => { 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(); + expect(ENTER_EVENT.defaultPrevented) + .toBe(true, 'Expected the default action to have been prevented.'); }); }); })); + it('should not prevent the default enter action for a closed panel after a user interaction', + fakeAsync(() => { + tick(); + fixture.componentInstance.trigger._handleKeydown(UP_ARROW_EVENT); + tick(); + fixture.detectChanges(); + + fixture.componentInstance.trigger.closePanel(); + fixture.detectChanges(); + fixture.componentInstance.trigger._handleKeydown(ENTER_EVENT); + + expect(ENTER_EVENT.defaultPrevented).toBe(false, 'Default action should not be prevented.'); + })); + it('should fill the text field, not select an option, when SPACE is entered', async(() => { fixture.whenStable().then(() => { typeInElement('New', input);