Last active
October 9, 2018 14:54
-
-
Save Semdevmaster/c2229b9eb143ce02604fc6874a7e5542 to your computer and use it in GitHub Desktop.
get data from form element
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| export const isValidElement = element => { | |
| return element.name && (element.value || element.value === '') | |
| } | |
| export const isValidValue = element => { | |
| return (!['checkbox', 'radio'].includes(element.type) || element.checked) | |
| } | |
| export const isCheckbox = element => element.type === 'checkbox' | |
| export const isRadioButton = element => element.type === 'radio' | |
| export const isMultiSelect = element => element.options && element.multiple | |
| export const isSameName = element => !isCheckbox(element) && !isMultiSelect(element) && !isRadioButton(element) && element.form.elements[element.name].length | |
| export const getSelectValues = options => [].reduce.call(options, (values, option) => { | |
| return option.selected ? values.concat(option.value) : values | |
| }, []) | |
| export const dataToObject = elements => [].reduce.call(elements, (data, element) => { | |
| if (isValidElement(element) && isValidValue(element)) { | |
| if (isCheckbox(element)) { | |
| data[element.name] = (data[element.name] || []).concat(element.value) | |
| } else if (isMultiSelect(element)) { | |
| data[element.name] = getSelectValues(element) | |
| } | |
| else if (isSameName(element)) { | |
| data[element.name] = (data[element.name] || []).concat(element.value) | |
| } | |
| else { | |
| data[element.name] = element.value | |
| } | |
| } | |
| return data | |
| }, {}) | |
| /*example | |
| import * as CustomFormData from './customFormData.js' | |
| document.querySelector('#super-form').addEventListener('submit', (e) => { | |
| e.preventDefault() | |
| const data = CustomFormData.formToJSON(e.target.elements) | |
| axios({ | |
| method: 'put', | |
| headers: {'X-Requested-With': 'XMLHttpRequest'}, | |
| url: e.target.action, | |
| params: data | |
| }) | |
| }) | |
| */ |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment