diff --git a/src/components/dropdown/index.ts b/src/components/dropdown/index.ts index 47f7fbf24..5136450ef 100644 --- a/src/components/dropdown/index.ts +++ b/src/components/dropdown/index.ts @@ -39,6 +39,7 @@ class Dropdown implements DropdownInterface { _hoverShowTargetElHandler: EventListenerOrEventListenerObject; _hoverHideHandler: EventListenerOrEventListenerObject; _clickHandler: EventListenerOrEventListenerObject; + _keydownEventListener: EventListenerOrEventListenerObject; constructor( targetElement: HTMLElement | null = null, @@ -101,6 +102,8 @@ class Dropdown implements DropdownInterface { }); } + document.removeEventListener('keydown', this._keydownEventListener); + this._popperInstance.destroy(); this._initialized = false; } @@ -128,6 +131,16 @@ class Dropdown implements DropdownInterface { }); } + this._keydownEventListener = (ev: KeyboardEvent) => { + if (ev.key === 'Escape') { + if (this.isVisible()) { + this.hide(); + } + } + }; + + document.addEventListener('keydown', this._keydownEventListener); + this._hoverShowTriggerElHandler = (ev) => { if (ev.type === 'click') { this.toggle(); diff --git a/src/components/dropdown/interface.ts b/src/components/dropdown/interface.ts index 50f1f0b12..b06bb463f 100644 --- a/src/components/dropdown/interface.ts +++ b/src/components/dropdown/interface.ts @@ -13,6 +13,7 @@ export declare interface DropdownInterface { _popperInstance: PopperInstance; _initialized: boolean; _clickOutsideEventListener: EventListenerOrEventListenerObject; + _keydownEventListener: EventListenerOrEventListenerObject; init(): void; _createPopperInstance(): PopperInstance;