TL;DR
- Formularer sender som standard data og reloader siden ved submit.
- Med
addEventListener("submit", ...)kan du reagere på indsendelsen. event.preventDefault()stopper standardadfærden.form.reset()nulstiller felterne bagefter.
Hvis du kun husker én ting: Når du håndterer en formular i JavaScript, så lyt på submit, stop standardadfærden og arbejd derefter videre.
Lyt efter formularens submit
Når du vil arbejde med formularen i JavaScript, starter du typisk sådan her:
const form = document.querySelector("form");Derefter kan du lytte efter formularens submit-event:
const form = document.querySelector("form");
form.addEventListener("submit", handleSubmit);Det betyder: “Når formularen bliver indsendt, så kør funktionen handleSubmit.”
Stop standardadfærden
En formular prøver normalt at sende data og opdatere siden. I moderne udvikling er det ofte ikke det, vi vil. Derfor bruger man preventDefault(). Så her stopper vi det, der normalt ville ske ved submit:
function handleSubmit(event) { event.preventDefault();}Så kan du selv bestemme, hvad der skal ske bagefter.
Nulstil formularen bagefter
Hvis øvelsen handler om at samle data op eller vise noget i et outputfelt, giver det ofte mening at rydde formularen til sidst:
function handleSubmit(event) { event.preventDefault();
// gør noget med data
form.reset();}Det gør også tydeligt, at handleSubmit() er formularens “arbejdsfunktion”: først stop, så håndtér, så nulstil.
Bonus: Fjern browserens indbyggede popup-vindue ved ugyldige felter
Hvis du har krav i HTML som required eller minlength, vil browseren som standard vise et popup-vindue, hvis brugeren prøver at indsende uden at opfylde kravene. Det kan du også stoppe med preventDefault(), så du kan vise din egen fejlbesked i stedet:
function cancelPopup(event) { // 1. undertryk browserens popup event.preventDefault(); // 2. sæt fokus på det første ugyldige felt form.querySelector(":user-invalid").focus();}
form.addEventListener("invalid", cancelPopup, true);Øvelser
Her træner du ovenstående flows: