fix(runtime): handle clicked form submitters

req: convention/004
This commit is contained in:
slhx agent
2026-05-11 07:28:34 +02:00
parent bdd50d7595
commit e1265e37f1
2 changed files with 20 additions and 0 deletions
+10
View File
@@ -394,6 +394,16 @@
navigate(nav);
return;
}
if (name === "click") {
const submitter = closestInRoot(event.target, root, "button[type=submit], input[type=submit], button:not([type])");
const form = submitter && submitter.closest("form");
if (form && root.contains(form) && handleId(form)) {
if (form.reportValidity && !form.reportValidity()) return;
event.preventDefault();
schedule(form, "submit");
return;
}
}
const el = closestInRoot(event.target, root, `[${HID}], [data-slhx-boost] form`);
if (!el || defaultEvent(el) !== name) return;
event.preventDefault();
+10
View File
@@ -17,6 +17,16 @@ fn runtime_handles_get_forms_without_request_body() {
assert!(source.contains("if (method === \"GET\") url.search = urlEncoded(data).toString()"));
}
#[test]
fn runtime_clicking_submitter_schedules_form_submit() {
// req: convention/004
let source = slhx_js::RUNTIME_JS;
assert!(source.contains("button[type=submit], input[type=submit], button:not([type])"));
assert!(source.contains("form.reportValidity && !form.reportValidity()"));
assert!(source.contains("schedule(form, \"submit\")"));
}
#[test]
fn runtime_supports_queued_request_policy() {
let source = slhx_js::RUNTIME_JS;