开发者

How do I add and remove an event listener using a function with parameters?

开发者 https://www.devze.com 2023-01-02 19:29 出处:网络
Sorry if this is a common question, but I couldn\'t find any answers that seemed pertinent through searching.

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 s开发者_如何学编程ame 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.


var listener;

listener = function(){

if( window.target != anotherEvent.target )
{
    ...CODE where

    window.removeEventListener('click', listener , false);

};

window.addEventListener('click', listener ,false);


document.getElementById("yourId").removeEventListener("click",yourfunction1);
document.getElementById("yourId").addEventListener("click",yourfunction2);

function yourfunction1(){
//write code here
alert(1);
}

function yourfunction2(){
//write code here
alert(2);
}
<button type="button" onclick="yourfunction1()" id="yourId">Button</button>

0

精彩评论

暂无评论...
验证码 换一张
取 消