Fra klik til submit

Opgavebeskrivelse

Ca. 6 minutter · Fokus: formularens submit-event.

Koden reagerer på et klik, selvom e-mailfeltet er tomt. Ret én linje, så handleSubmit først kører, når browseren har godkendt formularen.

  1. Klik på knappen med et tomt felt. Læg mærke til teksten click i previewet.
  2. Ret linjen under TODO: Lyt på formularen og dens submit-event. Bevar funktionen og preventDefault().
  3. Test igen med et tomt felt, hej og ida@example.com.
  4. Prøv også Enter, mens du står i det gyldige e-mailfelt.

Færdig når: Tomme og ugyldige værdier giver invalid; gyldige værdier giver submit, både med knappen og Enter. Siden bliver stående, og feltets værdi bevares.

Forklar til en makker: Hvad stopper preventDefault() i startkodens klik-handler, og hvad stopper den efter din rettelse?

Hint

Variablen form peger allerede på formularen. Du skal ændre to dele af den samme linje: elementet og eventtypen.

Forslag til løsning og forklaring

Erstat TODO-linjen med:

form.addEventListener("submit", handleSubmit)

Du kan nu fjerne den ubrugte button-variabel.

Startkoden stopper knappens standardhandling i click, så browseren slet ikke når frem til indsendelse og validering. Efter rettelsen kontrollerer browseren først required og type="email". Et ugyldigt felt udløser invalid, og formularen udløser ikke submit.

Når feltet er gyldigt, kører handleSubmit. Her stopper preventDefault() formularens normale indsendelse/navigation. Senere kan du læse data og kalde et API på dette sted.

Enter kan også aktivere en formulars standardknap. Øvelsens pointe er derfor valideringen og det rette event — ikke at en klik-handler aldrig kan reagere på Enter.

Læs om submit-eventet på MDN.

const form = document.querySelector("form")
const button = form.querySelector("button")
const email = form.querySelector("input")
const result = document.querySelector("#result")

function handleSubmit(event) {
  event.preventDefault()
  result.textContent = `${event.type}: Funktionen kørte.`
}

// TODO: Ret kun denne linje: Lyt på formularens submit.
button.addEventListener("click", handleSubmit)

// Event-loggen er givet. Browserens validering er stadig aktiv.
email.addEventListener("invalid", () => {
  result.textContent = "invalid: Ret e-mailfeltet, og prøv igen."
})
Preview

Et lille hint

element.addEventListener("eventtype", funktion)

Ét event · 6 minutter

Hvornår kører funktionen?

Prøv en e-mailadresse

Intet event endnu.