From 3ec84e36d5d664da46804575c89d0836cc975a81 Mon Sep 17 00:00:00 2001 From: Iain Buclaw Date: Tue, 4 Jun 2024 01:19:25 +0200 Subject: [PATCH] 16293 fix form data handler deleting checkbox data In NetBox, formData may have multiple values associated with a given key (see netbox/templates/django/forms/widgets/checkbox.html). So instead of a for loop over all formData.entries(), retrieve all values using formData.getAll(), delete all keys from formData, then append all non-empty values back in. --- netbox/project-static/src/netbox.ts | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/netbox/project-static/src/netbox.ts b/netbox/project-static/src/netbox.ts index 59faab222..bdeb4afbb 100644 --- a/netbox/project-static/src/netbox.ts +++ b/netbox/project-static/src/netbox.ts @@ -42,9 +42,15 @@ function initWindow(): void { if (documentForm.method.toUpperCase() == 'GET') { documentForm.addEventListener('formdata', function (event: FormDataEvent) { const formData: FormData = event.formData; - for (const [name, value] of Array.from(formData.entries())) { - if (value === '') formData.delete(name); - } + // formData may have multiple values associated with a given key + // (see netbox/templates/django/forms/widgets/checkbox.html). + for (const name of Array.from(new Set(formData.keys()))) { + const values = formData.getAll(name); + formData.delete(name); + values.forEach(value => { + if (value !== '') formData.append(name, value) + }); + } }); } }