diff --git a/src/ol/MapBrowserEventHandler.js b/src/ol/MapBrowserEventHandler.js index 2715ae8548..89b603f17f 100644 --- a/src/ol/MapBrowserEventHandler.js +++ b/src/ol/MapBrowserEventHandler.js @@ -18,7 +18,7 @@ class MapBrowserEventHandler extends EventTarget { */ constructor(map, moveTolerance) { - super(); + super(map); /** * This is the element that we will listen to the real events on. diff --git a/src/ol/events/Target.js b/src/ol/events/Target.js index 6bd73874c8..04c65b846a 100644 --- a/src/ol/events/Target.js +++ b/src/ol/events/Target.js @@ -28,10 +28,20 @@ import {clear} from '../obj.js'; * returns false. */ class Target extends Disposable { - constructor() { + + /** + * @param {*=} opt_target Default event target for dispatched events. + */ + constructor(opt_target) { super(); + /** + * @private + * @type {*} + */ + this.target_ = opt_target; + /** * @private * @type {!Object} @@ -86,7 +96,7 @@ class Target extends Disposable { const evt = typeof event === 'string' ? new Event(event) : event; const type = evt.type; if (!evt.target) { - evt.target = this; + evt.target = this.target_ || this; } const listeners = this.listeners_[type]; let propagate; diff --git a/test/spec/ol/events/eventtarget.test.js b/test/spec/ol/events/eventtarget.test.js index 5c96c2aefe..ca209c0060 100644 --- a/test/spec/ol/events/eventtarget.test.js +++ b/test/spec/ol/events/eventtarget.test.js @@ -28,6 +28,15 @@ describe('ol.events.EventTarget', function() { it('creates an empty listeners_ object', function() { expect(Object.keys(eventTarget.listeners_)).to.have.length(0); }); + it('accepts a default target', function(done) { + const defaultTarget = {}; + const target = new EventTarget(defaultTarget); + target.addEventListener('my-event', function(event) { + expect(event.target).to.eql(defaultTarget); + done(); + }); + target.dispatchEvent('my-event'); + }); }); describe('#hasListener', function() {