diff --git a/src/browser/tests/element/html/form.html b/src/browser/tests/element/html/form.html index 17743135..d3249856 100644 --- a/src/browser/tests/element/html/form.html +++ b/src/browser/tests/element/html/form.html @@ -343,3 +343,123 @@ testing.expectEqual('', form.elements['choice'].value) } + + +
+ + + + + + + + + + + + + + + + + + + + + diff --git a/src/browser/webapi/element/html/Form.zig b/src/browser/webapi/element/html/Form.zig index 24e8433e..b86744da 100644 --- a/src/browser/webapi/element/html/Form.zig +++ b/src/browser/webapi/element/html/Form.zig @@ -117,6 +117,47 @@ pub fn submit(self: *Form, page: *Page) !void { return page.submitForm(null, self, .{ .fire_event = false }); } +/// 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 { + 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 +/// -