Aanmelden

🟨JavaScript en jQuery

Maak je webpagina’s interactief: van alert() en variabelen tot functies, events, jQuery, een BMI-calculator en een rekenmachine. Met AJAX, foutafhandeling en klassen als uitbreiding. Je oefent in de browser: typ je code, klik op Uitvoeren en laat ze meteen nakijken.

Je bekijkt deze pagina niet aangemeld — je kan de oefeningen, het opzoekwerk en de zelftest-quiz pas openen na het aanmelden.
Aanmelden

Overzicht

Werk de onderdelen hieronder in je eigen tempo af: lees de uitleg, doe het opzoekwerk en sluit af met een quizje. Klik een onderdeel open om te starten.

Wat is JavaScript en waarom heeft elke interactieve website het nodig? Je schrijft je eerste script met alert(), leert waar een script-tag komt en hoe je commentaar en console.log() gebruikt.

Leerplandoelstellingen

In deze cursus (6IICT, Programmeer- en webtechnieken) werk je aan deze doelstellingen:

  • 95 – dataverwerking gebruiken;
  • 96 – controlestructuren gebruiken;
  • 97 – functies aanmaken;
  • 98 – een programma van de nodige foutafhandelingsprocedures voorzien;
  • 99 – het begrippenkader van object-georiënteerd programmeren toelichten;
  • 100 – een object van een klasse gebruiken;
  • 101 – een klasse creëren (D).
Wat is JavaScript?

In het vorige hoofdstuk (HTML + CSS) leerde je hoe je een webpagina maakt. Wanneer je naar andere websites kijkt, zie je dat ze meestal interactief zijn: automatisch scrollen, berekeningen die worden uitgevoerd, menu’s die openklappen … Om je pagina interactief te maken gebruik je JavaScript.

HTML
Structuur

Wat staat er op de pagina? Titels, tekst, knoppen, invoervelden.

CSS
Opmaak

Hoe ziet het eruit? Kleuren, lettertypes, marges.

JS
Gedrag

Wat gebeurt er als je klikt of typt? Rekenen, beslissen, de pagina aanpassen.

Omdat je vorig jaar al veel over programmeren leerde (Python, Arduino, Raspberry Pi …), beperken we ons in deze cursus tot wat je nodig hebt om zelf aan de slag te gaan en je weg te vinden op het internet om je website zo interactief mogelijk te maken.

2.1 Hello world

Maak een nieuwe pagina aan met de naam javascript.html. Wanneer je op die pagina terechtkomt, wil je een melding krijgen: “Hallo wereld!”. Daarvoor plaats je onder de body een <script>-tag. Binnen die tag gebruik je de functie alert(); om de browser een melding te laten geven.

javascript.html<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8" />
    <title>Mijn eerste JavaScript</title>
  </head>
  <body>
    <script>
      alert("Hallo wereld!");
    </script>
  </body>
</html>
Hoe werkt dit hier?

Op deze pagina draait je code in een afgeschermd kadertje. Omdat een echte pop-up daar geblokkeerd is, verschijnt de melding van alert() in een zwarte console onder het kadertje (met een 🔔 ervoor). Op je eigen website zie je de gewone pop-up.

Probeer het zelf: pas de tekst aan en klik op Uitvoeren.

✏️ Probeer zelf — pas de code aan en klik op Uitvoeren
Commentaar

Binnen je script kan je commentaar toevoegen: tekst die de browser negeert en die enkel voor jou (of je collega) bedoeld is. Commentaar van één lijn begint met //. Commentaar van meerdere lijnen zet je tussen /* en */.

✏️ Probeer zelf — pas de code aan en klik op Uitvoeren
console.log() en de ontwikkelaarstools

Naast alert() is er console.log(). Die toont niets aan de gebruiker maar schrijft in de console van je browser (druk op F12 of rechtsklik → Inspecteren → tabblad Console). Professionele programmeurs gebruiken console.log() voortdurend om te controleren wat hun code doet. Fouten in je script verschijnen ook in die console: kijk er dus altijd eerst!

✏️ Probeer zelf — pas de code aan en klik op Uitvoeren
Synthese
Onthoud
  • JavaScript zorgt voor het gedrag van je pagina; HTML is de structuur, CSS de opmaak.
  • Je schrijft JavaScript tussen <script> en </script>, liefst onderaan de body.
  • alert() toont een melding, console.log() schrijft in de console.
  • Commentaar: // één lijn en /* meerdere lijnen */.
🎯 Nu ben jij aan de beurt: 1 Inleiding en Hello world

Verwerk wat je hierboven las met de onderdelen hieronder. Ze horen bij deze theorie.

Een variabele is een doosje met een naam waarin je een waarde bewaart. Je leert getallen, tekst en booleans opslaan, de kleine verschillen met Python en hoe je het type controleert.

2.2 Variabelen

Net als in Python kan je in JavaScript werken met variabelen. Het verschil met sommige andere talen is dat je het type niet vooraf moet vastleggen: JavaScript detecteert het type automatisch. Een variabele maak je aan met het woord var.

// het getal 10 opslaan in variabele getal (integer)
var getal = 10;

// het getal 20.56 opslaan (float; met een punt, geen komma)
var kommagetal = 20.56;

// tekst opslaan in de variabele tekst
var tekst = "Dit is een stukje tekst";

// de boolean true opslaan in de variabele juist
var juist = true;
Puntkomma’s en aanhalingstekens
  • Achter elke actie zet je een ;. In principe hoeft dat niet meer, maar wij doen het toch: bij jQuery, PHP en AJAX is het wel belangrijk.
  • Elke tekst (string) staat tussen aanhalingstekens. Je mag enkele ('…') of dubbele ("…") gebruiken, maar niet door elkaar.
Een variabele tonen

Je kan de browser een variabele laten tonen met alert(). Let op: de variabele krijgt geen aanhalingstekens. Zet je er wel aanhalingstekens rond, dan toont JavaScript letterlijk de naam.

✏️ Probeer zelf — pas de code aan en klik op Uitvoeren
De naam van een variabele
  • Gebruik zinvolle namen: leeftijd, niet x1.
  • Een naam begint met een letter, _ of $, en bevat geen spaties of streepjes.
  • JavaScript is hoofdlettergevoelig: getal en Getal zijn verschillende variabelen.
  • Gebruik camelCase voor namen uit meerdere woorden: getalGegokt, uitkomstTekst.
  • Je kan een variabele later een nieuwe waarde geven: getal = 11; (zonder var opnieuw).
var, let en const

In dit boek gebruiken we var. In moderne code zie je vooral let (een variabele die kan veranderen) en const (een waarde die niet meer verandert). Ze werken voor jou hetzelfde; let en const hebben strengere regels over waar de variabele bestaat.

Getal of tekst? Het type telt

Het type van een waarde bepaalt wat een bewerking doet. Met typeof vraag je het type op. De belangrijkste types: number (getallen, ook kommagetallen), string (tekst), boolean (true of false), undefined (variabele zonder waarde) en object (later). Speel in de demo met + tussen tekst en getallen:

Probeer zelf: types

Voorspel eerst wat er in de console komt en controleer dan met Uitvoeren.

✏️ Probeer zelf — pas de code aan en klik op Uitvoeren
Synthese
Onthoud
  • Een variabele maak je met var naam = waarde;.
  • Types: number, string, boolean, undefined. Tekst staat tussen quotes, een variabele niet.
  • JavaScript is hoofdlettergevoelig.
  • typeof geeft het type; "15" + 5 geeft "155".
🎯 Nu ben jij aan de beurt: 2 Variabelen en datatypes

