Re: [whatwg/dom] "inner invoke" of event listener with "once" doesn't mark listener as "removed" (Issue #1323)

Here's a simplified example:

```html
<script>
    var type = "foo";
    var target = document.createElement("div");

    function listener1() {
        console.log("Listener 1");

        console.log("Before inner dispatch");
        target.dispatchEvent(new Event(type));
        console.log("After inner dispatch");
    }

    function listener2() {
        console.log("Listener 2");
    }

    target.addEventListener(type, listener1, { once: true });
    target.addEventListener(type, listener2, { once: true });

    console.log("Before outer dispatch");
    target.dispatchEvent(new Event(type));
    console.log("After outer dispatch");
</script>
```

When we begin the outer dispatch, the listeners are cloned. `listener2` is in the cloned list.

When we begin the inner dispatch, the listeners are cloned. `listener2` is in this cloned list as well.

After the inner dispatch invokes `listener2`, it's removed from the target, but it's still in the outer dispatch's cloned list.

Does that make sense, or am I missing something here? :)

-- 
Reply to this email directly or view it on GitHub:
https://github.com/whatwg/dom/issues/1323#issuecomment-2482288674
You are receiving this because you are subscribed to this thread.

Message ID: <whatwg/dom/issues/1323/2482288674@github.com>

Received on Monday, 18 November 2024 08:42:15 UTC