9

In Openlayers 3 how to remove a event listener attached like this:

var a = map.on("pointerdrag",function (e) {
             // event handler
});

var b = map.on("pointerdrag",function (e) {
             // event handler
});

How do I remove only listner a and keep b active?

Shaunak
  • 17,377
  • 5
  • 53
  • 84

2 Answers2

11

Ah its pretty simple! Its in the API Docs: unByKey, but very counter-intuitive name for an off function.

So to remove the event listener a:

map.unByKey(a);

Will remove a listener but keep the b on.

Note: this will work across any object in Open Layers 3 that emits an event. like Layers, Interactions etc..

Shaunak
  • 17,377
  • 5
  • 53
  • 84
  • 1
    Note you can also use `.un`, if you are using a named function. `function onPointerDragOne() {/*do stuf*/}` `function onPointerDragTwo() {/*do stuf*/}` `map.on("pointerdrag", onPointerDragOne);` `map.on("pointerdrag", onPointerDragTwo);` `map.un("pointerdrag", onPointerDragOne);` `// Only onPointerDragTwo will run` – Ward D.S. Apr 06 '17 at 11:12
1

I was just wondering the same thing, seems like off would be the appropriate method to remove an event listener. You can also call this directly in the event callback:

map.on("pointerdrag", function (e) {
    map.unByKey(e);
});

This should remove only the this specific event.

jOshT
  • 1,525
  • 1
  • 11
  • 15