Verwerk wat je hierboven las met de onderdelen hieronder. Ze horen bij deze theorie.

Rekenen, toewijzen, vergelijken en logische bewerkingen: alles wat je nodig hebt om waarden te combineren en er een ja/nee-antwoord uit te halen.

2.3.1 Toewijzings- en rekenoperatoren

Met JavaScript voer je eenvoudige wiskundige berekeningen uit. De rekenoperatoren zijn + (optellen), − (aftrekken), * (vermenigvuldigen), / (delen) en % (de rest na deling, de modulo). Het =-teken is geen “is gelijk aan” maar een toewijzing: de waarde rechts wordt in de variabele links bewaard.

=
Toewijzen

x = 5; bewaart 5 in x.

+=
Verkorte schrijfwijze

x += 2; is x = x + 2;. Ook -=, *=, /=.

++
Ophogen

x++; is x = x + 1;. Omgekeerd: x--;.

%
Rest

17 % 5 geeft 2. Handig om te weten of een getal even is: x % 2 === 0.

Opdracht: voorspel eerst wat de browser bij elke alert() zal tonen. Voer daarna het script uit en controleer. Je antwoorden vul je onderaan het hoofdstuk in bij de oefening.

✏️ Probeer zelf — pas de code aan en klik op Uitvoeren
2.3.2 Vergelijkingsoperatoren

Met JavaScript vergelijk je ook getallen en tekst. Het resultaat van een vergelijking is altijd een boolean: true of false.

OperatorBetekent
===is gelijk aan en heeft hetzelfde type
!==is niet gelijk aan of heeft niet hetzelfde type
>is groter dan
<is kleiner dan
>=is groter dan of gelijk aan
<=is kleiner dan of gelijk aan
=, == en ===

= wijst een waarde toe. == vergelijkt en zet daarbij typen om (bv. "5" == 5 is true): dat geeft verrassingen. Gebruik altijd === en !==, dan vergelijk je waarde én type.

Teksten worden alfabetisch, letter per letter vergeleken en hoofdletters tellen mee. Probeer het uit:

2.3.3 Logische operatoren

Met logische operatoren combineer je booleans. Je gebruikt ze vooral binnen een if om meerdere voorwaarden tegelijk te controleren.

OperatorBetekent
&&De AND is waar wanneer beide termen true zijn.
||De OR is waar wanneer minstens één van beide termen true is.
!De NOT keert de waarde van een boolean om.
Volgorde en haakjes

Zet haakjes om je voorwaarden duidelijk te maken: (a === b) && (c !== d). Zonder haakjes geldt: eerst !, dan &&, dan ||.

Synthese
Onthoud
  • = kent een waarde toe; === vergelijkt.
  • Rekenen: + − * / en % (rest); verkort: += -= ++ --.
  • Vergelijken geeft true of false: === !== > < >= <=.
  • Logisch: && (en), || (of), ! (niet).
🎯 Nu ben jij aan de beurt: 3 Operatoren

Verwerk wat je hierboven las met de onderdelen hieronder. Ze horen bij deze theorie.

Een programma dat altijd hetzelfde doet is saai. Met if, else en else if laat je je code beslissen op basis van een voorwaarde; met switch kies je uit meerdere mogelijkheden.

2.4.1 Het if-statement

Over het if-statement heb je al gehoord tijdens de lessen programmeren. In JavaScript werkt het exact hetzelfde. Wanneer de voorwaarde waar is, wordt het programma tussen de accolades uitgevoerd; is ze onwaar, dan gebeurt er niets.

var x = 50;
var y = 50;
if (x === y) {
  alert("waarde x is gelijk aan waarde y");
}
Let op de vorm
  • De voorwaarde staat tussen haakjes, het bijhorende programma tussen accolades { }.
  • Achter de accolade sluiten komt geen puntkomma.
  • if schrijf je met een kleine letter.

Opdracht. Hieronder staan dertien if-statements met alert(). Bepaal bij elk of de browser een melding geeft (true) of niet (false) en vul je antwoorden in bij de oefening. Controleer daarna met Uitvoeren: in de console zie je welke meldingen verschijnen.

✏️ Probeer zelf — pas de code aan en klik op Uitvoeren
2.4.2 Het if-else-statement

Met een if-else-statement voer je code uit als niet aan de voorwaarde van de if voldaan is. Hieronder is a niet gelijk aan b: dus wordt de else uitgevoerd.

✏️ Probeer zelf — pas de code aan en klik op Uitvoeren
2.4.3 Het if-else-if-statement

Met else if voeg je extra voorwaarden toe. Wanneer de eerste if niet voldaan is, kijkt JavaScript naar de volgende else if, enzovoort. Zodra één voorwaarde waar is, wordt dat stuk uitgevoerd en worden de rest overgeslagen. De laatste else vangt alle overige gevallen op.

Hoofdlettergevoelig!

Een vergelijking van tekst is hoofdlettergevoelig. Bevat de variabele frankrijk in plaats van Frankrijk, dan krijg je “Je koos voor iets anders!”. Zet gebruikersinvoer eventueel om met .toLowerCase() vóór je vergelijkt.

✏️ Probeer zelf — pas de code aan en klik op Uitvoeren
2.4.4 De switch-statement

Een if-else-if-reeks die één variabele met telkens een andere waarde vergelijkt, kan je vervangen door een switch. Het resultaat is hetzelfde; we gaan er hier niet dieper op in, maar weet dat er een alternatief bestaat. Let op het woord break: zonder break loopt JavaScript door naar het volgende geval.

✏️ Probeer zelf — pas de code aan en klik op Uitvoeren
Korte schrijfwijze: de voorwaardelijke operator

Voor een eenvoudige keuze tussen twee waarden bestaat een verkorte vorm: voorwaarde ? waardeAlsWaar : waardeAlsOnwaar. Handig, maar gebruik hem alleen als hij leesbaar blijft.

✏️ Probeer zelf — pas de code aan en klik op Uitvoeren
Synthese
Onthoud
  • if (voorwaarde) { … }: voer uit als de voorwaarde waar is.
  • else { … }: voer uit in alle andere gevallen.
  • else if (voorwaarde) { … }: extra voorwaarden; de eerste ware wint.
  • switch met case, break en default is een alternatief.
  • Vergelijk met ===; tekst is hoofdlettergevoelig.
🎯 Nu ben jij aan de beurt: 4 Conditionele statements

Verwerk wat je hierboven las met de onderdelen hieronder. Ze horen bij deze theorie.

Laat je programma dobbelen met Math.random(), vragen stellen met prompt() en confirm() en tekst omzetten in getallen met parseInt() en parseFloat(). Op het einde bouw je een dobbelsteenspel.

2.5 Math.random()

Om zoals in Python een dobbelsteen te simuleren, heb je een randomfunctie nodig. Daarvoor gebruik je het object Math, met veel wiskundige functies: Math.sin(x), Math.PI, Math.E, Math.round(), Math.log(x) … (de volledige lijst vind je op het internet). Math.random() geeft een kommagetal tussen 0 en 1 (0 mag, 1 niet). Voer het meerdere keren uit en bekijk het resultaat.

✏️ Probeer zelf — pas de code aan en klik op Uitvoeren
Een dobbelsteen

Een dobbelsteen levert een geheel getal. Je past het random getal aan met vermenigvuldigen en afronden:

var getal = 0;
getal = Math.random();
getal = getal * 11 + 1;
getal = Math.round(getal);
alert(getal);
  • Math.round(x) rondt af naar het dichtstbijzijnde geheel getal; Math.floor(x) naar beneden; Math.ceil(x) naar boven.
  • De vermenigvuldiging getal = getal * 11 kan korter: getal *= 11;. Hetzelfde geldt voor de andere toewijzingsoperatoren.
