Extract and set form values through the DOM—no frameworks required! https://github.com/TheoryOfNekomata/formxtra
No puede seleccionar más de 25 temas Los temas deben comenzar con una letra o número, pueden incluir guiones ('-') y pueden tener hasta 35 caracteres de largo.
 
 
 
TheoryOfNekomata 203f09d7cc Update README links hace 1 año
cypress Cover all input types hace 1 año
docs Update README hace 1 año
src Update documentation hace 1 año
.eslintrc Switch to pridepack, add setFormValues hace 1 año
.gitignore Add coverage reporting hace 1 año
.npmignore Add coverage reporting hace 1 año
.prettierrc Separate prettierrc hace 3 años
LICENSE Switch to pridepack, add setFormValues hace 1 año
README.md Update README links hace 1 año
cypress.json Add support for multiple values hace 1 año
package.json Update README hace 1 año
pridepack.json Switch to pridepack, add setFormValues hace 1 año
publish.sh Update usage notes, prepare for publishing hace 3 años
test-globals.js Switch to pridepack, add setFormValues hace 1 año
tsconfig.eslint.json Update tsconfig hace 1 año
tsconfig.json Update tsconfig hace 1 año
vitest.config.js Switch to pridepack, add setFormValues hace 1 año
yarn.lock Add coverage reporting hace 1 año

README.md

formxtra

The companion for Web forms!

Extract and set form values through the DOM—no frameworks required!
Lightweight. Simple. It Just Works.

Installation and Sources

The package can be found on:

The package sources can be found on the main Modal Code repository with an active GitHub mirror.

Usage

  1. Lay out your input elements (all valid input types supported including <select> and <textarea>) then bind them to a form:
    • Put them inside a <form>.
    • Alternatively, use the form="" attribute then specify the form id where they will be bound.
  2. Add name="" attributes to your input elements.
  3. Get your <form> element:
    • Query the form directly.
    • If you want to retrieve/set the form values through an individual input element (e.g. in the case of value change events like onchange), use the inputElement.form attribute.
  4. Use getFormValues() to retrieve all bound input elements’ values, or setFormValues() to set them (setting only some fields’ values is supported).

Example

Interactive code samples can be found on Codepen:

For an example form:

<form id="loginForm" aria-label="Login Form">
  <button id="autofill" type="button">
    Autofill login form (username: admin, remember: true)
  </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';

const form: HTMLFormElement = document.getElementById('loginForm');

const processResponse = async (response: Response) => {
  const result = await response.json();

  alert(`Welcome ${result.user}!`);
};

// Use formxtra in 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);
    return;
  }
  
  alert('Invalid login!');
});

// 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 });
});

API

These are all the exported methods in the library:

import {
  getFormValues,
  setFormValues,
  getValue,
  isElementValueIncludedInFormSubmit,
  isFieldElement,
} from '@theoryofnekomata/formxtra';

One would usually need only the getFormValues() and setFormValues() functions, however if the utility functions are needed, the proper usages are documented via TSDoc comments.

Additional Information

The library has been tested on the static DOM using JSDOM, and the real dynamic DOM using Cypress. This is to guarantee compatibility across environments.

See the documentation folder for more details on this library.

The sources are under the MIT license.