El evento submit se activa cuando el formulario es enviado, normalmente se utiliza para validar el formulario antes de ser enviado al servidor o bien para abortar el envío y procesarlo con JavaScript.
El método form.submit() permite iniciar el envío del formulario mediante JavaScript. Podemos utilizarlo para crear y enviar nuestros propios formularios al servidor.
Veamos más detalles sobre ellos.
Evento: submit
Mayormente un formulario puede enviarse de dos maneras:
- La primera – Haciendo click en
<input type="submit">o en<input type="image">. - La segunda – Pulsando la tecla Enter en un campo del formulario.
Ambas acciones causan que el evento submit sea activado en el formulario. El handler puede comprobar los datos, y si hay errores, mostrarlos e invocar event.preventDefault(), entonces el formulario no será enviado al servidor.
En el formulario de abajo:
- Ve al campo tipo texto y pulsa la tecla Enter.
- Haz click en
<input type="submit">.
Ambas acciones muestran alert y el formulario no es enviado debido a la presencia de return false:
<form onsubmit="alert('submit!');return false">
Primero: Enter en el campo de texto <input type="text" value="texto"><br>
Segundo: Click en "submit": <input type="submit" value="Submit">
</form>
submit y clickCuando un formulario es enviado utilizando Enter en un campo tipo texto, un evento click se genera en el <input type="submit">
Muy curioso, dado que no hubo ningún click en absoluto.
Aquí esta la demo:
<form onsubmit="return false">
<input type="text" size="30" value="Sitúa el cursor aquí y pulsa Enter">
<input type="submit" value="Submit" onclick="alert('click')">
</form>
Método: submit
Para enviar un formulario al servidor manualmente, podemos usar form.submit().
Entonces el evento submit no será generado. Se asume que si el programador llama form.submit(), entonces el script ya realizó todo el procesamiento relacionado.
A veces es usado para crear y enviar un formulario manualmente, como en este ejemplo:
let form = document.createElement('form');
form.action = 'https://google.com/search';
form.method = 'GET';
form.innerHTML = '<input name="q" value="test">';
// el formulario debe estar en el document para poder enviarlo
document.body.append(form);
form.submit();
Comentarios
<code>, para varias líneas – envolverlas en la etiqueta<pre>, para más de 10 líneas – utilice una entorno controlado (sandbox) (plnkr, jsbin, codepen…)