Is jouw dobbelsteen wel eerlijk?

Met Math.round hebben het kleinste en het grootste getal maar de helft zo veel kans als de andere! Voor een eerlijke dobbelsteen met n vlakken gebruik je Math.floor(Math.random() * n) + 1. Bekijk het in de demo:

2.6 prompt()

In plaats van de gebruiker een melding te geven, kan de browser de gebruiker ook om een antwoord vragen met prompt(). De functie geeft het antwoord terug als tekst. Als tweede argument kan je al een suggestie meegeven tussen dubbele quotes ("" betekent: leeg).

Antwoorden invullen op deze pagina

Een echte prompt kan hier niet openen. Daarom vul je de antwoorden vooraf in het vak Antwoorden onder de code in, één per regel: bij elke prompt() of confirm() gebruikt het programma de volgende regel.

✏️ Probeer zelf — pas de code aan en klik op Uitvoeren
2.7 confirm()

Met confirm() vraagt de browser om een bevestiging (OK of Annuleren). Je krijgt een boolean terug: true of false. Daarom gebruik je het vaak samen met een if-else. (In het antwoordenvak schrijf je ja voor OK en nee voor Annuleren.)

✏️ Probeer zelf — pas de code aan en klik op Uitvoeren
2.8 parseInt() en parseFloat()

Soms krijg je een waarde waarmee je wil rekenen, maar die JavaScript als tekst ziet (bv. het antwoord van prompt() of de inhoud van een invoerveld): var getal = "15"; is tekst. Met parseInt() maak je er een geheel getal van, met parseFloat() een kommagetal. Lukt het niet, dan krijg je NaN (Not a Number).

✏️ Probeer zelf — pas de code aan en klik op Uitvoeren
Synthese
Onthoud
  • Math.random() geeft een getal tussen 0 en 1. Eerlijke dobbelsteen: Math.floor(Math.random() * n) + 1.
  • prompt() vraagt een tekst; confirm() vraagt ja/nee (boolean).
  • Omzetten naar getallen: parseInt() en parseFloat().
🎯 Nu ben jij aan de beurt: 5 Random, prompt, confirm en parse

Verwerk wat je hierboven las met de onderdelen hieronder. Ze horen bij deze theorie.

Herhalen zonder code te kopiëren: de for-lus als je weet hoe vaak, de while-lus als je het niet weet. Met break, continue en de gevaren van een oneindige lus.

3.1 De for-loop

De for-loop gebruik je voornamelijk wanneer je op voorhand weet hoeveel keer een lus moet worden uitgevoerd. Hij heeft drie onderdelen, gescheiden door puntkomma’s:

1
Startwaarde

var i = 0: waarmee de teller begint (meestal 0).

2
Voorwaarde

i < 10: de lus loopt zolang dit waar is.

3
Stap

i++: wat er na elke ronde met i gebeurt.

Elke keer de lus wordt doorlopen, verandert de waarde van de variabele tot de eindwaarde bereikt is. Hieronder is i de startwaarde: de lus wordt 10 keer doorlopen. Je kan tekst en een variabele combineren met het plusteken. i++ is hetzelfde als “elke ronde i met 1 verhogen”.

✏️ Probeer zelf — pas de code aan en klik op Uitvoeren
De lus in beeld

Verander de startwaarde, de grens en de stap. Let op wat er gebeurt bij een stap van 0: dan blijft de voorwaarde altijd waar en loopt het programma vast (oneindige lus).

Er moet altijd een stap zijn

Binnen de lus moet de variabele altijd veranderen, anders kan de lus nooit eindigen. Buiten de for-haakjes kan dat ook: for ( ; i < 10 ; ) { … i += 2; } met var i = 0; vóór de lus, zodat i niet steeds met 1 omhoog moet gaan.

3.2 De while-loop

Weet je niet hoe vaak een lus moet worden doorlopen, dan gebruik je een while-loop. Deze lus loopt zolang aan de voorwaarde voldaan is. Ook hier moet er in de lus een stap zijn waarbij de variabele verandert. De while-loop gebruik je vooral bij tekst of wanneer de variabele om het even welke waarde kan aannemen.

✏️ Probeer zelf — pas de code aan en klik op Uitvoeren
do…while, break en continue
  • do … while: de code wordt minstens één keer uitgevoerd en daarna herhaald zolang de voorwaarde waar is.
  • break springt onmiddellijk uit de lus.
  • continue slaat de rest van deze ronde over en gaat naar de volgende.
✏️ Probeer zelf — pas de code aan en klik op Uitvoeren
Synthese
Onthoud
  • for (start; voorwaarde; stap): als je weet hoeveel keer.
  • while (voorwaarde): als je het niet weet.
  • Zorg altijd dat de variabele in de lus verandert, anders krijg je een oneindige lus.
  • break stopt de lus, continue slaat één ronde over.
🎯 Nu ben jij aan de beurt: 6 Lussen

Verwerk wat je hierboven las met de onderdelen hieronder. Ze horen bij deze theorie.

Schrijf je code één keer en gebruik ze zo vaak als je wil. Functies met en zonder parameters, return-waarden, het bereik van variabelen en de moderne pijlfunctie.

4 Functies

Je gebruikt een functie wanneer je een deel van je code meerdere keren wil oproepen en toch maar één keer wil schrijven, of wanneer je de code door iets van buitenaf (een knop, een timer) wil laten oproepen. Een functie aanmaken is eenvoudig: je geeft ze een naam, zet de code tussen accolades en roept ze daarna op. Zonder oproep gebeurt er niets!

✏️ Probeer zelf — pas de code aan en klik op Uitvoeren
Parameters

Je kan parameters meegeven met een functie: variabelen tussen de haakjes van de functie die bij elke oproep een andere waarde krijgen. In het voorbeeld heeft de parameter de naam voornaam. De functie TweedeFunctie() wordt vier keer uitgevoerd en meldt telkens een andere naam: Jan, Piet, Joris en Corneel. De waarden die je bij de oproep meegeeft, heten argumenten.

✏️ Probeer zelf — pas de code aan en klik op Uitvoeren
Een functie als machine: return

Een functie kan ook een waarde teruggeven met return. Zo kan je het resultaat in een variabele bewaren of in een berekening gebruiken. Zodra return wordt uitgevoerd, stopt de functie. Een functie zonder return geeft undefined terug. Roep functies hieronder op en kijk wat er in en uit gaat:

function kwadraat(x) {
  return x * x;
}
var resultaat = kwadraat(7);   // 49
alert(resultaat + kwadraat(2)); // 53
Bereik van variabelen (scope)

Een variabele die je binnen een functie met var aanmaakt, bestaat enkel in die functie (lokale variabele). Een variabele die je buiten alle functies aanmaakt, is overal beschikbaar (globale variabele). Parameters zijn ook lokaal.

✏️ Probeer zelf — pas de code aan en klik op Uitvoeren
Uitbreiding: de pijlfunctie

In moderne code zie je vaak een kortere schrijfwijze: de pijlfunctie (arrow function). Ze doet hetzelfde. Bij een functie met één instructie mag return en de accolades weg.

✏️ Probeer zelf — pas de code aan en klik op Uitvoeren
Synthese
Onthoud
  • function naam(parameters) { … } maakt een functie; naam(argumenten); roept ze op.
  • return geeft een waarde terug en stopt de functie.
  • Variabelen in een functie zijn lokaal.
  • Kies een naam die zegt wat de functie doet (werkwoord): berekenBMI, toonMelding.
