31 lines
807 B
TypeScript
31 lines
807 B
TypeScript
export default function (form: HTMLFormElement, hook?: (...args: ANY[]) => ANY) {
|
|
const result = {}
|
|
|
|
for (const element of form.elements as unknown as HTMLInputElement[]) {
|
|
const { checked, name, type, value } = element
|
|
|
|
if (
|
|
(!hook || !hook(result, name, value, element)) &&
|
|
name &&
|
|
value &&
|
|
(checked || (type !== 'checkbox' && type !== 'radio'))
|
|
) {
|
|
if (
|
|
type === 'range' &&
|
|
((element.dataset.lower && element.min === value) || (!element.dataset.lower && element.max === value))
|
|
)
|
|
continue
|
|
|
|
if (result[name]) {
|
|
const arr = Array.isArray(result[name]) ? result[name] : [result[name]]
|
|
arr.push(value)
|
|
result[name] = arr
|
|
} else {
|
|
result[name] = value
|
|
}
|
|
}
|
|
}
|
|
|
|
return result
|
|
}
|