diff --git a/packages/button/src/LionButton.js b/packages/button/src/LionButton.js index 349d4e69d..dc49ef5b3 100644 --- a/packages/button/src/LionButton.js +++ b/packages/button/src/LionButton.js @@ -159,9 +159,20 @@ export class LionButton extends DelegateMixin(SlotMixin(LionLitElement)) { oldEvent.stopPropagation(); // replacing `MouseEvent` with `oldEvent.constructor` breaks IE const newEvent = new MouseEvent(oldEvent.type, oldEvent); + this.__enforceHostEventTarget(newEvent); this.$$slot('_button').dispatchEvent(newEvent); } + __enforceHostEventTarget(event) { + try { + // this is for IE11 (and works in others), because `Object.defineProperty` does not give any effect there + event.__defineGetter__('target', () => this); // eslint-disable-line no-restricted-properties + } catch (error) { + // in case `__defineGetter__` is removed from the platform + Object.defineProperty(event, 'target', { writable: false, value: this }); + } + } + __setupDelegation() { this.addEventListener('keydown', this.__keydownDelegationHandler); this.addEventListener('keyup', this.__keyupDelegationHandler); diff --git a/packages/button/test/lion-button.test.js b/packages/button/test/lion-button.test.js index 44c76af5c..1ad5334b1 100644 --- a/packages/button/test/lion-button.test.js +++ b/packages/button/test/lion-button.test.js @@ -194,6 +194,7 @@ describe('lion-button', () => { 'cancelable', 'clientX', 'clientY', + 'target', ]; sameProperties.forEach(property => {