Skip to content

form

Los formularios son una parte importante de la web. Nos permiten enviar datos al servidor para que este los procese y nos devuelva una respuesta.

La etiqueta <form> nos permite agrupar inputs y enviar su resultado al servidor.

html
<form action="https://www.google.com/search" method="GET">
    <input type="text" name="q">
    <input type="submit" value="Buscar">
</form>
<form action="https://www.google.com/search" method="GET">
    <input type="text" name="q">
    <input type="submit" value="Buscar">
</form>

Atributos

action

El atributo action nos permite indicar la URL a la que se enviarán los datos del formulario.

method

El atributo method nos permite indicar el método HTTP que se usará para enviar los datos del formulario. Los métodos más comunes son GET y POST.

target

El atributo target nos permite indicar en qué ventana se abrirá la respuesta del servidor. Los valores más comunes son _blank y _self.

autocomplete

El atributo autocomplete nos permite indicar si el navegador debe completar automáticamente los campos del formulario. Los valores más comunes son on y off.

enctype

El atributo enctype nos permite indicar el tipo de codificación que se usará para enviar los datos del formulario. Las codificaciones más comunes son application/x-www-form-urlencoded cuando se envían datos de texto, multipart/form-data cuando se envían archivos (imágenes, videos, etc) o text/plain cuando se envían datos de texto sin formato.

Submit

Los formularios tienen un botón de tipo submit que nos permite enviar los datos del formulario al servidor.

html
<form action="https://www.google.com/search" method="GET">
    <input type="text" name="q">
    <input type="submit" value="Buscar">
</form>
<form action="https://www.google.com/search" method="GET">
    <input type="text" name="q">
    <input type="submit" value="Buscar">
</form>

Cuando hacemos submit se lanza un evento submit que podemos capturar desde JavaScript. Este evento tambien se lanza cuando el usuario usa la tecla Enter para enviar el formulario.

js
const form = document.querySelector('form');

form.addEventListener('submit', (event) => {
    event.preventDefault();
    //haz algo con tu formulario
    console.log('Formulario enviado');
});
const form = document.querySelector('form');

form.addEventListener('submit', (event) => {
    event.preventDefault();
    //haz algo con tu formulario
    console.log('Formulario enviado');
});

FormData

El objeto FormData nos permite acceder a los datos de un formulario desde JavaScript.

html
<form action="/usuarios" method="POST">
  <label for="usuario">Usuario</label>
  <input type="text" name="usuario">
  
  <label for="password">Password</label>
  <input type="password" name="password">
  
  <input type="submit">
</form>
<form action="/usuarios" method="POST">
  <label for="usuario">Usuario</label>
  <input type="text" name="usuario">
  
  <label for="password">Password</label>
  <input type="password" name="password">
  
  <input type="submit">
</form>
js
const form = document.querySelector('form');

form.addEventListener('submit', (event) => {
    event.preventDefault();
    const formData = new FormData(form);
    console.log(formData.get('q'));
});
const form = document.querySelector('form');

form.addEventListener('submit', (event) => {
    event.preventDefault();
    const formData = new FormData(form);
    console.log(formData.get('q'));
});

DataForm sólo funciona con inputs que tengan un atributo name, si un input no tiene un atributo name no se incluirá en el objeto FormData.

Para enviar un formulario con JavaScript podemos usar el método submit().

js
const form = document.querySelector('form');

form.addEventListener('submit', (event) => {
    event.preventDefault();
    const formData = new FormData(form);
    console.log(formData.get('q'));
    form.submit();
});
const form = document.querySelector('form');

form.addEventListener('submit', (event) => {
    event.preventDefault();
    const formData = new FormData(form);
    console.log(formData.get('q'));
    form.submit();
});

O nuestros propios métodos fetch() o XMLHttpRequest().

js
const form = document.querySelector('form');

form.addEventListener('submit', (event) => {
    event.preventDefault();
    const formData = new FormData(form);
    console.log(formData.get('q'));
    fetch(form.action, {
        method: form.method,
        body: formData
    });
});
const form = document.querySelector('form');

form.addEventListener('submit', (event) => {
    event.preventDefault();
    const formData = new FormData(form);
    console.log(formData.get('q'));
    fetch(form.action, {
        method: form.method,
        body: formData
    });
});