TheoryOfNekomata bc9b96b597 | há 3 anos | |
---|---|---|
cypress | há 3 anos | |
src | há 3 anos | |
test/utils | há 3 anos | |
.gitignore | há 3 anos | |
.npmignore | há 3 anos | |
LICENSE | há 3 anos | |
README.md | há 3 anos | |
cypress.json | há 3 anos | |
jest.config.js | há 3 anos | |
package.json | há 3 anos | |
publish.sh | há 3 anos | |
tsconfig.json | há 3 anos | |
yarn.lock | há 3 anos |
Extract form values through the DOM.
There are many ways to lay out forms.
The package can be found on:
For an example form:
<!-- ... -->
<form id="form">
<input type="text" name="username" />
<input type="password" name="password" />
<button type="submit" name="type" value="client">Log In As Client</button>
<button type="submit" name="type" value="admin">Log In As Admin</button>
</form>
<!-- ... --->
Use the library as follows (code is in TypeScript, but can work with JavaScript as well):
import getFormValues from '@theoryofnekomata/formxtr';
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<string, unknown>) => {
throw new Error('Not yet implemented.');
};
// Best use case is with event handlers
form.addEventListener('submit', async e => {
const { target: form, submitter } = e;
e.preventDefault();
const values = getFormValues(form, submitter);
// Get the form values and send as request to some API
const response = await fetch(
'https://example.com/api/log-in',
{
method: 'POST',
body: JSON.stringify(values),
headers: {
'Content-Type': 'application/json',
},
},
);
if (response.ok) {
const result = await response.json();
processResult(result);
}
})
The library has been tested on JSDOM through Jest, and the real DOM using Cypress.