I have a function in my addEventListener (#btn-1) that I want to remove eventually. I know that saving the function to a variable is the way to do it, but passing the “this” won’t work unless it’s wrapped in a function, which in turn won’t be able to be removed now because it’s either an anonymous function or it’s not a reference to the same function even if it’s named. Is there any way to do this?
const anonFunction = function(dis, str) {
console.log(dis);
console.log(str);
}
const myFn = function() {
anonFunction(this, 'hello world');
}
document.querySelector('#btn-1').addEventListener('click', function() {
anonFunction(this, 'hello world');
});
document.querySelector('#btn-2').addEventListener('click', function() {
// doesn't work
document.querySelector('#btn-1').removeEventListener('click', anonFunction);
});<button id="btn-1" type="button">Call Function</button> <button id="btn-2" type="button">Remove Event Listener</button>
UPDATE: SOLVED
Making another function calling the main function assigned to a variable and having that as the function to insert on adding and removing event listeners worked.
const anonFunction = function(dis, str) {
console.log(dis);
console.log(str);
}
const myFn = function() {
anonFunction(this, 'hello world');
}
document.querySelector('#btn-1').addEventListener('click', myFn);
document.querySelector('#btn-2').addEventListener('click', function() {
document.querySelector('#btn-1').removeEventListener('click', myFn);
});<button id="btn-1" type="button">Call Function</button> <button id="btn-2" type="button">Remove Event Listener</button>
Advertisement
Answer
Just name your function that uses this.
const anonFunction = function(dis, str) {
console.log(dis);
console.log(str);
}
const listener = function() {
anonFunction(this, 'hello world');
};
document.querySelector('#btn-1').addEventListener('click', listener);
document.querySelector('#btn-2').addEventListener('click', function() {
// doesn't work
document.querySelector('#btn-1').removeEventListener('click', listener);
});<button id="btn-1" type="button">Call Function</button> <button id="btn-2" type="button">Remove Event Listener</button>