diff --git a/packages/svelte/src/compiler/phases/2-analyze/visitors/shared/a11y/index.js b/packages/svelte/src/compiler/phases/2-analyze/visitors/shared/a11y/index.js
index 4c472df546..9a42c6b1dc 100644
--- a/packages/svelte/src/compiler/phases/2-analyze/visitors/shared/a11y/index.js
+++ b/packages/svelte/src/compiler/phases/2-analyze/visitors/shared/a11y/index.js
@@ -292,12 +292,11 @@ export function check_element(node, context) {
if (handlers.has('click')) {
const is_non_presentation_role =
role_static_value !== null && !is_presentation_role(role_static_value);
- const is_table_cell_or_row = node.name === 'tr' || node.name === 'td' || node.name === 'th';
if (
!is_dynamic_element &&
!is_hidden_from_screen_reader(node.name, attribute_map) &&
(!role || is_non_presentation_role) &&
- (!is_interactive || is_table_cell_or_row) &&
+ !is_interactive &&
!has_spread
) {
const has_key_event =
@@ -614,6 +613,12 @@ function has_disabled_attribute(attribute_map) {
* @returns {typeof ElementInteractivity[keyof typeof ElementInteractivity]}
*/
function element_interactivity(tag_name, attribute_map) {
+ if (tag_name === 'tr' || tag_name === 'td' || tag_name === 'th') {
+ return attribute_map.has('role')
+ ? ElementInteractivity.Static
+ : ElementInteractivity.NonInteractive;
+ }
+
if (
interactive_element_role_schemas.some((schema) => match_schema(schema, tag_name, attribute_map))
) {
diff --git a/packages/svelte/tests/validator/samples/a11y-click-events-have-key-events/input.svelte b/packages/svelte/tests/validator/samples/a11y-click-events-have-key-events/input.svelte
index 4aea444769..e6e8901972 100644
--- a/packages/svelte/tests/validator/samples/a11y-click-events-have-key-events/input.svelte
+++ b/packages/svelte/tests/validator/samples/a11y-click-events-have-key-events/input.svelte
@@ -26,8 +26,11 @@
+
+
+
diff --git a/packages/svelte/tests/validator/samples/a11y-click-events-have-key-events/warnings.json b/packages/svelte/tests/validator/samples/a11y-click-events-have-key-events/warnings.json
index 11b966a1a5..0f52c92b32 100644
--- a/packages/svelte/tests/validator/samples/a11y-click-events-have-key-events/warnings.json
+++ b/packages/svelte/tests/validator/samples/a11y-click-events-have-key-events/warnings.json
@@ -99,11 +99,11 @@
"code": "a11y_click_events_have_key_events",
"message": "Visible, non-interactive elements with a click event must be accompanied by a keyboard event handler. Consider whether an interactive element such as `` or `` might be more appropriate",
"start": {
- "line": 29,
+ "line": 30,
"column": 0
},
"end": {
- "line": 29,
+ "line": 30,
"column": 25
}
},
@@ -111,11 +111,11 @@
"code": "a11y_click_events_have_key_events",
"message": "Visible, non-interactive elements with a click event must be accompanied by a keyboard event handler. Consider whether an interactive element such as `` or `` might be more appropriate",
"start": {
- "line": 30,
+ "line": 32,
"column": 0
},
"end": {
- "line": 30,
+ "line": 32,
"column": 25
}
},
@@ -123,11 +123,11 @@
"code": "a11y_click_events_have_key_events",
"message": "Visible, non-interactive elements with a click event must be accompanied by a keyboard event handler. Consider whether an interactive element such as `` or `` might be more appropriate",
"start": {
- "line": 31,
+ "line": 34,
"column": 0
},
"end": {
- "line": 31,
+ "line": 34,
"column": 25
}
}
diff --git a/packages/svelte/tests/validator/samples/a11y-no-interactive-element-to-noninteractive-role/warnings.json b/packages/svelte/tests/validator/samples/a11y-no-interactive-element-to-noninteractive-role/warnings.json
index 319278f3f5..fe58a885a1 100644
--- a/packages/svelte/tests/validator/samples/a11y-no-interactive-element-to-noninteractive-role/warnings.json
+++ b/packages/svelte/tests/validator/samples/a11y-no-interactive-element-to-noninteractive-role/warnings.json
@@ -683,18 +683,6 @@
"line": 146
}
},
- {
- "code": "a11y_no_interactive_element_to_noninteractive_role",
- "end": {
- "column": 25,
- "line": 147
- },
- "message": "`` cannot have role 'listitem'",
- "start": {
- "column": 0,
- "line": 147
- }
- },
{
"code": "a11y_no_interactive_element_to_noninteractive_role",
"end": {