Skip to content

Commit f8c85d5

Browse files
authored
fix: ensure capture events don't call delegated events (#10831)
fixes #10821
1 parent 9ff8029 commit f8c85d5

File tree

5 files changed

+34
-1
lines changed

5 files changed

+34
-1
lines changed

.changeset/ten-eels-move.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"svelte": patch
3+
---
4+
5+
fix: ensure capture events don't call delegated events

packages/svelte/src/internal/client/dom/elements/events.js

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,10 @@ export function event(event_name, dom, handler, capture, passive) {
1717
* @this {EventTarget}
1818
*/
1919
function target_handler(/** @type {Event} */ event) {
20-
handle_event_propagation(dom, event);
20+
if (!capture) {
21+
// Only call in the bubble phase, else delegated events would be called before the capturing events
22+
handle_event_propagation(dom, event);
23+
}
2124
if (!event.cancelBubble) {
2225
return handler.call(this, event);
2326
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import { test } from '../../test';
2+
import { log } from './log.js';
3+
4+
export default test({
5+
before_test() {
6+
log.length = 0;
7+
},
8+
9+
async test({ assert, target }) {
10+
const btn = target.querySelector('button');
11+
12+
btn?.click();
13+
await Promise.resolve();
14+
assert.deepEqual(log, ['div onclickcapture', 'button onclick']);
15+
}
16+
});
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
/** @type {any[]} */
2+
export const log = [];
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
<script>
2+
import { log } from "./log";
3+
</script>
4+
5+
<div onclickcapture={() => log.push('div onclickcapture')}>
6+
<button onclick={() => log.push('button onclick')}>main</button>
7+
</div>

0 commit comments

Comments
 (0)