From ba62150f7aa24a066642b69cd9942900ff13b812 Mon Sep 17 00:00:00 2001 From: Pierre Tachoire Date: Tue, 17 Mar 2026 17:05:30 +0100 Subject: [PATCH] add Form.requestSubmit(submitter) --- src/browser/tests/element/html/form.html | 41 ++++++++++++++++++++++++ src/browser/webapi/element/html/Form.zig | 9 ++++++ 2 files changed, 50 insertions(+) diff --git a/src/browser/tests/element/html/form.html b/src/browser/tests/element/html/form.html index 17743135..86d4925b 100644 --- a/src/browser/tests/element/html/form.html +++ b/src/browser/tests/element/html/form.html @@ -343,3 +343,44 @@ 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..12c32291 100644 --- a/src/browser/webapi/element/html/Form.zig +++ b/src/browser/webapi/element/html/Form.zig @@ -117,6 +117,14 @@ 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 { + // TODO check the submitter is a submit button if not null. + const submitter_element = submitter orelse self.asElement(); + return page.submitForm(submitter_element, self, .{}); +} + pub const JsApi = struct { pub const bridge = js.Bridge(Form); pub const Meta = struct { @@ -132,6 +140,7 @@ pub const JsApi = struct { pub const elements = bridge.accessor(Form.getElements, null, .{}); pub const length = bridge.accessor(Form.getLength, null, .{}); pub const submit = bridge.function(Form.submit, .{}); + pub const requestSubmit = bridge.function(Form.requestSubmit, .{}); }; const testing = @import("../../../../testing.zig");