What does calling addEventLister twice do?

addeventlistener, javascript

Solution

In your example, `func` will not be called twice on click, no; but keep reading for details and a "gotcha."

From `addEventListener` in the spec:

If multiple identical `EventListeners` are registered on the same `EventTarget` with the same parameters the duplicate instances are discarded. They do not cause the `EventListener` to be called twice and since they are discarded they do not need to be removed with the `removeEventListener` method.

(My emphasis)

Here's an example:

const target = document.getElementById("target");

target.addEventListener("click", foo, false);
target.addEventListener("click", foo, false);

function foo() {
    const  p = document.createElement("p");
    p.textContent = "This only appears once per click, but we registered the handler twice.";
    document.body.appendChild(p);
}
<input type="button" id="target" value="Click Me">

It's important to note, though, that it has to be the same function, not just a function that does the same thing. That's because it works by looking for the function on the element's handler list, and two distinct functions — even if equivalent — aren't the same:

const f1 = () => {};
const f2 = () => {};
console.log(f1 === f2); // false

For example, here I'm hooking up four separate functions to the element, all of which will get called:

const target = document.getElementById("target");

for (let count = 0; count < 4; ++count) {
    target.addEventListener("click", () => {
        const p = document.createElement("p");
        p.textContent = "This gets repeated.";
        document.body.appendChild(p);
    }, false);
}
<input type="button" id="target" value="Click Me">

That's because on every loop iteration, a different function is created (even though the code is the same).

Problem

``` elemen.addEventListener('click',func,false); elemen.addEventListener('click',func,false); ``` When `elemen` is clicked, will the function `func` be called twice, or just once? If it is called twice, then is there a solution to check if the same event listener already exists on `elemen`?

Original source