Skip to content

Instantly share code, notes, and snippets.

@apla
Created July 25, 2015 08:39
Show Gist options
  • Save apla/17309db9417d7e975447 to your computer and use it in GitHub Desktop.
Save apla/17309db9417d7e975447 to your computer and use it in GitHub Desktop.
form fields manipulation
function setFormFields (formEl, fieldsData) {
for (var i = 0; i < formEl.elements.length; i ++) {
var formField = formEl.elements[i];
if (!(formField.name in fieldsData)) {
continue;
}
// TODO: multiple checkboxes value for one form field
if (formField.type === 'radio' || formField.type === 'checkbox') {
if (
formField.value === fieldsData[formField.name]
|| formField.value === fieldsData[formField.name].toString()
) {
formField.checked = true;
}
} else {
formField.value = fieldsData[formField.name];
}
}
}
function bindFormToData (formEl, formData) {
[].slice.apply (formEl.elements).forEach (function (el) {
if (el.type.match (/^(?:radio|checkbox)$/)) {
el.addEventListener ('change', getFormFields.bind (window, formEl, formData), false);
} else {
el.addEventListener ('input', getFormFields.bind (window, formEl, formData), false);
}
});
}
function getFormFields (formEl, formData) {
formData = formData || {};
for (var k in formData) {
delete formData[k];
}
for (var i = 0; i < formEl.elements.length; i ++) {
var formField = formEl.elements[i];
var checkedType = formField.type.match (/^(?:radio|checkbox)$/);
if ((checkedType && formField.checked) || !checkedType) {
formData[formField.name] = formField.value;
}
}
// console.log (formData);
return formData;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment