Skip to content

Commit c30cf71

Browse files
committed
fix event handling
1 parent c2f97c7 commit c30cf71

File tree

4 files changed

+20
-5
lines changed

4 files changed

+20
-5
lines changed

packages/svelte/src/compiler/phases/3-transform/client/visitors/SvelteHTML.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,17 @@ import { visit_event_attribute } from './shared/events.js';
1212
* @param {ComponentContext} context
1313
*/
1414
export function SvelteHTML(element, context) {
15+
const event_context = {
16+
...context,
17+
state: { ...context.state, node: b.id('$.document.documentElement') }
18+
};
1519
/** @type {Property[]} */
1620
const attributes = [];
1721

1822
for (const attribute of element.attributes) {
1923
if (attribute.type === 'Attribute') {
2024
if (is_event_attribute(attribute)) {
21-
visit_event_attribute(attribute, context);
25+
visit_event_attribute(attribute, event_context);
2226
} else {
2327
const name = normalize_attribute(attribute.name);
2428
const { value } = build_attribute_value(attribute.value, context);

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

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -117,8 +117,14 @@ export function event(event_name, dom, handler, capture, passive) {
117117
var options = { capture, passive };
118118
var target_handler = create_event(event_name, dom, handler, options);
119119

120-
// @ts-ignore
121-
if (dom === document.body || dom === window || dom === document) {
120+
if (
121+
// @ts-ignore
122+
dom === window ||
123+
// @ts-ignore
124+
dom === document ||
125+
dom === document.body ||
126+
dom === document.documentElement
127+
) {
122128
teardown(() => {
123129
dom.removeEventListener(event_name, target_handler, options);
124130
});
Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
11
import { test } from '../../test';
22

33
export default test({
4-
async test({ assert }) {
4+
async test({ assert, target, logs }) {
55
assert.deepEqual(document.documentElement.lang, 'de');
6+
7+
target.querySelector('button')?.click();
8+
assert.deepEqual(logs, ['clicked']);
69
}
710
});
Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,3 @@
1-
<svelte:html lang="de"></svelte:html>
1+
<svelte:html lang="de" onclick={() => console.log('clicked')}></svelte:html>
2+
3+
<button>click</button>

0 commit comments

Comments
 (0)