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 click
Cuando 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…)