Skip to content

Commit 17b2f62

Browse files
authored
fix: event.currentTarget always being equal to event.target (#11419)
fixes #11328
1 parent edefc84 commit 17b2f62

File tree

3 files changed

+34
-9
lines changed

3 files changed

+34
-9
lines changed

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

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -122,30 +122,30 @@ export function handle_event_propagation(handler_element, event) {
122122
}
123123
});
124124

125-
/** @param {Element} current_target */
126-
function next(current_target) {
125+
/** @param {Element} next_target */
126+
function next(next_target) {
127+
current_target = next_target;
127128
/** @type {null | Element} */
128-
var parent_element =
129-
current_target.parentNode || /** @type {any} */ (current_target).host || null;
129+
var parent_element = next_target.parentNode || /** @type {any} */ (next_target).host || null;
130130

131131
try {
132132
// @ts-expect-error
133-
var delegated = current_target['__' + event_name];
133+
var delegated = next_target['__' + event_name];
134134

135-
if (delegated !== undefined && !(/** @type {any} */ (current_target).disabled)) {
135+
if (delegated !== undefined && !(/** @type {any} */ (next_target).disabled)) {
136136
if (is_array(delegated)) {
137137
var [fn, ...data] = delegated;
138-
fn.apply(current_target, [event, ...data]);
138+
fn.apply(next_target, [event, ...data]);
139139
} else {
140-
delegated.call(current_target, event);
140+
delegated.call(next_target, event);
141141
}
142142
}
143143
} finally {
144144
if (
145145
!event.cancelBubble &&
146146
parent_element !== handler_element &&
147147
parent_element !== null &&
148-
current_target !== handler_element
148+
next_target !== handler_element
149149
) {
150150
next(parent_element);
151151
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import { test } from '../../test';
2+
3+
export default test({
4+
async test({ assert, target, logs }) {
5+
const [s1] = target.querySelectorAll('span');
6+
7+
s1?.click();
8+
await Promise.resolve();
9+
10+
assert.deepEqual(logs, [false]);
11+
}
12+
});
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
<script>
2+
function onclick(e) {
3+
// should log false when we click the span
4+
console.log(e.currentTarget === e.target)
5+
}
6+
</script>
7+
8+
9+
<button {onclick}>
10+
<span>
11+
Click me
12+
</span>
13+
</button>

0 commit comments

Comments
 (0)