diff options
author | bptato <nincsnevem662@gmail.com> | 2025-05-05 22:22:15 +0200 |
---|---|---|
committer | bptato <nincsnevem662@gmail.com> | 2025-05-05 22:22:54 +0200 |
commit | 20bc349cc5dc7c87ebb2db14147bba262bf48b4a (patch) | |
tree | 77bdf3da982d7056e5ec8ad7f7508be6b387a21a | |
parent | 0a8d03f46f4be3dfc6c8febfcd47dea94c972ffd (diff) | |
download | chawan-20bc349cc5dc7c87ebb2db14147bba262bf48b4a.tar.gz |
event: fix another stopPropagation bug
-rw-r--r-- | src/html/event.nim | 17 | ||||
-rw-r--r-- | test/js/event.html | 1 |
2 files changed, 10 insertions, 8 deletions
diff --git a/src/html/event.nim b/src/html/event.nim index 3c415c67..c6db6e9f 100644 --- a/src/html/event.nim +++ b/src/html/event.nim @@ -556,14 +556,15 @@ proc dispatch*(ctx: JSContext; target: EventTarget; event: Event): bool = if not stop: event.eventPhase = 2 ctx.dispatchEvent0(event, target, stop, canceled, capture = true) - ctx.dispatchEvent0(event, target, stop, canceled, capture = false) - if event.bubbles: - event.eventPhase = 3 - for i in 1 ..< targets.len: - if stop: - break - let target = targets[i] - ctx.dispatchEvent0(event, target, stop, canceled, capture = false) + if not stop: + ctx.dispatchEvent0(event, target, stop, canceled, capture = false) + if event.bubbles: + event.eventPhase = 3 + for i in 1 ..< targets.len: + if stop: + break + let target = targets[i] + ctx.dispatchEvent0(event, target, stop, canceled, capture = false) event.eventPhase = 0 event.flags.excl(efDispatch) return canceled diff --git a/test/js/event.html b/test/js/event.html index 7649e33a..90f72b10 100644 --- a/test/js/event.html +++ b/test/js/event.html @@ -8,6 +8,7 @@ window.onload = function() { const x = document.getElementById("x") const y = document.getElementById("y") let n = 0; + x.addEventListener("test", e => { n++, e.stopPropagation() }, true); x.addEventListener("test", e => n++); x.dispatchEvent(new Event("test", {bubbles: true})); assertEquals(n, 1); |