🎯 Nu ben jij aan de beurt: 7 Functies

Verwerk wat je hierboven las met de onderdelen hieronder. Ze horen bij deze theorie.

Laat je pagina reageren op wat de gebruiker doet: klikken, typen, kiezen. Met onclick en onchange, parameters, escaping van aanhalingstekens en de moderne addEventListener().

5 Events

Wanneer je een website hebt gemaakt, wil je dat er een functie wordt uitgevoerd wanneer er op een knop wordt gedrukt. Daarvoor gebruik je events. Je voegt aan de button-tag een attribuut onclick toe: wanneer er op de knop wordt gedrukt, wordt de functie toonMelding() uitgevoerd.

<button type="button" onclick="toonMelding()">
  klik hier
</button>

function toonMelding() {
  alert("Er is op de knop gedrukt");
}
✏️ Probeer zelf — pas de code aan en klik op Uitvoeren
Meer events

Naast onclick zijn er nog veel andere events, bijvoorbeeld onchange. Dat kan je gebruiken bij een input-tag: wanneer de gebruiker een tekst ingeeft (en het veld verlaat), wordt de functie uitgevoerd. Ontdek welke events er afgaan als je iets doet:

Een parameter meegeven

Bij de functie die je oproept via een onclick- of onchange-event kan je ook een parameter meegeven. De waarde moet tussen aanhalingstekens (single quotes) staan: het attribuut zelf staat immers al tussen dubbele quotes.

✏️ Probeer zelf — pas de code aan en klik op Uitvoeren
Escaping van quotes

Opmerking: wil je een waarde doorsturen die zélf een quote bevat (zoals l’arbre), dan moet je dat anders aanpakken: escaping quotes met character codes. In plaats van ' schrijf je &#39; en in plaats van " schrijf je &#34;.

<button type="button" onclick="toonMelding(&#39;l’arbre&#39;)">
  L’arbre
</button>
Uitbreiding: addEventListener

Professionele programmeurs zetten de JavaScript liever niet in de HTML-tag. Met addEventListener() koppel je vanuit je script een functie aan een element. Daarvoor zoek je het element eerst op, bv. met document.getElementById(). Met jQuery (hoofdstuk 10) wordt dit nog korter.

✏️ Probeer zelf — pas de code aan en klik op Uitvoeren
Synthese
Onthoud
  • Een event is iets dat de gebruiker doet (klik, wijziging, toets …).
  • onclick="functie()" en onchange="functie()" in de HTML-tag koppelen een functie.
  • Parameters geef je mee tussen single quotes: onclick="toon('Jan')"; quotes in de waarde escape je met &#39;.
  • addEventListener("click", functie) doet hetzelfde vanuit je script.
🎯 Nu ben jij aan de beurt: 8 Events

Verwerk wat je hierboven las met de onderdelen hieronder. Ze horen bij deze theorie.

Waar bewaar je je JavaScript? In het HTML-bestand of, zoals bij grotere projecten, in een extern .js-bestand dat je met een script-tag inlaadt.

6 Opslaglocatie

Net als bij een CSS-bestand kan je JavaScript op twee manieren bewaren: in het HTML-bestand (liefst onderaan, vóór </body>) of op een externe locatie. Bij grotere projecten plaatsen we de JavaScript-bestanden altijd in een externe map genaamd js (de CSS-bestanden komen in de map css). Het bestand heeft steeds de extensie .js. Daarna roep je dit bestand op in het HTML-bestand met een script-tag met het attribuut src:

index.html<script src="js/main.js"></script>

Deze code plaats je ofwel bovenaan in de <head>, maar net als bij CSS kan hij op eender welke plaats staan. Onderaan de body is meestal het veiligst, omdat dan alle elementen al bestaan wanneer je script start.

Een voorbeeld van een mapstructuur
mapstructuurmijn-website/
├── index.html
├── javascript.html
├── css/
│   └── style.css
└── js/
    └── main.js

In js/main.js staat enkel JavaScript, zonder <script>-tags:

js/main.jsfunction toonMelding() {
  alert("Er is op de knop gedrukt");
}
Let op
  • Een script-tag met src heeft altijd een sluittag </script>, ook als er niets tussen staat.
  • De volgorde telt: laad je eerst een bibliotheek (jQuery) en pas daarna je eigen script dat die bibliotheek gebruikt.
  • Een pad met een slash vooraan (/js/main.js) start bij de hoofdmap van de website; zonder slash (js/main.js) start het bij de map van het huidige bestand.
Uitbreiding: defer

Zet je het script toch in de <head>, dan bestaat de rest van de pagina nog niet wanneer het script draait. Met het attribuut defer wacht de browser tot de pagina geladen is: <script src="js/main.js" defer></script>.

Synthese
Onthoud
  • Intern: in het HTML-bestand tussen script-tags. Extern: een .js-bestand in de map js.
  • Oproepen met <script src="js/main.js"></script>.
  • In het externe bestand staat geen script-tag.
🎯 Nu ben jij aan de beurt: 9 Opslaglocatie van je script

Verwerk wat je hierboven las met de onderdelen hieronder. Ze horen bij deze theorie.

jQuery maakt veel bewerkingen in JavaScript korter. Je laadt de bibliotheek in, zoekt elementen op met selectors ($("#id")) en leest de waarde van een invoerveld uit met val(). Als voorbeeld start je met de BMI-calculator.

7 jQuery

jQuery is een vrije JavaScript-bibliotheek die het eenvoudiger maakt om enkele bewerkingen te realiseren binnen JavaScript. Er bestaan nog tal van andere bibliotheken en frameworks (React, Angular, Vue …). Om jQuery te gebruiken, moet je de bibliotheek eerst toevoegen. Daarvoor plaats je onderstaande code in de head-tag van je document (het boek gebruikt versie 1.12.4; de recentere versie 3.x werkt op dezelfde manier):

index.html<head>
  <script src="https://code.jquery.com/jquery-1.12.4.js"></script>
</head>
Op deze pagina

In de jQuery-voorbeelden en -oefeningen op deze pagina is jQuery al voor je ingeladen; je moet dus geen script-tag voor jQuery toevoegen. Bij een eigen pagina moet dat wel!

Het voorbeeldproject: de BMI-calculator

Je leert werken met jQuery aan de hand van een voorbeeldbestand over de Body Mass Index (bestand 08-BMI.html op de website). De gebruiker vult bepaalde velden in (lengte, massa), waarna het programma de BMI berekent en toont of ze goed is of niet. Vooraleer je begint, moet je weten hoe de BMI berekend wordt en welke waarden gezond zijn.

De BMI

BMI = massa (kg) / (lengte in m)². Bijvoorbeeld 70 kg en 175 cm: 70 / 1,75² = 22,9.

BMIGewichtstoestandKleur in de opdracht
minder dan 18,5ondergewichtoranje
18,5 tot minder dan 25gezond gewichtgroen
25 tot minder dan 30overgewichtoranje
30 of meerobesitasrood

Zo ziet het eindresultaat eruit (je bouwt het stap voor stap):

Eerst: een knop met een functie

Wanneer we op de knop Bereken drukken, willen we eerst de melding “Er werd op de knop gedrukt” zien. De knop roept daarvoor een functie op (in het boek berekenPrijs(); wij noemen ze berekenBMI()). Probeer het uit op de pagina hieronder:

✏️ Probeer zelf — pas de code aan en klik op Uitvoeren
Selectors en val()

