diff --git a/Tests/LibWeb/Text/expected/hit_testing/button.txt b/Tests/LibWeb/Text/expected/hit_testing/button.txt
new file mode 100644
index 0000000000..7fc555d082
--- /dev/null
+++ b/Tests/LibWeb/Text/expected/hit_testing/button.txt
@@ -0,0 +1 @@
+Button Clicked!
diff --git a/Tests/LibWeb/Text/input/hit_testing/button.html b/Tests/LibWeb/Text/input/hit_testing/button.html
new file mode 100644
index 0000000000..39712152b5
--- /dev/null
+++ b/Tests/LibWeb/Text/input/hit_testing/button.html
@@ -0,0 +1,21 @@
+
+
+
+
+
diff --git a/Userland/Libraries/LibWeb/Page/EventHandler.cpp b/Userland/Libraries/LibWeb/Page/EventHandler.cpp
index adc8dfc1d5..2dd1de250c 100644
--- a/Userland/Libraries/LibWeb/Page/EventHandler.cpp
+++ b/Userland/Libraries/LibWeb/Page/EventHandler.cpp
@@ -34,8 +34,12 @@ static JS::GCPtr dom_node_for_event_dispatch(Painting::Paintable& pai
return node;
if (auto node = paintable.dom_node())
return node;
- if (auto* layout_parent = paintable.layout_node().parent())
- return layout_parent->dom_node();
+ auto* layout_parent = paintable.layout_node().parent();
+ while (layout_parent) {
+ if (auto* node = layout_parent->dom_node())
+ return node;
+ layout_parent = layout_parent->parent();
+ }
return nullptr;
}