diff --git a/Libraries/LibWeb/DOM/HTMLFormElement.cpp b/Libraries/LibWeb/DOM/HTMLFormElement.cpp
index 1d87f18017..8e310983f1 100644
--- a/Libraries/LibWeb/DOM/HTMLFormElement.cpp
+++ b/Libraries/LibWeb/DOM/HTMLFormElement.cpp
@@ -41,7 +41,7 @@ HTMLFormElement::~HTMLFormElement()
{
}
-void HTMLFormElement::submit()
+void HTMLFormElement::submit(RefPtr submitter)
{
if (action().is_null()) {
dbg() << "Unsupported form action ''";
@@ -68,7 +68,7 @@ void HTMLFormElement::submit()
for_each_in_subtree_of_type([&](auto& node) {
auto& input = to(node);
- if (!input.name().is_null())
+ if (!input.name().is_null() && (input.type() != "submit" || &input == submitter))
parameters.append({ input.name(), input.value() });
return IterationDecision::Continue;
});
diff --git a/Libraries/LibWeb/DOM/HTMLFormElement.h b/Libraries/LibWeb/DOM/HTMLFormElement.h
index f50d9ea869..e6a6f18a4f 100644
--- a/Libraries/LibWeb/DOM/HTMLFormElement.h
+++ b/Libraries/LibWeb/DOM/HTMLFormElement.h
@@ -27,6 +27,7 @@
#pragma once
#include
+#include
namespace Web {
@@ -38,7 +39,7 @@ public:
String action() const { return attribute("action"); }
String method() const { return attribute("method"); }
- void submit();
+ void submit(RefPtr submitter);
};
template<>
diff --git a/Libraries/LibWeb/DOM/HTMLInputElement.cpp b/Libraries/LibWeb/DOM/HTMLInputElement.cpp
index 66e58b036e..f3888e3b5c 100644
--- a/Libraries/LibWeb/DOM/HTMLInputElement.cpp
+++ b/Libraries/LibWeb/DOM/HTMLInputElement.cpp
@@ -63,7 +63,7 @@ RefPtr HTMLInputElement::create_layout_node(const StyleProperties*)
button.on_click = [this] {
if (auto* form = first_ancestor_of_type()) {
// FIXME: Remove this const_cast once we have a non-const first_ancestor_of_type.
- const_cast(form)->submit();
+ const_cast(form)->submit(this);
}
};
widget = button;