Sorry if this is a common question, but I couldn't find any answers that seemed pertinent through searching.
If I attach an event listener like this:
window.addEventListener('scroll', function() { check_pos(box); }, false);
it doesn't seem to work to try to remove it later, like this:
window.removeEventListener('scroll', function() { check_pos(box); }, false);
I assume this is because the addEventListener
and removeEventListener
methods want a reference to the same function, while I've provided them with anonymous functions, which, while identical in code, are not literally the same.
How can I change my code to get the call to removeEventListener
to work? The "box" argument refers to the name of an <iframe>
that I'm tracking on the screen; that is, I want to be able to subscribe to the scroll
event once for each <iframe>
that I have (the quantity varies), and once the check_pos()
function measures a certain position, it will call another function and also remove the event listener to free up system resources.
My hunch is that the solution will involve a closure and/or naming the anonymous function, but I'm not sure exactly what that looks like, and would appreciate a concrete example.
Hope that makes sense.
Have you tried maintaining a reference to the anonymous function (like you suggested)?
So:
var listener = function() {
check_pos(box);
};
window.addEventListener('scroll', listener, false);
...
window.removeEventListener('scroll', listener, false);
Mozilla's docs suggest the same thing.