We hebben nu een melding, maar we willen het resultaat van de BMI. Daarvoor hebben we de waarden nodig die bij lengte en massa ingevuld werden. Binnen onze functie gebruiken we jQuery. Een jQuery-opdracht begint altijd met een dollarteken gevolgd door haakjes. Binnen die haakjes staat een tekst die naar een id of een class verwijst:

#
Een id

$("#lengte"): het element met id="lengte". Een hekje.

.
Een class

$(".veld"): alle elementen met class="veld". Een punt.

</>
Een tag

$("button"): alle knoppen op de pagina.

De id staat tussen quotes (al dan niet single) omdat het een constante tekst is. Probeer zelf selectors uit en kijk welke elementen geselecteerd worden:

De waarde uitlezen met .val()

Nu jQuery weet dat het naar het element met id “lengte” moet zoeken, geven we de opdracht de waarde (value) ervan op te vragen met de functie val(). Die waarde bewaar je in een variabele en toon je aan de gebruiker. Vul een lengte in op de pagina hieronder en klik op Bereken.

✏️ Probeer zelf — pas de code aan en klik op Uitvoeren
val() geeft tekst!

De waarde van een invoerveld is altijd tekst, ook als er een getal in staat. Om ermee te rekenen zet je ze om met parseFloat() (zie hoofdstuk 5): var lengte = parseFloat($("#lengte").val());

7.2 Alternatieven zonder jQuery

In plaats van jQuery hadden we de waarde van de id ook kunnen opvragen zonder jQuery, met gewoon JavaScript. Dat is langer, maar het werkt overal zonder bibliotheek. (Let op: value is hier een eigenschap, geen functie, dus zonder haakjes.)

var lengte = document.getElementById("lengte").value;

Binnen jQuery kan je ook zoeken op de unieke naam (het attribuut name) van een input:

$("input[name=lengte]").val();
Synthese
Onthoud
  • Laad jQuery in met een script-tag voor je eigen script.
  • $("#id") selecteert een id, $(".class") een class, $("tag") een tag.
  • $("#lengte").val() leest de waarde van een invoerveld (altijd als tekst).
  • BMI = massa / (lengte in m)².
🎯 Nu ben jij aan de beurt: 10 jQuery: de basis

Verwerk wat je hierboven las met de onderdelen hieronder. Ze horen bij deze theorie.

Niet enkel lezen maar ook schrijven: met val(), html(), text() en css() pas je de pagina aan. Je toont de BMI en de gewichtstoestand op de pagina zelf, met een kleur die bij de uitkomst past.

7.3 jQuery – val() om te schrijven

In het vorige hoofdstuk berekende je de BMI. Die waarde willen we nu in het invoerveld uitkomstWaarde plaatsen. Ook daarvoor gebruik je val(), maar nu geef je er een waarde aan mee: in plaats van de value te lezen van een id en ze in een variabele te plaatsen, plaats je juist een value in de id.

$("#uitkomstWaarde").val(DeBekomenWaarde);
Lezen of schrijven?

Zonder argument lees je: $("#x").val(). Met argument schrijf je: $("#x").val(5). De variabele “DeBekomenWaarde” krijgt geen quotes, omdat het een variabele is en geen tekst.

Opdracht 7.4: plaats de BMI in het veld uitkomstWaarde. Nu je de BMI hebt, weet je ook of de persoon met ondergewicht, gezond gewicht, overgewicht of obesitas te maken heeft: zorg dat de gebruiker een melding van zijn gewichtstoestand krijgt.

✏️ Probeer zelf — pas de code aan en klik op Uitvoeren
7.5 jQuery – html()

In plaats van de gebruiker de gewichtstoestand via alert() te melden, tonen we ze op de webpagina zelf. We vervangen de tekst binnen het element met id uitkomstTekst door de gewichtstoestand. Daarvoor verander je de html van dat element:

$("#uitkomstTekst").html(Gewichtstoestand);

html() mag ook HTML-tags bevatten (bv. "<b>Gezond</b>"); met text() zet je gewone tekst neer. Gebruik text() zodra de tekst van een gebruiker komt (dat is veiliger).

✏️ Probeer zelf — pas de code aan en klik op Uitvoeren
7.6 jQuery – styling met css()

Om de gebruiker te waarschuwen als zijn gewichtstoestand niet in orde is, verander je ook de kleur van de tekst met css(). Tussen de haakjes plaats je accolades zodat je meerdere stylingparameters kan toevoegen, gescheiden door een komma. Elke parameter staat tussen quotes, gevolgd door een dubbelepunt en de waarde tussen quotes. Je mag enkele of dubbele quotes gebruiken.

$("#uitkomstTekst").css({"color": "red", "font-size": "30px"});

// voor één eigenschap mag het korter:
$("#uitkomstTekst").css("color", "red");

Nog handig: met addClass(), removeClass() en toggleClass() voeg je een CSS-class toe of weg (de opmaak staat dan netjes in je CSS-bestand), en met hide(), show() en toggle() verberg of toon je een element.

✏️ Probeer zelf — pas de code aan en klik op Uitvoeren
Methoden aan elkaar rijgen

Je kan jQuery-opdrachten achter elkaar op hetzelfde element uitvoeren (“chaining”): $("#tekst").html("Hoi").css("color", "red");. Het is dezelfde selector, dus je hoeft ze maar één keer te schrijven.

Synthese
Onthoud
  • .val() leest, .val(waarde) schrijft in een invoerveld.
  • .html(tekst) en .text(tekst) vervangen de inhoud van een element.
  • .css({"color": "red"}) of .css("color", "red") verandert de opmaak.
  • .addClass(), .removeClass(), .hide(), .show() zijn handige extra’s.
🎯 Nu ben jij aan de beurt: 11 jQuery: waarden, html en styling

Verwerk wat je hierboven las met de onderdelen hieronder. Ze horen bij deze theorie.

Wat als de gebruiker niets invult? Je controleert de invoer met een if, en je leert dat een form met het attribuut required en het submit-event dat veel eenvoudiger doet. Op het einde is je BMI-calculator klaar.

7.8 Controleren of alle waarden zijn ingevuld

Momenteel kan je ook op de knop Bereken drukken wanneer niet alle waarden zijn ingevuld. Pas je programma zo aan dat je een melding krijgt dat niet alle waarden zijn ingevuld, en dat er dan geen BMI wordt berekend. Een leeg invoerveld geeft van val() een lege tekst "" terug. Dat controleer je met een if, en met return stop je de functie vroegtijdig.

✏️ Probeer zelf — pas de code aan en klik op Uitvoeren
Bewaar dit als versie 2

Bewaar je bestand als een nieuwe versie (bv. 08-BMI-v2.html) zodat je de vorige versie niet kwijtraakt.

7.9 Form

Met een formulier (form) kan het eenvoudiger. Bij elke input, textarea … zet je een extra attribuut required: de browser laat het formulier dan niet verzenden zolang dat veld leeg is en toont zelf een melding. Je JavaScript hoef je daarvoor niet te schrijven!

<form id="berekenForm">
  <input type="number" id="lengte" required /><p>Lengte (cm)</p>
  <button type="submit" id="submit">Bereken</button>
</form>

<script>
  $("#berekenForm").submit(function () {
    alert("berekend");
  });
</script>
  • Heel je formulier staat binnen de form-tag, die een id krijgt. Laat de attributen action en method voorlopig weg (die komen later aan bod).
  • Bij de input voeg je required toe.
  • De knop verandert van type="button" naar type="submit". De onclick verdwijnt: nu start je functie via $("#berekenForm").submit(function () { … });.
preventDefault()

