Skip to content

Commit 9cb9692

Browse files
authored
fix: ensure event currentTarget is reset after propagation logic (#13042)
* fix: ensure event currentTarget is reset after propgation logic * fix: ensure event currentTarget is reset after propgation logic
1 parent e860547 commit 9cb9692

File tree

4 files changed

+40
-3
lines changed

4 files changed

+40
-3
lines changed

.changeset/seven-news-live.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 event currentTarget is reset after propagation logic

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

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ import { teardown } from '../../reactivity/effects.js';
33
import { define_property, is_array } from '../../../shared/utils.js';
44
import { hydrating } from '../hydration.js';
55
import { queue_micro_task } from '../task.js';
6-
import { dev_current_component_function } from '../../runtime.js';
76
import { FILENAME } from '../../../../constants.js';
87
import * as w from '../../warnings.js';
98

@@ -273,8 +272,8 @@ export function handle_event_propagation(event) {
273272
} finally {
274273
// @ts-expect-error is used above
275274
event.__root = handler_element;
276-
// @ts-expect-error is used above
277-
current_target = handler_element;
275+
// @ts-ignore remove proxy on currentTarget
276+
delete event.currentTarget;
278277
}
279278
}
280279

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import { test } from '../../test';
2+
3+
export default test({
4+
async test({ assert, target, logs }) {
5+
const btn = target.querySelector('button');
6+
7+
btn?.click();
8+
await Promise.resolve();
9+
assert.deepEqual(logs, ['#app', true, 'document', true]);
10+
}
11+
});
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
<script>
2+
$effect(() => {
3+
const doc_listener = (e) => {
4+
console.log('document', e.currentTarget === document);
5+
}
6+
7+
document.addEventListener('click', doc_listener);
8+
document.getElementById('app')?.addEventListener('click', (e) => {
9+
console.log('#app', e.currentTarget === document.getElementById('app'));
10+
});
11+
12+
return () => {
13+
document.removeEventListener('click', doc_listener);
14+
};
15+
});
16+
17+
function onclick() {}
18+
</script>
19+
20+
<div id="app">
21+
<button {onclick}>click me</button>
22+
</div>

0 commit comments

Comments
 (0)