Skip to content

Instantly share code, notes, and snippets.

@iamspark1e
Last active October 30, 2023 06:00
Show Gist options
  • Select an option

  • Save iamspark1e/d4f7968c0c4ef8933c09ec02560cd7d6 to your computer and use it in GitHub Desktop.

Select an option

Save iamspark1e/d4f7968c0c4ef8933c09ec02560cd7d6 to your computer and use it in GitHub Desktop.
Javascript Form Serialize with pure JS, modified from "https://code.google.com/archive/p/form-serialize/"
function serialize(form, hashmode) {
if (!form || form.nodeName !== "FORM") {
return
}
var i, j, q = [];
var hashmap = {};
for (i = form.elements.length - 1; i >= 0; i = i - 1) {
if (form.elements[i].name === "") {
continue
}
switch (form.elements[i].nodeName) {
case 'INPUT':
switch (form.elements[i].type) {
case 'text':
case 'hidden':
case 'password':
case 'button':
case 'reset':
case 'submit':
q.push(form.elements[i].name + "=" + encodeURIComponent(form.elements[i].value));
hashmap[form.elements[i].name] = form.elements[i].value;
break;
case 'checkbox':
if (form.elements[i].checked) {
q.push(form.elements[i].name + "[]=" + encodeURIComponent(form.elements[i].value));
// hashmap[form.elements[i].name] = form.elements[i].value
if(hashmap[form.elements[i].name]) {
hashmap[form.elements[i].name].push(form.elements[i].value)
} else {
hashmap[form.elements[i].name] = [form.elements[i].value]
}
}
break;
case 'radio':
if (form.elements[i].checked) {
q.push(form.elements[i].name + "=" + encodeURIComponent(form.elements[i].value));
hashmap[form.elements[i].name] = form.elements[i].value
}
break;
case 'file':
break
}
break;
case 'TEXTAREA':
q.push(form.elements[i].name + "=" + encodeURIComponent(form.elements[i].value));
hashmap[form.elements[i].name] = form.elements[i].value;
break;
case 'SELECT':
switch (form.elements[i].type) {
case 'select-one':
q.push(form.elements[i].name + "=" + encodeURIComponent(form.elements[i].value));
hashmap[form.elements[i].name] = form.elements[i].value;
break;
case 'select-multiple':
for (j = form.elements[i].options.length - 1; j >= 0; j = j - 1) {
if (form.elements[i].options[j].selected) {
q.push(form.elements[i].name + "=" + encodeURIComponent(form.elements[i].options[j].value));
hashmap[form.elements[i].name] = form.elements[i].value
}
}
break
}
break;
case 'BUTTON':
switch (form.elements[i].type) {
case 'reset':
case 'submit':
case 'button':
q.push(form.elements[i].name + "=" + encodeURIComponent(form.elements[i].value));
hashmap[form.elements[i].name] = form.elements[i].value;
break
}
break
}
}
if (hashmode) return hashmap;
return q.join("&")
}
function serialize(e,s){if(e&&"FORM"===e.nodeName){var n,t,l=[],m={};for(n=e.elements.length-1;n>=0;n-=1)if(""!==e.elements[n].name)switch(e.elements[n].nodeName){case"INPUT":switch(e.elements[n].type){case"text":case"hidden":case"password":case"button":case"reset":case"submit":l.push(e.elements[n].name+"="+encodeURIComponent(e.elements[n].value)),m[e.elements[n].name]=e.elements[n].value;break;case"checkbox":e.elements[n].checked&&(l.push(e.elements[n].name+"[]="+encodeURIComponent(e.elements[n].value)),m[e.elements[n].name]?m[e.elements[n].name].push(e.elements[n].value):m[e.elements[n].name]=[e.elements[n].value]);break;case"radio":e.elements[n].checked&&(l.push(e.elements[n].name+"="+encodeURIComponent(e.elements[n].value)),m[e.elements[n].name]=e.elements[n].value)}break;case"TEXTAREA":l.push(e.elements[n].name+"="+encodeURIComponent(e.elements[n].value)),m[e.elements[n].name]=e.elements[n].value;break;case"SELECT":switch(e.elements[n].type){case"select-one":l.push(e.elements[n].name+"="+encodeURIComponent(e.elements[n].value)),m[e.elements[n].name]=e.elements[n].value;break;case"select-multiple":for(t=e.elements[n].options.length-1;t>=0;t-=1)e.elements[n].options[t].selected&&(l.push(e.elements[n].name+"="+encodeURIComponent(e.elements[n].options[t].value)),m[e.elements[n].name]=e.elements[n].value)}break;case"BUTTON":switch(e.elements[n].type){case"reset":case"submit":case"button":l.push(e.elements[n].name+"="+encodeURIComponent(e.elements[n].value)),m[e.elements[n].name]=e.elements[n].value}}return s?m:l.join("&")}}
@iamspark1e

Copy link
Copy Markdown
Author

2023.10.30 adapt same name multi-checkbox.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment