I am wondering how can I remove an event listener after adding one, the way you use on and off in jquery?
document.removeEventListener('touchstart');
document.addEventListener('touchstart', function (e) {
closePopupOnClick(e, popup);
});
but this does not actually remove the event listener. If I put the addEventListener code in a function and pass that function into the the removeEventListener it will not work bc you cannot pass params into the function. Anyone know how to do this?
The removeEventListener() is an inbuilt function in JavaScript which removes an event handler from an element for a attached event. for example, if a button is disabled after one click you can use removeEventListener() to remove a click event listener.
To remove all event listeners from an element: Use the cloneNode() method to clone the element. Replace the original element with the clone. The cloneNode() method copies the node's attributes and their values, but doesn't copy the event listeners.
Add the event listener in the useEffect hook. Return a function from the useEffect hook. Use the removeEventListener method to remove the event listener when the component unmounts.
Put the listener as a variable and attach via .addEventListener
var myListener = function (e) {
closePopupOnClick(e, popup);
};
document.addEventListener('touchstart', myListener, true);
then pass it again when removing with .removeEventListener
document.removeEventListener('touchstart', myListener);
If you're not in strict mode you can make a listener remove itself with arguments.callee
document.addEventListener('touchstart', function (e) {
closePopupOnClick(e, popup);
document.removeEventListener('touchstart', arguments.callee);
}, true);
If you are in strict mode, you have to use a named function expression if you want a function to remove itself
document.addEventListener('touchstart', function myListener(e) {
closePopupOnClick(e, popup);
document.removeEventListener('touchstart', myListener);
}, true);
If you want to use variables in the listener that may be changed by something (e.g. a loop), then you can write a generator function, for instance
function listenerGenerator(popup) {
return function (e) {
closePopupOnClick(e, popup);
};
}
Now you can create the listener with listenerGenerator(popup)
and it will scope the popup
variable. Note that if popup
is an Object, it will be ByRef and therefore may still be subject to changes.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With