L’evento submit si scatena quando il form viene inviato, e solitamente viene usato per validare il form prima dell’invio al server o per annullare l’invio e elaborarlo con JavaScript.
Il metodo form.submit() ci permette di iniziare l’invio del form da JavaScript. Possiamo usarlo per creare ed inviare i nostri form al server dinamicamente.
Andiamo più nel dettaglio.
Evento: submit
Ci sono due modi per inviare un form:
- Il primo – cliccare
<input type="submit">o<input type="image">. - Il secondo – premere Enter su un campo di input.
Entrambe le azioni portano all’evento submit del form. Il gestore può controllare i dati, ed in caso di errori, può mostrarli e chiamare event.preventDefault(), ed a quel punto il form non viene inviato al server.
Nel form seguente:
- Andare nel campo di testo e premere Enter.
- Cliccare
<input type="submit">.
Entrambe le azioni mostrano un alert ed il form non viene inviato da nessuna parte a causa di return false:
<form onsubmit="alert('submit!');return false">
Primo: Entrare nel campo di testo <input type="text" value="text"><br>
Secondo: Clicare "submit": <input type="submit" value="Submit">
</form>
submit and clickQuando un form viene inviato usando Enter su un campo di input, un evento click viene scaturito sull’elemento <input type="submit">.
Ciò è piuttosto divertente, dal momento che non c’è stato nessun click.
Ecco la demo:
<form onsubmit="return false">
<input type="text" size="30" value="Porre il focus qui e premere Invio">
<input type="submit" value="Submit" onclick="alert('click')">
</form>
Metodo: submit
Per eseguire l’invio (submit) di un form sul server manualmente, possiamo chiamare form.submit().
In questo caso l’evento di submit non viene generato. Si assume che il programmatore chiamando form.submit(), abbia previsto che nello script siano state considerate tutte le dovute elaborazioni.
Talvolta viene usato per creare ed inviare manualmente un form, come in questo esempio:
let form = document.createElement('form');
form.action = 'https://google.com/search';
form.method = 'GET';
form.innerHTML = '<input name="q" value="test">';
// il form deve essere nel documento per poterlo inviare
document.body.append(form);
form.submit();
Commenti
<code>, per molte righe – includile nel tag<pre>, per più di 10 righe – utilizza una sandbox (plnkr, jsbin, codepen…)