# formxtra _(read "form extra")_ Extract form values through the DOM. ## Motivation Forms are used to package related data, typically sent to an external location or processed internally. In the browser, the default behavior of submitting form data is not always preferred, as this is done through loading a document, typically the same document, as soon as the form is submitted. In addition, [applications have limited control over how the data are formatted on submission](https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#dom-fs-enctype) with this approach. This is why the new way of sending form data is done through AJAX/fetch requests, wherein the data are serialized into formats like JSON. To turn form data into a specific format requires access to the elements holding the values to each field in the form. Some libraries for extracting form values query field elements in the DOM, which is inefficient since they need to traverse the DOM tree in some way, using methods such as `document.getElementsByTagName()` and `document.querySelector()`. Upon retrieving the field values somehow, some libraries attempt to duplicate the values of the fields as they change, for instance by attaching event listeners and storing the new values into some internal object or map, which can be retrieved by some other exposed function. With `formxtra`, there is no need to traverse the DOM for individual fields to get their values. Provided the fields are associated to the form (either as a descendant of the `
``` Use the library as follows (code is in TypeScript, but can work with JavaScript as well): ```typescript import getFormValues from '@theoryofnekomata/formxtra'; const form: HTMLFormElement = document.getElementById('form'); // optional, but just in case there are multiple submit buttons in the form, // individual submitters can be considered const submitter = form.querySelector('[type="submit"][name="type"][value="client"]'); const values = getFormValues(form, { submitter }); const processResult = (result: Record