Fra name til FormData

Opgavebeskrivelse

Ca. 6 minutter · Fokus: FormData bruger feltets name.

Formularens submit-handler og visningen er færdige. Læs den indtastede e-mailadresse med FormData. Alt foregår lokalt i previewet.

  1. Erstat const email = "" med to linjer: Opret data med new FormData(form), og hent e-mailværdien med data.get(...).
  2. Skriv ida@example.com, og tryk på Læs værdien. Prøv derefter med en anden adresse.
  3. Åbn HTML-fanen, og fjern kun name="email". Indtast en gyldig adresse igen, hvis previewet er nulstillet, og indsend. Hvad viser resultatet nu?
  4. Gendan name="email", og kontrollér at værdien igen bliver læst.

Færdig når: Resultatet følger den indtastede værdi. Uden name viser det null, selvom feltet stadig har sit id og en fungerende label.

Forklar til en makker: Hvorfor læser vi email, når feltets id er contact-email?

Hint

new FormData(form) aflæser formularens aktuelle værdier. Argumentet til .get() skal matche feltets name, ikke dets id.

Forslag til løsning

Erstat TODO-linjen med:

const data = new FormData(form)
const email = data.get("email")

id="contact-email" forbinder feltet med labelens for. name="email" giver værdien dens nøgle i formulardata. .get() returnerer null, hvis nøglen ikke findes.

Ekstra: Navngiv værdien på ny

Skift name="email" til name="contactEmail". Forudsig resultatet, og prøv det. Ret derefter kun argumentet til .get(), så aflæsningen virker igen. Labelens for og feltets id skal blive stående.

Læs om FormData.get() på MDN.

const form = document.querySelector("form")
const result = document.querySelector("#result")

function handleSubmit(event) {
  event.preventDefault()

  // TODO: Opret FormData fra form, og læs feltet med name="email".
  const email = ""

  // Visningen er givet. JSON.stringify gør også null synlig.
  result.textContent = `Aflæst værdi: ${JSON.stringify(email)}`
}

form.addEventListener("submit", handleSubmit)
Preview

Et lille hint

data.get("feltets-name")

Ét felt · 6 minutter

Læs formularens værdi

Prøv en e-mailadresse

Ingen værdi aflæst endnu.