Een submit laadt normaal gezien de pagina opnieuw (het formulier wordt verzonden). Wil je dat jouw JavaScript het overneemt, geef dan de functie een parameter (meestal e of event) en roep e.preventDefault(); op. Zo blijft de pagina staan en verdwijnt je resultaat niet.

Probeer het uit: laat een veld leeg en klik op Bereken.

✏️ Probeer zelf — pas de code aan en klik op Uitvoeren
Het eindresultaat

Zo werkt de volledige BMI-calculator: controle op lege velden, berekening, toestand en kleur. Bouw ze na met alles wat je in hoofdstuk 10 t/m 12 leerde.

Synthese
Onthoud
  • Een leeg veld geeft "". Controleer met een if en stop met return.
  • Met een form, het attribuut required en een submit-knop controleert de browser zelf of de velden ingevuld zijn.
  • $("#form").submit(function (e) { e.preventDefault(); … }); voert jouw code uit zonder de pagina te herladen.
🎯 Nu ben jij aan de beurt: 12 Invoer controleren en formulieren

Verwerk wat je hierboven las met de onderdelen hieronder. Ze horen bij deze theorie.

Met een variabele in je selector schrijf je één functie voor alle knoppen, en met een class spreek je een hele groep elementen tegelijk aan. Ideaal voor de kleurknoppen én voor je rekenmachine.

7.10 jQuery – variabelen

Je leert nu variabelen gebruiken binnen jQuery. Kopieer eerst onderstaande code naar je bestand: vijf knoppen, waarvan de id de naam is van een kleur. Bij een klik wordt de kleur als parameter meegegeven.

<div class="kleuren">
  <button class="resetKleur" id="red" type="button" onclick="kleuren('red')">rood</button>
  <button class="resetKleur" id="green" type="button" onclick="kleuren('green')">groen</button>
  <button class="resetKleur" id="orange" type="button" onclick="kleuren('orange')">oranje</button>
  <button class="resetKleur" id="blue" type="button" onclick="kleuren('blue')">blauw</button>
  <button class="resetKleur" id="reset" type="button" onclick="reset()">reset</button>
</div>

Wanneer je op een knop drukt, wordt de kleur meegegeven (parameter). De id van de knop heeft dezelfde naam als de parameter. Het is nu heel eenvoudig de kleur van de knop te veranderen door een variabele in jQuery te gebruiken:

function kleuren(kleur) {
  $('#' + kleur).css({"background-color": kleur, "color": "white"});
}

We sturen de kleur (parameter) door naar het script, waar ze in de variabele kleur terechtkomt, bijvoorbeeld met de waarde “green”. Met $('#' + kleur) plak je een hekje aan de waarde van de variabele (dat wordt "#green") en spreek je zo de id “green” aan.

✏️ Probeer zelf — pas de code aan en klik op Uitvoeren
Alle knoppen tegelijk: een class

Met de resetknop willen we alle knoppen terug een witte achtergrond en een blauwe tekstkleur geven. Daarvoor heeft de knop het event reset(). Deze keer roep je geen id aan maar een class: $('.resetKleur'). Die class staat bij elke knop en zal dus alle knoppen een nieuwe achtergrondkleur geven.

✏️ Probeer zelf — pas de code aan en klik op Uitvoeren
this

Wil je de kleur veranderen van de knop die je juist hebt ingedrukt, dan kan het nog eenvoudiger met $(this): dat verwijst naar het element waar het event op afging. Daar gaan we hier niet dieper op in, maar in de rekenmachine (hoofdstuk 14) heb je het hard nodig.

Uitbreiding: this en .on()

Met $(".resetKleur").click(function () { … }) koppel je één functie aan alle knoppen met die class. Binnen de functie verwijst $(this) naar de knop waarop geklikt werd, en $(this).text() leest de tekst ervan. Zo heb je geen onclick meer nodig in de HTML.

✏️ Probeer zelf — pas de code aan en klik op Uitvoeren
Synthese
Onthoud
  • Met $("#" + variabele) bouw je een selector op met een variabele.
  • Met $(".class") spreek je alle elementen met die class tegelijk aan.
  • $(this) is het element waarop het event afging.
  • $(".class").click(function () { … }) koppelt een functie aan alle elementen met die class.
🎯 Nu ben jij aan de beurt: 13 jQuery met variabelen en classes

Verwerk wat je hierboven las met de onderdelen hieronder. Ze horen bij deze theorie.

Een echte rekenmachine bouwen met jQuery: cijfers indrukken, een bewerking kiezen, een tweede getal typen en op = drukken. Je onthoudt tussenresultaten in hulpvelden en leert een probleem in stappen op te delen.

7.11 Opdracht: de rekenmachine

In dit hoofdstuk leerde je meer over jQuery. Je maakt nu zelf een telmachine. Op de website vind je een HTML-bestand waarmee je kan vertrekken (09-Rekenmachine.html). Wanneer je een getal indrukt, moet dat verschijnen in het gebied resultaat. Vervolgens kan je een wiskundige bewerking uitvoeren en een tweede getal intypen. Wanneer je op het gelijkheidsteken drukt, wordt het resultaat getoond. Hiervoor gebruik je best twee hulpinputs waarin je het tussentijdse resultaat kan stockeren.

Zo werkt het eindresultaat. Kijk rechts wat de hulpvariabelen onthouden:

Het probleem in stappen
1
Een cijfer indrukken

Het cijfer verschijnt op het scherm. Begin je een nieuw getal, dan vervangt het cijfer het scherm; anders wordt het achter het vorige geplakt (tekst!).

2
Een bewerking kiezen

