Skip to main content

JS - (DOM2)

1 Formulieren en invoer met JavaScript

🎯 Leerdoelen

  • Je weet hoe je gegevens uit een formulier leest met JavaScript.
  • Je kunt reageren op een submit-event.
  • Je weet wat preventDefault() doet en waarom je het gebruikt.

đź’ˇ Uitleg

Formulieren worden normaal automatisch verstuurd, waarbij de pagina ververst.automatisch Maarververst. Dat is standaard zo in HTML, maar soms wil je dat niet. Dan kan je in JavaScript kun je het formulier ook “afhandelen” zonder dat de pagina opnieuw laadt.ververst.

Dat doe je door te luisteren naar het submit-event en vervolgens preventDefault() te gebruiken om het standaardgedrag tegen te houden.

Wat is het submit-event?

Het submit-event wordt getriggerd als je een formulier probeert te versturen, bijvoorbeeld door op een knop te klikken of op Enter te drukken in een veld. Je kunt dan JavaScript laten reageren op dat moment.

Wat doet preventDefault()?

Deze functie voorkomt dat het formulier echt verzonden wordt en de pagina herlaadt. Daardoor kun je de gegevens gebruiken in JavaScript zonder dat alles verdwijnt.

Voorbeeldformulier:

<form id="mijnForm">
  <input type="text" id="naam" placeholder="Typ je naam">
  <button type="submit">Verstuur</button>
</form>

<div id="resultaat"></div>

<script>
  document.getElementById("mijnForm").addEventListener("submit", function(e) {
    e.preventDefault(); // voorkomt verversen
    const naam = document.getElementById("naam").value;
    document.getElementById("resultaat").textContent = "Hallo " + naam + "!";
  });
</script>

🛠️ Opdracht – Formulier verwerken

  1. Maak een bestand dom8.html.
  2. Voeg een formulier toe met een tekstveld voor een bericht en een verstuurknop.
  3. Laat het formulier bij klikken niet verversen door preventDefault() te gebruiken.
  4. Laat het ingevoerde bericht onder het formulier verschijnen in een <p>-element.
  5. Bonus: Voeg meerdere berichten toe onder elkaar (zoals een eenvoudige chatgeschiedenis).
  6. Extra bonus: Voeg een tweede input toe voor een gebruikersnaam en laat “Naam zegt: Bericht” zien.

đź§  Reflectie

  • Wat doet preventDefault() en waarom gebruik je het?
  • Wat is het verschil tussen een click-event en een submit-event?
  • Hoe lees je de waarde van een inputveld?

📤 Inleveren

  • Lever je bestand dom8.html in.
  • Beantwoord de reflectievragen in een .txt of .pdf bestand en lever die ook in.

2 Gegevens bewaren met localStorage

🎯 Leerdoelen

  • Je weet wat localStorage is en wanneer je het gebruikt.
  • Je kunt gegevens opslaan in de browser.
  • Je kunt opgeslagen gegevens bij het laden van de pagina weer tonen.

đź’ˇ Uitleg

localStorage is een opslagruimte in de browser. Alles wat je daarin zet, blijft bewaard – ook als je de pagina sluit of opnieuw opent.

Je gebruikt het bijvoorbeeld zo:

// Iets opslaan
localStorage.setItem("naam", "Ali");

// Iets ophalen
const naam = localStorage.getItem("naam");

// Iets verwijderen
localStorage.removeItem("naam");

Let op: je kunt alleen strings opslaan. Wil je een lijst opslaan? Gebruikopslaan, dan moet je van een lijst een string maken dat kan met  JSON.stringify() en JSON.parse():

const lijst = ["bananen", "appels"];
localStorage.setItem("boodschappen", JSON.stringify(lijst));

const terug = JSON.parse(localStorage.getItem("boodschappen"));
console.log(terug); // ["bananen", "appels"]

JSON.stringify() gebruik je om een array om te zetten in een (JSON) string: array -> JSON

JSON.parse() gebruik je om een (JSON) string weer om te zetten in een array: JSON -> array

Waarom moet je JSON gebruiken bij lijsten?

(denk hier eerst zelf over na voordat je hert antwoord open klikt)

Waarom moet je JSON gebruiken bij lijsten?

In localStorage kun je alleen tekst (strings) opslaan. Als je probeert een lijst of object direct op te slaan, krijg je [object Object] of een fout.

Met JSON.stringify() verander je een array in een string die opgeslagen kan worden.

Als je de lijst later weer wilt gebruiken, gebruik je JSON.parse() om hem terug te veranderen naar een echte array.

🛠️ Opdracht – Opslaan wat je invult

  1. Maak een bestand dom9.html.
  2. Maak een invoerveld waar de gebruiker een hobby, taak of naam kan invullen.
  3. Als de gebruiker iets toevoegt, verschijnt het in een lijst op de pagina.
  4. De lijst moet bewaard blijven via localStorage zodat deze zichtbaar blijft bij herladen.
  5. Bonus: Voeg een knop toe om alles te wissen (via localStorage.clear()).

