diff --git a/src/browser/tests/element/html/form.html b/src/browser/tests/element/html/form.html index 86d4925b..d3249856 100644 --- a/src/browser/tests/element/html/form.html +++ b/src/browser/tests/element/html/form.html @@ -384,3 +384,82 @@ testing.expectEqual(true, true); } + + +
+ + + + + + +
+ + + + + + + +
+ +
+
+ +
+ + diff --git a/src/browser/webapi/element/html/Form.zig b/src/browser/webapi/element/html/Form.zig index 12c32291..b86744da 100644 --- a/src/browser/webapi/element/html/Form.zig +++ b/src/browser/webapi/element/html/Form.zig @@ -120,11 +120,44 @@ pub fn submit(self: *Form, page: *Page) !void { /// https://html.spec.whatwg.org/multipage/forms.html#dom-form-requestsubmit /// Like submit(), but fires the submit event and validates the form. pub fn requestSubmit(self: *Form, submitter: ?*Element, page: *Page) !void { - // TODO check the submitter is a submit button if not null. - const submitter_element = submitter orelse self.asElement(); + const submitter_element = if (submitter) |s| blk: { + // The submitter must be a submit button. + if (!isSubmitButton(s)) return error.TypeError; + + // The submitter's form owner must be this form element. + const submitter_form = getFormOwner(s, page); + if (submitter_form == null or submitter_form.? != self) return error.NotFound; + + break :blk s; + } else self.asElement(); + return page.submitForm(submitter_element, self, .{}); } +/// Returns true if the element is a submit button per the HTML spec: +/// - or +/// -