diff --git a/src/browser/xhr/form_data.zig b/src/browser/xhr/form_data.zig index 485ef647..ed4782ed 100644 --- a/src/browser/xhr/form_data.zig +++ b/src/browser/xhr/form_data.zig @@ -115,17 +115,16 @@ const EntryIterable = iterator.Iterable(kv.EntryIterator, "FormDataEntryIterator // TODO: handle disabled fieldsets fn collectForm(form: *parser.Form, submitter_: ?*parser.ElementHTML, page: *Page) !kv.List { const arena = page.arena; - const collection = try parser.formGetCollection(form); - const len = try parser.htmlCollectionGetLength(collection); + const node_list = try @import("../dom/css.zig").querySelectorAll(arena, @alignCast(@ptrCast(form)), "input,select,button,textarea"); + const nodes = node_list.nodes.items; var entries: kv.List = .{}; - try entries.ensureTotalCapacity(arena, len); + try entries.ensureTotalCapacity(arena, nodes.len); var submitter_included = false; const submitter_name_ = try getSubmitterName(submitter_); - for (0..len) |i| { - const node = try parser.htmlCollectionItem(collection, @intCast(i)); + for (nodes) |node| { const element = parser.nodeToElement(node); // must have a name @@ -181,10 +180,7 @@ fn collectForm(form: *parser.Form, submitter_: ?*parser.ElementHTML, page: *Page submitter_included = true; } }, - else => { - log.warn(.web_api, "unsupported form element", .{ .tag = @tagName(tag) }); - continue; - }, + else => unreachable, } } @@ -297,6 +293,7 @@ test "Browser.FormData" { \\ \\ \\ + \\ }); defer runner.deinit(); @@ -356,6 +353,8 @@ test "Browser.FormData" { try runner.testCases(&.{ .{ "let form1 = document.getElementById('form1')", null }, + .{ "let input = document.createElement('input');", null }, + .{ "input.name = 'dyn'; input.value= 'dyn-v'; form1.appendChild(input);", null }, .{ "let submit1 = document.getElementById('s1')", null }, .{ "let f2 = new FormData(form1, submit1)", null }, .{ "acc = '';", null }, @@ -378,6 +377,7 @@ test "Browser.FormData" { \\mlt-2=water \\mlt-2=tea \\s1=s1-v + \\dyn=dyn-v }, }, .{}); }