Tips:

  • Lees bij het laden van de pagina eerst de gegevens uit localStorage.
  • Update localStorage telkens als je iets toevoegt of verwijdert.

đź§  Reflectie

  • Wat is het voordeel van localStorage?
  • Waarom moet je JSON gebruiken bij het opslaan van lijsten?
  • Wat gebeurt er als je JSON.stringify() vergeet bij het opslaan van een array?
  • Wat zou je nog meer kunnen opslaan in een webapp?

📤 Inleveren

  • Lever je bestand dom9.html in via Teams of Canvas.
  • Beantwoord de reflectievragen in een .txt of .pdf bestand en lever die ook in.
  • Toon in een screenshot dat je lijst bewaard blijft bij herladen.

3 Gegevens ophalen met fetch()

🎯 Leerdoelen

  • Je weet wat fetch() doet in JavaScript.
  • Je kunt externe gegevens ophalen en tonen op een webpagina.
  • Je begrijpt hoe je met JSON-data werkt en deze verwerkt met de DOM.

đź’ˇ Uitleg

Met fetch() kun je gegevens ophalen van een externe bron zoals een API. Vaak krijg je dan JSON-data terug: een soort tekstversie van een JavaScript-object of array.

Een API is een soort digitale service waarmee programma's informatie kunnen opvragen of sturen. Denk aan een digitale menukaart: je vraagt iets op, en krijgt data terug.

Een voorbeeld:

fetch("https://jsonplaceholder.typicode.com/users")
  .then(response => response.json())
  .then(data => {
    console.log(data); // Hier kun je nu iets mee doen
  });

Je kunt daarna bijvoorbeeld een lijst maken van namen:

fetch("https://jsonplaceholder.typicode.com/users")
  .then(res => res.json())
  .then(users => {
    users.forEach(user => {
      const p = document.createElement("p");
      p.textContent = user.name;
      document.body.appendChild(p);
    });
  });

🛠️ Opdracht – Externe gebruikerslijst

  1. Maak een bestand dom10.html.
  2. Haal gegevens op van https://jsonplaceholder.typicode.com/users.
  3. Laat van elke gebruiker de naam en e-mailadres zien in de browser.
  4. Maak van elke gebruiker een eigen <div> of <li>.
  5. Bonus: laat de gegevens pas zien als je op een knop “Laad gebruikers” hebt geklikt.

Extra uitdaging:

  • Voeg bij elk item een knop “verwijder” toe waarmee dat item uit de DOM verdwijnt.
  • Toon een "laden..." bericht terwijl de gegevens worden opgehaald.

đź§  Reflectie

  • Wat doet fetch() precies?
  • Wat is een API, en wat kun je ermee?
  • Wat zou een risico zijn als je data van andere websites gebruikt?
  • Wat gebeurt er als de API niet beschikbaar is of een fout geeft?

📤 Inleveren

  • Lever je bestand dom10.html in via Teams of Canvas.
  • Beantwoord de reflectievragen in een .txt of .pdf bestand.
  • Lever een screenshot aan waarop de opgehaalde gebruikers zichtbaar zijn in je browser.

4 Lijsten filteren op basis van invoer

🎯 Leerdoelen

  • Je weet hoe je gebruikersinvoer gebruikt om iets te filteren.
  • Je kunt elementen verbergen of tonen met JavaScript.
  • Je past een input-event toe om live te reageren.

đź’ˇ Uitleg

Je kunt met JavaScript elementen tonen of verbergen op basis van wat de gebruiker intypt.

Voorbeeld – een zoekveld dat een lijst filtert:

<input type="text" id="zoekveld" placeholder="Zoek een dier...">

<ul id="dierenlijst">
  <li>Hond</li>
  <li>Kat</li>
  <li>Papegaai</li>
  <li>Vogelbekdier</li>
</ul>

<script>
  const zoekveld = document.getElementById("zoekveld");
  const items = document.querySelectorAll("#dierenlijst li");

  zoekveld.addEventListener("input", function() {
    const tekst = zoekveld.value.toLowerCase();
    items.forEach(function(item) {
      const inhoud = item.textContent.toLowerCase();
      item.style.display = inhoud.includes(tekst) ? "list-item" : "none";
    });
  });
</script>

🛠️ Opdracht – Live filter maken

  1. Maak een bestand dom11.html.
  2. Voeg een lijst toe met minstens 10 items (bijv. landen, games, fruitsoorten).
  3. Voeg een zoekveld toe boven de lijst.
  4. Laat de lijst automatisch filteren terwijl je typt.
  5. Bonus: maak de zoekopdracht hoofdletterongevoelig en toon “Geen resultaten gevonden” als niets matcht.

đź§  Reflectie

  • Wat gebeurt er bij het input-event?
  • Hoe kun je ervoor zorgen dat je filter hoofdletterongevoelig is?
  • Wat zou je nog kunnen verbeteren aan deze zoekfunctie?

📤 Inleveren

  • Lever je bestand dom11.html in via Teams of Canvas.
  • Beantwoord de reflectievragen in een .txt of .pdf bestand en lever die ook in.