Ik laat je zien: een formulier in HTML
Een formulier is een set velden waar de bezoeker in typt:
<form id="message-form">
<label for="name">Your name</label>
<input id="name" type="text" placeholder="Jake">
<label for="message">Message</label>
<textarea id="message" placeholder="Hi! You have an awesome website."></textarea>
<button type="submit">Send message</button>
</form>
<p id="confirmation"></p>
<form>wikkelt het hele formulier in.<input>is een veld op één regel,<textarea>is een veld op meerdere regels.<label>is het bijschrift van een veld – dankzijforenidhoren ze bij elkaar (klikken op het label springt naar het veld).placeholderis grijze hinttekst.- Een knop met
type="submit"verstuurt het formulier.
En wat CSS om het mooi te maken:
form {
display: flex;
flex-direction: column; /* fields stacked vertically */
gap: 8px;
max-width: 400px;
}
input, textarea {
font: inherit;
padding: 10px;
border: 1px solid #d6d3d1;
border-radius: 8px;
}
.error {
border-color: #dc2626 !important;
background-color: #fee2e2;
}
flex-direction: column draait flexbox van horizontaal naar verticaal: kinderen staan onder elkaar.
Ik laat je zien: controleren in JavaScript
const form = document.getElementById("message-form");
const name = document.getElementById("name");
const message = document.getElementById("message");
const confirmation = document.getElementById("confirmation");
form.addEventListener("submit", (event) => {
event.preventDefault(); // stop the normal submit (the page would reload)
// Clear old error marks
name.classList.remove("error");
message.classList.remove("error");
// Check that fields are filled in
if (name.value.trim() === "") {
name.classList.add("error");
confirmation.textContent = "You forgot your name. 🙂";
return;
}
if (message.value.trim() === "") {
message.classList.add("error");
confirmation.textContent = "So what do you want to tell me? Write something.";
return;
}
// Everything's fine
confirmation.textContent = "Thanks for the message, " + name.value + "! 💌";
form.reset(); // empty the fields
});
Nieuw:
submit– de gebeurtenis “het formulier wordt verstuurd.” We luisteren ernaar op het formulier, niet op de knop.event.preventDefault()– “doe niet wat je normaal zou doen.” Zonder dit zou de pagina verversen en krijgt ons script geen kans te draaien..value– wat er in het veld getypt is..trim()knipt spaties weg (dus ” ” telt als leeg!).return– verlaat de functie meteen (verder controleren heeft geen zin).
Waar gaat het bericht naartoe? Nog nergens – we hebben geen server om het te ontvangen. We controleren alleen het bericht en bedanken. Maar onthoud deze plek: in Level 3 bouwen we een echte server met een gastenboek en koppelen we dit formulier eraan. Dan worden berichten echt opgeslagen!
Nu jij 💪
Voeg een formulier toe aan je website dat bij je project past, met invoercontrole:
- 🏫 Een bericht voor de school – naam + bericht (net als het voorbeeld).
- 🙋 Schrijf naar mij – naam + bericht, voeg gerust een veld “je favoriete game” toe.
- 🌍 Reissuggestie – naam + “waar moeten we naartoe en waarom.”
- ⚽ Training aanmelden – naam + leeftijd (
<input type="number">) + controleer dat de leeftijd is ingevuld en minstens 6 is:if (age.value < 6) { ... }.
Een veiligheidsgewoonte van de professionals: vertrouw nooit wat een gebruiker typt. Controleer het altijd – een leeg veld, een onzinleeftijd, tekst die te lang is. Vandaag doe je het uit beleefdheid; in echte applicaties is het de eerste verdedigingslinie tegen aanvallers.
Controleer jezelf: Een leeg formulier versturen maakt het veld rood en toont een bericht. Een ingevuld formulier bedankt bij naam en leegt zichzelf. Beleefd, vriendelijk, professioneel.
Wat neem je mee uit deze les
- Een formulier:
<form>,<input>,<textarea>,<label>, en desubmit-gebeurtenis metpreventDefault(). .value.trim()= wat de gebruiker typte, zonder de spaties eromheen.- Gebruikersinvoer moet je altijd controleren – dat is de basis van veilig programmeren.
© 2026 Ing. Martin Polak / AlgoRhino · Contentgebruiksvoorwaarden