Skip to content

Instantly share code, notes, and snippets.

@Tom-Bonnike
Last active November 24, 2020 21:56
Show Gist options
  • Save Tom-Bonnike/e9e2c1af4499326874478b02588921a0 to your computer and use it in GitHub Desktop.
Save Tom-Bonnike/e9e2c1af4499326874478b02588921a0 to your computer and use it in GitHub Desktop.
Tiny form serialization helper
function serializeForm(form, urlEncode = false) {
const formData = new FormData(form);
if (urlEncode) {
const searchParams = new URLSearchParams(formData)
return searchParams.toString();
}
const serializedFormData = {};
// The code below casts `<select multiple>` and checkboxes values to array
// when more than one option is selected.
for (const [key, value] of formData) {
if (key in serializedFormData) {
const serializedValue = serializedFormData[key];
serializedFormData[key] = Array.isArray(serializedValue)
? [...serializedValue, value]
: [serializedValue, value];
continue;
}
serializedFormData[key] = value;
}
return serializedFormData;
};
document.getElementById("form").addEventListener("submit", event => {
event.preventDefault();
const formData = serializeForm(event.target);
console.log(formData);
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment