From 86b19a529bee0380832fd0e14b613a59bdd278c0 Mon Sep 17 00:00:00 2001 From: crisbeto Date: Sat, 23 Sep 2017 16:46:30 +0200 Subject: [PATCH] fix(autocomplete): don't open panel for readonly inputs Prevents the autocomplete panel from opening if the associated input is readonly. Fixes #7269. --- src/lib/autocomplete/autocomplete-trigger.ts | 6 ++++-- src/lib/autocomplete/autocomplete.spec.ts | 14 ++++++++++++++ 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/src/lib/autocomplete/autocomplete-trigger.ts b/src/lib/autocomplete/autocomplete-trigger.ts index 89e8d3487b90..f70debc3d883 100644 --- a/src/lib/autocomplete/autocomplete-trigger.ts +++ b/src/lib/autocomplete/autocomplete-trigger.ts @@ -307,8 +307,10 @@ export class MdAutocompleteTrigger implements ControlValueAccessor, OnDestroy { } _handleFocus(): void { - this._attachOverlay(); - this._floatPlaceholder(true); + if (!this._element.nativeElement.readOnly) { + this._attachOverlay(); + this._floatPlaceholder(true); + } } /** diff --git a/src/lib/autocomplete/autocomplete.spec.ts b/src/lib/autocomplete/autocomplete.spec.ts index e4886f42dd1d..1978f6d56cf1 100644 --- a/src/lib/autocomplete/autocomplete.spec.ts +++ b/src/lib/autocomplete/autocomplete.spec.ts @@ -118,6 +118,20 @@ describe('MdAutocomplete', () => { }); })); + it('should not open the panel on focus if the input is readonly', async(() => { + const trigger = fixture.componentInstance.trigger; + input.readOnly = true; + fixture.detectChanges(); + + expect(trigger.panelOpen).toBe(false, 'Expected panel state to start out closed.'); + dispatchFakeEvent(input, 'focusin'); + + fixture.whenStable().then(() => { + fixture.detectChanges(); + expect(trigger.panelOpen).toBe(false, 'Expected panel to stay closed.'); + }); + })); + it('should open the panel programmatically', async(() => { expect(fixture.componentInstance.trigger.panelOpen) .toBe(false, `Expected panel state to start out closed.`);