From e86338c90d530b57b102a612d1011dcd7867889c Mon Sep 17 00:00:00 2001 From: AndrewGit25 Date: Tue, 18 Aug 2026 20:54:06 -0500 Subject: [PATCH 1/3] fix: append array items individually in __addInputValues --- src/htmx.js | 4 ++++ test/tests/unit/__collectFormData.js | 10 ++++++++++ 2 files changed, 14 insertions(+) diff --git a/src/htmx.js b/src/htmx.js index 485087a62..82a61a954 100644 --- a/src/htmx.js +++ b/src/htmx.js @@ -1835,6 +1835,10 @@ var htmx = (() => { for (let option of input.selectedOptions) { formData.append(name, option.value); } + } else if (Array.isArray(input.value)) { + for (let v of input.value) { + formData.append(name, v); + } } else { formData.append(name, input.value); } diff --git a/test/tests/unit/__collectFormData.js b/test/tests/unit/__collectFormData.js index 64fb10c39..7111952d0 100644 --- a/test/tests/unit/__collectFormData.js +++ b/test/tests/unit/__collectFormData.js @@ -286,4 +286,14 @@ describe('__collectFormData unit tests', function() { assert.equal(files[0].name, 'file1.txt'); assert.equal(files[1].name, 'file2.txt'); }); + + it('collects element with array value as individual FormData items', function () { + let elt = createProcessedHTML('
'); + Object.defineProperty(elt, 'value', { + value: ['banana', 'apple'], + configurable: true + }); + let formData = htmx.__collectFormData(elt, null, null, false, false); + assert.deepEqual(formData.getAll('fruit'), ['banana', 'apple']); + }); }); \ No newline at end of file From 2b0261225deb7a7a1942fa93f7540621203cd22d Mon Sep 17 00:00:00 2001 From: AndrewGit25 Date: Tue, 18 Aug 2026 22:09:15 -0500 Subject: [PATCH 2/3] fix: filter null/undefined values in __addInputValues --- src/htmx.js | 6 ++++-- test/tests/unit/__collectFormData.js | 20 ++++++++++++++++++++ 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/src/htmx.js b/src/htmx.js index 82a61a954..f710d6cf8 100644 --- a/src/htmx.js +++ b/src/htmx.js @@ -1837,9 +1837,11 @@ var htmx = (() => { } } else if (Array.isArray(input.value)) { for (let v of input.value) { - formData.append(name, v); + if (v != null) { + formData.append(name, v); + } } - } else { + } else if (input.value != null) { formData.append(name, input.value); } } diff --git a/test/tests/unit/__collectFormData.js b/test/tests/unit/__collectFormData.js index 7111952d0..7f244671f 100644 --- a/test/tests/unit/__collectFormData.js +++ b/test/tests/unit/__collectFormData.js @@ -296,4 +296,24 @@ describe('__collectFormData unit tests', function() { let formData = htmx.__collectFormData(elt, null, null, false, false); assert.deepEqual(formData.getAll('fruit'), ['banana', 'apple']); }); + + it('filters out null or undefined values inside array', function () { + let elt = createProcessedHTML('
'); + Object.defineProperty(elt, 'value', { + value: ['banana', null, 'apple', undefined], + configurable: true + }); + let formData = htmx.__collectFormData(elt, null, null, false, false); + assert.deepEqual(formData.getAll('fruit'), ['banana', 'apple']); + }); + + it('skips element when value is null or undefined', function () { + let elt = createProcessedHTML('
'); + Object.defineProperty(elt, 'value', { + value: null, + configurable: true + }); + let formData = htmx.__collectFormData(elt, null, null, false, false); + assert.equal(formData.get('fruit'), null); + }); }); \ No newline at end of file From c8de26243a3045db4b7ba74295fb1fba4aacb833 Mon Sep 17 00:00:00 2001 From: AndrewGit25 Date: Tue, 18 Aug 2026 22:13:18 -0500 Subject: [PATCH 3/3] docs: add comment explaining array value collection --- src/htmx.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/htmx.js b/src/htmx.js index f710d6cf8..13b1e0e9a 100644 --- a/src/htmx.js +++ b/src/htmx.js @@ -1836,6 +1836,7 @@ var htmx = (() => { formData.append(name, option.value); } } else if (Array.isArray(input.value)) { + // Add all array values (e.g. custom elements) for (let v of input.value) { if (v != null) { formData.append(name, v);