Onthoud het getal op het scherm in een hulpveld (#getal1) en de bewerking in een tweede (#bewerking). Het volgende cijfer begint een nieuw getal.

3
Gelijk aan

Zet het onthouden getal en het scherm om in getallen (parseFloat), voer de bewerking uit met een if-else-if en toon de uitkomst.

Tekst of getal?

De waarde van een invoerveld is tekst. Voor het samenstellen van een getal (“1” + “2” wordt “12”) is dat handig; voor het rekenen moet je met parseFloat() omzetten, anders is “5” + “3” gelijk aan “53”!

Hulpmiddelen die je nodig hebt: $(".cijfer").click(function () { … }) koppelt een functie aan alle cijferknoppen, $(this).text() leest de tekst van de ingedrukte knop, en .val() leest en schrijft de invoervelden.

Werk het uit

Onderstaande pagina bevat de rekenmachine zonder werking: de cijferknoppen hebben de class cijfer, de bewerkingen de class bewerking, het gelijkheidsteken heeft id is. Er zijn drie verborgen hulpvelden: #getal1, #bewerking en #nieuw (of je een nieuw getal begint). Probeer eerst zelf, daarna kan je de oplossing bekijken.

✏️ Probeer zelf — pas de code aan en klik op Uitvoeren
Uitbreidingen om zelf te proberen
  • Een C-knop die alles wist.
  • Een +/−-knop die het teken omdraait.
  • Voorkom een tweede komma in hetzelfde getal.
  • Deel je door 0? Toon dan “Fout” in plaats van Infinity.
  • Ketenen: 2 + 3 + 4 = : toon na de tweede bewerking al het tussenresultaat.
Synthese
Onthoud
  • Splits een groot probleem op in kleine stappen (cijfer, bewerking, gelijk).
  • Gebruik verborgen invoervelden of variabelen om tussenresultaten te onthouden.
  • Zet tekst om in getallen vóór je rekent.
  • $(this) geeft je het element waarop geklikt werd.
🎯 Nu ben jij aan de beurt: 14 Project: de rekenmachine

Verwerk wat je hierboven las met de onderdelen hieronder. Ze horen bij deze theorie.

Meerdere waarden in één variabele bewaren: een lijst (array) en een “fiche” met eigenschappen (object). Met lussen over een lijst, handige array-methodes en JSON, de taal waarin gegevens tussen pagina en server reizen.

Arrays: een geordende lijst

Een array bewaart meerdere waarden in één variabele, tussen rechte haken. Elk element heeft een index (volgnummer) die begint bij 0. Met .length vraag je het aantal elementen op.

✏️ Probeer zelf — pas de code aan en klik op Uitvoeren
Elementen toevoegen en verwijderen
MethodeWat doet ze?
push(x)voegt x achteraan toe
pop()verwijdert en geeft het laatste element
unshift(x)voegt x vooraan toe
shift()verwijdert en geeft het eerste element
indexOf(x)geeft de index van x (of -1 als het er niet in zit)
includes(x)is x aanwezig? (true/false)
join(", ")maakt er één tekst van
sort()sorteert alfabetisch
✏️ Probeer zelf — pas de code aan en klik op Uitvoeren
Een lus over een array

Met een for-lus loop je alle indexen af, van 0 tot length - 1. Handiger is for … of (elk element) of forEach (een functie voor elk element).

✏️ Probeer zelf — pas de code aan en klik op Uitvoeren
Uitbreiding: filter en map

Twee krachtige methodes geven een nieuwe array terug: filter() houdt enkel de elementen over die aan een voorwaarde voldoen; map() transformeert elk element. Ze gebruiken een (pijl)functie.

✏️ Probeer zelf — pas de code aan en klik op Uitvoeren
Objecten: een fiche met eigenschappen

Een object groepeert samenhorende gegevens als sleutel: waarde-paren tussen accolades. Zo beschrijf je één ding (een leerling, een boek). Je leest een eigenschap met een punt (leerling.naam) of met haken (leerling["naam"]). Een object kan ook een functie bevatten: een methode. Een array van objecten is een kleine “tabel”.

✏️ Probeer zelf — pas de code aan en klik op Uitvoeren
JSON: gegevens als tekst

JSON (JavaScript Object Notation) is de tekstvorm van objecten en arrays. Het is de taal waarin een pagina en een server gegevens uitwisselen (zie het AJAX-hoofdstuk). Met JSON.stringify() maak je van een object een tekst; met JSON.parse() maak je van die tekst weer een object. In JSON staan ook de sleutels tussen dubbele quotes.

✏️ Probeer zelf — pas de code aan en klik op Uitvoeren
Synthese
Onthoud
  • Array: [a, b, c], index vanaf 0, .length, push/pop.
  • Object: { sleutel: waarde }, lezen met object.sleutel.
  • Lus over een array: for, for…of of forEach; filter en map geven een nieuwe array.
  • JSON: JSON.stringify() en JSON.parse().
🎯 Nu ben jij aan de beurt: 15 Uitbreiding: arrays en objecten

Verwerk wat je hierboven las met de onderdelen hieronder. Ze horen bij deze theorie.

Elementen toevoegen en verwijderen terwijl de pagina draait: een takenlijstje met append(), remove(), toggleClass(), each() en delegated events. Zo bouw je echte web-apps.

De pagina als een boom (DOM)

De browser bewaart je pagina als een boom van elementen: het DOM (Document Object Model). JavaScript en jQuery kunnen die boom aanpassen terwijl de pagina draait: elementen toevoegen, verwijderen, verplaatsen of van uitzicht veranderen. Zo bouw je pagina’s die reageren zonder ze te herladen.

jQueryWat doet het?
.append(html) / .prepend(html)voegt html achteraan / vooraan binnen een element toe
.remove()verwijdert het element
.empty()maakt de inhoud van het element leeg
.addClass() / .removeClass() / .toggleClass()voegt een class toe / weg / wisselt ze
.each(function () {…})doorloopt alle geselecteerde elementen
.lengthaantal geselecteerde elementen
.attr("naam") / .data("naam")leest een attribuut / data-attribuut
Elementen toevoegen

Met .append() plak je HTML in een bestaand element. Zo maak je bij elke klik een nieuw lijstitem. Probeer het: elke klik voegt een taak toe.

✏️ Probeer zelf — pas de code aan en klik op Uitvoeren
Events op elementen die er nog niet zijn

Een gewone .click() koppelt zich aan de elementen die er nu zijn. Elementen die je later toevoegt, doen niet mee! De oplossing is een gedelegeerd event: $("#lijst").on("click", "li", function () { … }). Het event wordt aan het vaste element (#lijst) gekoppeld en werkt ook voor toekomstige li’s. Klik op een taak om ze door te strepen, dubbelklik om ze te verwijderen:

✏️ Probeer zelf — pas de code aan en klik op Uitvoeren
Alle elementen doorlopen met each()

Met .each() loop je over alle elementen die je selecteerde. Binnen de functie is $(this) telkens het huidige element. Handig voor bv. een som van alle prijzen op een pagina.

✏️ Probeer zelf — pas de code aan en klik op Uitvoeren
Synthese
Onthoud
  • Het DOM is de boom van elementen die je met jQuery kan aanpassen.
  • .append(), .remove(), .toggleClass() en .each() zijn de dagelijkse gereedschappen.
  • Voor elementen die je later toevoegt: $("#vast").on("click", ".element", function () {…}).
🎯 Nu ben jij aan de beurt: 16 Uitbreiding: een dynamische pagina

Verwerk wat je hierboven las met de onderdelen hieronder. Ze horen bij deze theorie.

Fouten horen erbij. Je leert de veelvoorkomende foutmeldingen lezen, je programma beschermen met try, catch en finally, zelf een fout opwerpen met throw en invoer van gebruikers controleren.

Soorten fouten

Een programma kan op drie manieren mis gaan. Leer ze onderscheiden, dan vind je de oorzaak veel sneller:

SoortVoorbeeldWat gebeurt er?
Syntaxfouteen haakje of quote vergetenhet script start helemaal niet (SyntaxError)
Uitvoeringsfouteen variabele gebruiken die niet bestaathet script stopt op die regel (ReferenceError, TypeError)
Logische foutdelen door het verkeerde getalgeen foutmelding, maar een fout resultaat!

Lees een foutmelding altijd van boven naar onder: het type, de uitleg en het regelnummer staan erin. Zet console.log() in je code om te controleren wat de waarden zijn.

✏️ Probeer zelf — pas de code aan en klik op Uitvoeren
try … catch

Met try … catch beschermt je code die fout kan lopen. Code in try { … } wordt uitgevoerd; gaat er iets mis, dan springt JavaScript naar catch (fout) { … } in plaats van te crashen. De variabele fout bevat details, o.a. fout.message. Met finally { … } voer je code uit die altijd moet gebeuren.

✏️ Probeer zelf — pas de code aan en klik op Uitvoeren
Zelf een fout opwerpen: throw

Soms is iets in jouw regels een fout, ook al kent JavaScript dat niet als fout: bv. delen door 0 of een negatieve leeftijd. Met throw new Error("uitleg") werp je zelf een fout op. Die kan je dan opvangen met try … catch. Een functie die zo werkt, geeft de aanroeper de kans om te reageren.

✏️ Probeer zelf — pas de code aan en klik op Uitvoeren
Invoer van de gebruiker controleren

Vertrouw nooit op wat een gebruiker intypt. Controleer of de invoer bestaat, of ze een getal is (isNaN()) en of ze binnen de toegelaten grenzen ligt. Geef een duidelijke melding, geen technische foutmelding.

✏️ Probeer zelf — pas de code aan en klik op Uitvoeren
Debuggen: zo zoek je een fout
1
Lees de melding

Open de console (F12). Type, uitleg en regelnummer vertellen je waar het misliep.

2
Controleer met console.log

Toon de waarden van je variabelen vóór en na de plek waar het fout gaat.

3
Verklein het probleem

Zet stukken code in commentaar tot het werkt, en voeg ze één voor één terug toe.

4
Gebruik breakpoints

In F12 → Sources zet je een breakpoint en loop je regel per regel door de code.

Synthese
Onthoud
  • Syntaxfout (start niet), uitvoeringsfout (stopt op een regel), logische fout (verkeerd resultaat).
  • try { … } catch (fout) { … } finally { … } vangt fouten op.
  • throw new Error("tekst") werpt zelf een fout op.
  • Controleer invoer met isNaN() en grenzen; toon vriendelijke meldingen.
🎯 Nu ben jij aan de beurt: 17 Uitbreiding: fouten afhandelen

Verwerk wat je hierboven las met de onderdelen hieronder. Ze horen bij deze theorie.

Object-georiënteerd programmeren: een klasse is een bouwtekening, een object is een bouwwerk daarvan. Je leert een klasse maken met constructor en methodes, objecten aanmaken met new en (differentiatie) overerven met extends.

Het begrippenkader

Bij object-georiënteerd programmeren (OOP) bouw je je programma uit objecten: dingen met eigenschappen (wat ze zijn of hebben) en methodes (wat ze kunnen). Een klasse is de bouwtekening; elk object (of instantie) is een bouwwerk volgens die tekening.

BegripUitlegVoorbeeld (auto)
klassede bouwtekeningclass Auto
object / instantieeen concreet exemplaarmijn rode Volkswagen
eigenschapeen gegeven van het objectkleur, merk, snelheid
methodeeen functie van het objectrijden(), remmen()
constructorzet het object klaar bij het aanmakenconstructor(merk, kleur)
Een klasse maken en gebruiken

Een klasse maak je met class Naam { … } (met een hoofdletter). De constructor krijgt de beginwaarden en bewaart ze in this: het object zelf. Met new Naam(…) maak je een object. Methodes schrijf je zonder het woord function.

✏️ Probeer zelf — pas de code aan en klik op Uitvoeren
Overerving (differentiatie)

Een klasse kan alles erven van een andere klasse met extends en er iets aan toevoegen. Zo schrijf je gemeenschappelijke code maar één keer. Met super(…) roep je de constructor van de ouderklasse op.

✏️ Probeer zelf — pas de code aan en klik op Uitvoeren
Ingebouwde objecten

Je gebruikt al lang objecten van klassen die JavaScript zelf meebrengt: Math, Date, Array, String … Met new Date() maak je bijvoorbeeld een object dat de huidige datum en tijd bevat, met methodes zoals getFullYear().

✏️ Probeer zelf — pas de code aan en klik op Uitvoeren
Synthese
Onthoud
  • Klasse = bouwtekening, object = exemplaar met new.
  • De constructor zet de beginwaarden in this.eigenschap.
  • Methodes zijn functies van de klasse; je roept ze op met object.methode().
  • extends laat een klasse alles van een andere overnemen (overerving).
🎯 Nu ben jij aan de beurt: 18 Uitbreiding: objecten en klassen (OOP)

Verwerk wat je hierboven las met de onderdelen hieronder. Ze horen bij deze theorie.

Met AJAX vraag je gegevens aan een server (PHP) of stuur je ze door, zonder de pagina te herladen. Je leert asynchroon werken, $.ajax() met POST en JSON en hoe je het antwoord op de pagina toont.

Asynchroon: niet wachten

JavaScript voert je code van boven naar onder uit, maar sommige dingen duren: een timer, een antwoord van een server. Zolang je wacht, mag de pagina niet blokkeren. Daarom gebruik je asynchrone code: je geeft een functie mee (een callback) die pas wordt uitgevoerd wanneer het klaar is. Kijk naar de volgorde van de meldingen:

✏️ Probeer zelf — pas de code aan en klik op Uitvoeren
Wat is AJAX?

AJAX (Asynchronous JavaScript And XML) is de techniek waarmee je pagina op de achtergrond een verzoek naar een server stuurt en het antwoord verwerkt, zonder de pagina te herladen. Zo werken zoekvoorstellen, chatberichten, likes en live-scores. De server is bij ons PHP (zie de PHP-cursus); de gegevens reizen als JSON.

Pagina (jQuery)verzoek: POST →Server (PHP)← antwoord: JSONPagina wordt aangepast
$.ajax() met POST

In jQuery gebruik je $.ajax() met een object vol instellingen:

InstellingBetekenis
urlhet PHP-bestand dat het verzoek verwerkt
methodde manier van versturen: "POST" (gegevens versturen) of "GET"
dataeen object met de gegevens die je meestuurt (PHP leest ze in $_POST)
dataTypehet soort antwoord dat je verwacht: "json"
successde functie die loopt als het antwoord binnenkomt (krijgt het antwoord als parameter)
errorde functie die loopt als er iets misgaat
js/main.js$.ajax({
  url: "groet.php",
  method: "POST",
  data: { naam: $("#naam").val() },
  dataType: "json",
  success: function (antwoord) {
    $("#uit").html(antwoord.tekst);
  },
  error: function () {
    $("#uit").html("De server is niet bereikbaar.");
  }
});
Gewoon een object meegeven

Geef bij data gewoon een object mee. Je hoeft geen JSON.stringify() of contentType te gebruiken: jQuery verstuurt het als een gewoon formulier, zodat PHP de gegevens in $_POST vindt.

De kant van PHP

Het bijhorende PHP-bestand leest de gegevens uit $_POST, verwerkt ze en antwoordt met JSON (json_encode). Dat antwoord komt in je success-functie terecht als een JavaScript-object.

groet.php<?php
// groet.php
header('Content-Type: application/json');
$naam = trim($_POST['naam'] ?? '');

if ($naam === '') {
    echo json_encode(['ok' => false, 'tekst' => 'Geef een naam in.']);
    exit;
}
echo json_encode(['ok' => true, 'tekst' => 'Hallo ' . htmlspecialchars($naam) . '!']);
Vertrouw nooit de browser

Controleer de gegevens altijd ook in PHP, en gebruik htmlspecialchars() voor tekst die je terug op een pagina toont. Een gebruiker kan je JavaScript-controle omzeilen. Meer hierover in de PHP-cursus (AJAX, JSON, prepared statements en veiligheid).

Het antwoord verwerken

Het antwoord is een object: je leest zijn eigenschappen met een punt. Met een if kan je op antwoord.ok reageren. Het antwoord kan ook een lijst zijn (een array van objecten): daar loop je met each() of forEach over. Zo bouw je bv. een tabel op met append() (hoofdstuk 16). Test de verwerking hier met een zelfgemaakt antwoord, zoals de server het zou sturen:

✏️ Probeer zelf — pas de code aan en klik op Uitvoeren
Synthese
Onthoud
  • Sommige code is asynchroon: je geeft een callback mee die later loopt (setTimeout, AJAX).
  • $.ajax({ url, method: "POST", data: { … }, dataType: "json", success: function (antwoord) { … } }).
  • PHP leest $_POST en antwoordt met json_encode(…).
  • Controleer altijd ook in PHP en geef fouten netjes weer met de error-functie.
🎯 Nu ben jij aan de beurt: 19 AJAX: gegevens uitwisselen met de server

Verwerk wat je hierboven las met de onderdelen hieronder. Ze horen bij deze theorie.