I'm trying to genericly subscribe and unsubscribe to events. Thus I was wondering, is it possible to store an event listener into an variable and later unbind it by variable reference?
// AddEventListener
var listener = function() {console.log("listener");};
var listener_reference = window.addEventListener("message", my_function );
// RemoveEventListener
window.removeEventListener(listener_reference);
// or
listener_reference.removeEventListener();
I DO know how to know how to subscribe and unsubscribe events in the classical way, e.g. as described on MDN, however I'm looking for an way to do it by assigning the listener to an variable. Thus this classical way is NOT the answer to my question:
var div = document.getElementById('div');
var listener = function (event) {
/* do something here */
};
div.addEventListener('click', listener, false);
div.removeEventListener('click', listener, false);
I endet up building two prototypes EventListener and EventManager:
function EventListener (obj, eventtype, listener, useCapture) {
this.obj = obj;
this.eventtype = eventtype;
this.listener = listener;
this.useCapture = useCapture || false;
this.removeEventListener = function () {
console.log("remove",this);
this.obj.removeEventListener(this.eventtype,this.listener,this.useCapture);
}
this.obj.addEventListener(this.eventtype, this.listener, this.useCapture)
};
function EventManager() {
var eventlisteners=[];
this.addEventListener = function (obj, eventtype, listener, useCapture) {
var eventlistener = new EventListener(obj, eventtype, listener, useCapture);
eventlisteners.push(eventlistener);
return eventlistener;
};
this.removeAllEventListeners = function () {
for (var i = 0; i < eventlisteners.length; i++) {
if(eventlisteners[i] instanceof EventListener ) {
eventlisteners[i].removeEventListener();
delete eventlisteners[i];
}
}
};
}
var listener = function(){console.log("Hello World!")};
var clicks = new EventListener(window,"click",listener);
clicks.removeEventListener();
var manager = new EventManager();
var listener2 = function(){console.log("Hello World 2!")};
var clicks2 = manager.addEventListener(window,"click",listener);
manager.removeAllEventListeners();