TheoryOfNekomata 93fccb18f5 | 1 rok temu | |
---|---|---|
cypress | 1 rok temu | |
docs | 1 rok temu | |
src | 1 rok temu | |
.eslintrc | 1 rok temu | |
.gitignore | 1 rok temu | |
.npmignore | 1 rok temu | |
.prettierrc | 3 lat temu | |
LICENSE | 1 rok temu | |
README.md | 1 rok temu | |
cypress.json | 1 rok temu | |
package.json | 1 rok temu | |
pridepack.json | 1 rok temu | |
publish.sh | 3 lat temu | |
test-globals.js | 1 rok temu | |
tsconfig.eslint.json | 1 rok temu | |
tsconfig.json | 1 rok temu | |
vitest.config.js | 1 rok temu | |
yarn.lock | 1 rok temu |
Extract and set form values through the DOM—no frameworks required!
Lightweight. Simple. It Just Works.
The package can be found on:
<select>
and <textarea>
) then bind them
to a form:
<form>
.form=""
attribute then specify the form id
where they will be bound.name=""
attributes to your input elements.<form>
element:
onchange
), use the inputElement.form
attribute.getFormValues()
to retrieve all bound input elements’ values, or setFormValues()
to set them (setting only
some fields’ values is supported).For an example form:
<form id="loginForm" aria-label="Login Form">
<button id="autofill" type="button">
Autofill login form (username: admin)
</button>
<hr />
<fieldset>
<legend>
Login
</legend>
<div>
<input type="text" name="username" placeholder="Username" />
</div>
<div>
<input type="password" name="password" placeholder="Password" />
</div>
<div>
<button type="submit" name="type" value="client">
Log In As Client
</button>
<button type="submit" name="type" value="admin">
Log In As Admin
</button>
</div>
</fieldset>
</form>
<!-- Input elements can be placed outside the form element they are bound to. -->
<label>
<input type="checkbox" name="remember" form="loginForm" />
Remember my login credentials
</label>
Use the library as follows (code is in TypeScript, but can work with JavaScript as well):
import { getFormValues, setFormValues } from '@theoryofnekomata/formxtra';
// This is the only query we need. On libraries like React, we can easily get form elements when we
// attach submit event listeners.
const form: HTMLFormElement = document.getElementById('form');
const processResponse = async (response: Response) => {
const result = await response.json();
alert(`Welcome ${result.user}!`);
};
// Best use case is with event handlers
form.addEventListener('submit', async e => {
const {
currentTarget: thisForm,
submitter,
} = e;
e.preventDefault();
const values = getFormValues(thisForm, { 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) {
processResponse(response);
}
});
// You can use fomrxtra directly with elements as long as they are bound to a form.
const autofillButton = document.getElementById('autofill');
autofillButton.addEventListener('click', e => {
setFormValues(e.currentTarget.form, { username: 'admin', remember: true });
});
There are utility functions exported alongside getFormValues()
and setFormValues()
. You may want to use namespace
import with this library, i.e. import * as formxtra from '@theoryofnekomata/formxtra'
.
See the documentation folder for more details.
The library has been tested on the static DOM using JSDOM, and the real dynamic DOM using Cypress.