🟨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.
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.
Structuur
Wat staat er op de pagina? Titels, tekst, knoppen, invoervelden.
Opmaak
Hoe ziet het eruit? Kleuren, lettertypes, marges.
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>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.
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 */.
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!
Synthese
- 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 lijnen/* meerdere lijnen */.
Verwerk wat je hierboven las met de onderdelen hieronder. Ze horen bij deze theorie.
🧪 Oefeningen — 1 Inleiding en Hello world
Typ je code in het vak en klik op "Controleer". Je code wordt nagekeken op de vereiste onderdelen (waar een Voorbeeld-knop staat, kan je je pagina ook meteen bekijken). Je code wordt bewaard als je aangemeld bent.
Schrijf een script dat de browser de melding Hallo wereld! laat geven met alert().
Schrijf (1) een commentaar van één lijn, (2) een commentaar van meerdere lijnen en (3) een alert("Klaar!"); die wel wordt uitgevoerd.
Schrijf de volledige pagina javascript.html: een <title>, een <body> en daaronder een script-tag met een alert("Hallo wereld!");.
🔍 Opzoekwerk — 1 Inleiding en Hello world
Zoek het antwoord zelf op (internet, cursus, ...) en typ het hieronder. Wordt automatisch bewaard.
Tip: zoek op "JavaScript Brendan Eich Netscape 1995".
✓ opgeslagenTip: Elements, Console, Network, …
✓ opgeslagen✅ Testjezelf-quiz — 1 Inleiding en Hello world
Beantwoord alle vragen en klik daarna op "Controleer". Je mag zo vaak opnieuw proberen als je wil.
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;- 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.
De naam van een variabele
- Gebruik zinvolle namen:
leeftijd, nietx1. - Een naam begint met een letter,
_of$, en bevat geen spaties of streepjes. - JavaScript is hoofdlettergevoelig:
getalenGetalzijn verschillende variabelen. - Gebruik camelCase voor namen uit meerdere woorden:
getalGegokt,uitkomstTekst. - Je kan een variabele later een nieuwe waarde geven:
getal = 11;(zondervaropnieuw).
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.
Synthese
- Een variabele maak je met
var naam = waarde;. - Types: number, string, boolean, undefined. Tekst staat tussen quotes, een variabele niet.
- JavaScript is hoofdlettergevoelig.
typeofgeeft het type;"15" + 5geeft"155".
Verwerk wat je hierboven las met de onderdelen hieronder. Ze horen bij deze theorie.
🧪 Oefeningen — 2 Variabelen en datatypes
Typ je code in het vak en klik op "Controleer". Je code wordt nagekeken op de vereiste onderdelen (waar een Voorbeeld-knop staat, kan je je pagina ook meteen bekijken). Je code wordt bewaard als je aangemeld bent.
Maak vier variabelen: getal met de waarde 10, kommagetal met de waarde 20.56, tekst met de tekst Dit is een stukje tekst en juist met de boolean true. Toon daarna de tekst met alert().
Maak een variabele leeftijd met een getal en een variabele naam met een tekst. Toon met console.log(typeof …) het type van beide.
Maak de variabelen naam (een tekst) en leeftijd (een getal). Toon met één alert een zin zoals Sem is 17 jaar, door tekst en variabelen met het plusteken te combineren.
🔍 Opzoekwerk — 2 Variabelen en datatypes
Zoek het antwoord zelf op (internet, cursus, ...) en typ het hieronder. Wordt automatisch bewaard.
Tip: zoek op "var let const verschil scope".
✓ opgeslagenTip: null, undefined, object, symbol, bigint.
✓ opgeslagen✅ Testjezelf-quiz — 2 Variabelen en datatypes
Beantwoord alle vragen en klik daarna op "Controleer". Je mag zo vaak opnieuw proberen als je wil.
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.
2.3.2 Vergelijkingsoperatoren
Met JavaScript vergelijk je ook getallen en tekst. Het resultaat van een vergelijking is altijd een boolean: true of false.
| Operator | Betekent |
|---|---|
=== | 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 |
= 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.
| Operator | Betekent |
|---|---|
&& | 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. |
Zet haakjes om je voorwaarden duidelijk te maken: (a === b) && (c !== d). Zonder haakjes geldt: eerst !, dan &&, dan ||.
Synthese
=kent een waarde toe;===vergelijkt.- Rekenen: + − * / en % (rest); verkort: += -= ++ --.
- Vergelijken geeft true of false: === !== > < >= <=.
- Logisch: && (en), || (of), ! (niet).
Verwerk wat je hierboven las met de onderdelen hieronder. Ze horen bij deze theorie.
🧪 Oefeningen — 3 Operatoren
Typ je code in het vak en klik op "Controleer". Je code wordt nagekeken op de vereiste onderdelen (waar een Voorbeeld-knop staat, kan je je pagina ook meteen bekijken). Je code wordt bewaard als je aangemeld bent.
Schrijf op elke regel wat de browser bij die alert() zal tonen (het nummer staat als commentaar in het script hierboven). Controleer daarna met Uitvoeren.
Maak variabelen a = 17 en b = 5. Toon met console.log() de som, het verschil, het product, het quotiënt en de rest van a en b.
Begin met var punten = 10;. Verhoog met += met 5, verdubbel met *= (2) en verhoog met ++ met 1. Toon het resultaat met console.log(punten); (het moet 31 zijn).
🔍 Opzoekwerk — 3 Operatoren
Zoek het antwoord zelf op (internet, cursus, ...) en typ het hieronder. Wordt automatisch bewaard.
Tip: zoek op "javascript == vs === type coercion".
✓ opgeslagenTip: probeer "abc" * 2.
✓ opgeslagen✅ Testjezelf-quiz — 3 Operatoren
Beantwoord alle vragen en klik daarna op "Controleer". Je mag zo vaak opnieuw proberen als je wil.
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");
}- De voorwaarde staat tussen haakjes, het bijhorende programma tussen accolades { }.
- Achter de accolade sluiten komt geen puntkomma.
ifschrijf 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.
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.
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.
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.
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.
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.
Synthese
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.switchmetcase,breakendefaultis een alternatief.- Vergelijk met
===; tekst is hoofdlettergevoelig.
Verwerk wat je hierboven las met de onderdelen hieronder. Ze horen bij deze theorie.
🧪 Oefeningen — 4 Conditionele statements
Typ je code in het vak en klik op "Controleer". Je code wordt nagekeken op de vereiste onderdelen (waar een Voorbeeld-knop staat, kan je je pagina ook meteen bekijken). Je code wordt bewaard als je aangemeld bent.
Schrijf per statement (nummer 1 t/m 13) true (er komt een melding) of false (geen melding). Voer daarna het script uit om te controleren.
In elk statement zit één fout. Verbeter de code zodat ze klopt: statement 1 mist een aanhalingsteken, statement 2 heeft “if else” in plaats van “else if” en statement 3 geeft een else een voorwaarde (dat kan niet).
Maak een variabele getal met de waarde 7. Toon met een if … else en de restoperator % de melding even of oneven.
Maak var punten = 72;. Toon met if / else if / else: onvoldoende (minder dan 50), voldoende (minder dan 70) of onderscheiding (70 of meer).
Maak var dag = 3; en gebruik een switch die voor 1 “maandag”, voor 2 “dinsdag”, voor 3 “woensdag” en voor alle andere waarden “een andere dag” toont.
🔍 Opzoekwerk — 4 Conditionele statements
Zoek het antwoord zelf op (internet, cursus, ...) en typ het hieronder. Wordt automatisch bewaard.
Tip: leesbaarheid bij veel vaste waarden.
✓ opgeslagenTip: zoek op "javascript falsy values".
✓ opgeslagen✅ Testjezelf-quiz — 4 Conditionele statements
Beantwoord alle vragen en klik daarna op "Controleer". Je mag zo vaak opnieuw proberen als je wil.
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.
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 * 11kan korter:getal *= 11;. Hetzelfde geldt voor de andere toewijzingsoperatoren.
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).
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.
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.)
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).
Synthese
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()enparseFloat().
Verwerk wat je hierboven las met de onderdelen hieronder. Ze horen bij deze theorie.
🧪 Oefeningen — 5 Random, prompt, confirm en parse
Typ je code in het vak en klik op "Controleer". Je code wordt nagekeken op de vereiste onderdelen (waar een Voorbeeld-knop staat, kan je je pagina ook meteen bekijken). Je code wordt bewaard als je aangemeld bent.
Maak een programma dat vraagt welke waarde je denkt dat er gerold zal worden met een dobbelsteen (1 tot 6). Simuleer daarna zelf een dobbelsteen. Is de gok gelijk aan de gesimuleerde worp, dan krijgt de gebruiker een melding dat hij gewonnen heeft, anders een melding dat hij het nogmaals moet proberen. Zet de gok om in een getal met parseInt(). (Vul een gok in het vak Antwoorden in.)
Toon in een alert een willekeurig geheel getal van 1 tot en met 100.
Vraag met confirm() “Wil je verdergaan?” en toon in een if-else de melding Ok, we gaan verder of Gestopt. (Vul ja of nee in het antwoordenvak in.)
Vraag met twee prompt()-vragen twee getallen, zet ze om met parseFloat() en toon de som. (Vul twee getallen in het antwoordenvak in.)
🔍 Opzoekwerk — 5 Random, prompt, confirm en parse
Zoek het antwoord zelf op (internet, cursus, ...) en typ het hieronder. Wordt automatisch bewaard.
Tip: zoek op "javascript Math object".
✓ opgeslagenTip: (3.14159).toFixed(2)
✓ opgeslagen✅ Testjezelf-quiz — 5 Random, prompt, confirm en parse
Beantwoord alle vragen en klik daarna op "Controleer". Je mag zo vaak opnieuw proberen als je wil.
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:
Startwaarde
var i = 0: waarmee de teller begint (meestal 0).
Voorwaarde
i < 10: de lus loopt zolang dit waar is.
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”.
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).
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.
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.
Synthese
- 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.
Verwerk wat je hierboven las met de onderdelen hieronder. Ze horen bij deze theorie.
🧪 Oefeningen — 6 Lussen
Typ je code in het vak en klik op "Controleer". Je code wordt nagekeken op de vereiste onderdelen (waar een Voorbeeld-knop staat, kan je je pagina ook meteen bekijken). Je code wordt bewaard als je aangemeld bent.
Schrijf een for-lus die 10 keer loopt (i van 0 tot en met 9) en telkens console.log("Variabele i= " + i) uitvoert.
Toon met een for-lus en i += 2 alle even getallen van 0 tot en met 20 in de console.
Toon met een lus de tafel van 7 (van 1 x 7 tot 10 x 7), bv. 3 x 7 = 21.
Bereken met een lus de som van alle getallen van 1 tot en met 100 en toon ze in de console (het moet 5050 zijn).
Maak een programma dat steeds om een voornaam vraagt, tot de gebruiker de naam Franky ingeeft. Dan verschijnt: Proficiat, je hebt de naam geraden na #aantal keer, met #aantal het aantal keer dat de browser de naam vroeg. (Voorbeeld van antwoorden: Jan, Piet, Franky.)
🔍 Opzoekwerk — 6 Lussen
Zoek het antwoord zelf op (internet, cursus, ...) en typ het hieronder. Wordt automatisch bewaard.
Tip: we bespreken arrays verderop in de cursus.
✓ opgeslagenTip: probeer dit nooit in een pagina waar je niets kan verliezen.
✓ opgeslagen✅ Testjezelf-quiz — 6 Lussen
Beantwoord alle vragen en klik daarna op "Controleer". Je mag zo vaak opnieuw proberen als je wil.
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!
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.
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.
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.
Synthese
function naam(parameters) { … }maakt een functie;naam(argumenten);roept ze op.returngeeft 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.
Verwerk wat je hierboven las met de onderdelen hieronder. Ze horen bij deze theorie.
🧪 Oefeningen — 7 Functies
Typ je code in het vak en klik op "Controleer". Je code wordt nagekeken op de vereiste onderdelen (waar een Voorbeeld-knop staat, kan je je pagina ook meteen bekijken). Je code wordt bewaard als je aangemeld bent.
Maak een functie EersteFunctie() die “Mijn eerste functie” toont met alert() en roep ze twee keer op.
Maak TweedeFunctie(voornaam) die “De gekozen naam: …” toont en roep ze op voor Jan, Piet, Joris en Corneel.
Maak een functie som(a, b) die de som teruggeeft (met return). Roep ze op met 4 en 9 en toon het resultaat in de console (13).
Maak een functie grootste(a, b) die met een if het grootste getal teruggeeft. Toon grootste(12, 30) in de console (30).
🔍 Opzoekwerk — 7 Functies
Zoek het antwoord zelf op (internet, cursus, ...) en typ het hieronder. Wordt automatisch bewaard.
Tip: setTimeout(function() { … }, 1000);
✓ opgeslagenTip: zoek op "javascript function hoisting".
✓ opgeslagen✅ Testjezelf-quiz — 7 Functies
Beantwoord alle vragen en klik daarna op "Controleer". Je mag zo vaak opnieuw proberen als je wil.
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");
} 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.
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 ' en in plaats van " schrijf je ".
<button type="button" onclick="toonMelding('l’arbre')">
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.
Synthese
- Een event is iets dat de gebruiker doet (klik, wijziging, toets …).
onclick="functie()"enonchange="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'. addEventListener("click", functie)doet hetzelfde vanuit je script.
Verwerk wat je hierboven las met de onderdelen hieronder. Ze horen bij deze theorie.
🧪 Oefeningen — 8 Events
Typ je code in het vak en klik op "Controleer". Je code wordt nagekeken op de vereiste onderdelen (waar een Voorbeeld-knop staat, kan je je pagina ook meteen bekijken). Je code wordt bewaard als je aangemeld bent.
Er staan vijf knoppen (groen, rood, geel, oranje, blauw) die allemaal de functie kleuren(kleur) oproepen. Schrijf de functie: enkel bij de oranje knop krijgt de gebruiker de melding oranje was de juiste kleur; bij alle andere Dit is niet de juiste kleur.
Schrijf een volledige pagina met vijf knoppen (groen, rood, geel, oranje, blauw). Elke knop roept via onclick dezelfde functie kleuren() op met de kleur als parameter. De functie werkt zoals in de vorige oefening.
Bij het invoerveld staat onchange="groet(this.value)" (this.value is wat je typde). Schrijf de functie groet(naam) die “Hallo …!” toont. Typ een naam en druk op Enter of klik ernaast.
🔍 Opzoekwerk — 8 Events
Zoek het antwoord zelf op (internet, cursus, ...) en typ het hieronder. Wordt automatisch bewaard.
Tip: zoek op "HTML DOM events".
✓ opgeslagenTip: this verwijst naar het element waarop je klikte.
✓ opgeslagen✅ Testjezelf-quiz — 8 Events
Beantwoord alle vragen en klik daarna op "Controleer". Je mag zo vaak opnieuw proberen als je wil.
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.jsIn js/main.js staat enkel JavaScript, zonder <script>-tags:
js/main.jsfunction toonMelding() {
alert("Er is op de knop gedrukt");
}- Een script-tag met
srcheeft 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
- Intern: in het HTML-bestand tussen script-tags. Extern: een
.js-bestand in de mapjs. - Oproepen met
<script src="js/main.js"></script>. - In het externe bestand staat geen script-tag.
Verwerk wat je hierboven las met de onderdelen hieronder. Ze horen bij deze theorie.
🧪 Oefeningen — 9 Opslaglocatie van je script
Typ je code in het vak en klik op "Controleer". Je code wordt nagekeken op de vereiste onderdelen (waar een Voorbeeld-knop staat, kan je je pagina ook meteen bekijken). Je code wordt bewaard als je aangemeld bent.
Schrijf de script-tag die het bestand main.js uit de map js inlaadt, en beantwoord daarna de vragen.
🔍 Opzoekwerk — 9 Opslaglocatie van je script
Zoek het antwoord zelf op (internet, cursus, ...) en typ het hieronder. Wordt automatisch bewaard.
Tip: snelheid en caching.
✓ opgeslagen✅ Testjezelf-quiz — 9 Opslaglocatie van je script
Beantwoord alle vragen en klik daarna op "Controleer". Je mag zo vaak opnieuw proberen als je wil.
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>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.
BMI = massa (kg) / (lengte in m)². Bijvoorbeeld 70 kg en 175 cm: 70 / 1,75² = 22,9.
| BMI | Gewichtstoestand | Kleur in de opdracht |
|---|---|---|
| minder dan 18,5 | ondergewicht | oranje |
| 18,5 tot minder dan 25 | gezond gewicht | groen |
| 25 tot minder dan 30 | overgewicht | oranje |
| 30 of meer | obesitas | rood |
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:
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.
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
- 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)².
Verwerk wat je hierboven las met de onderdelen hieronder. Ze horen bij deze theorie.
🧪 Oefeningen — 10 jQuery: de basis
Typ je code in het vak en klik op "Controleer". Je code wordt nagekeken op de vereiste onderdelen (waar een Voorbeeld-knop staat, kan je je pagina ook meteen bekijken). Je code wordt bewaard als je aangemeld bent.
Schrijf de formule voor de BMI en de grenswaarden voor ondergewicht, gezond gewicht, overgewicht en obesitas (gebruik een komma of punt voor het decimaal teken).
Schrijf de functie berekenBMI() die de melding Er werd op de knop gedrukt toont. Klik daarna op Bereken.
Lees de lengte (cm) en de massa (kg) uit met jQuery, bereken de BMI en toon ze in een melding. Vul bv. 175 en 70 in: de BMI is 22,9.
🔍 Opzoekwerk — 10 jQuery: de basis
Zoek het antwoord zelf op (internet, cursus, ...) en typ het hieronder. Wordt automatisch bewaard.
Tip: zoek op "jQuery geschiedenis John Resig" en "vanilla JavaScript".
✓ opgeslagenTip: spiermassa weegt zwaarder dan vet.
✓ opgeslagen✅ Testjezelf-quiz — 10 jQuery: de basis
Beantwoord alle vragen en klik daarna op "Controleer". Je mag zo vaak opnieuw proberen als je wil.
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);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.
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).
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.
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
.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.
Verwerk wat je hierboven las met de onderdelen hieronder. Ze horen bij deze theorie.
🧪 Oefeningen — 11 jQuery: waarden, html en styling
Typ je code in het vak en klik op "Controleer". Je code wordt nagekeken op de vereiste onderdelen (waar een Voorbeeld-knop staat, kan je je pagina ook meteen bekijken). Je code wordt bewaard als je aangemeld bent.
Vul de functie aan: toon de BMI (op 1 decimaal met toFixed(1)) in #uitkomstWaarde en toon met alert de gewichtstoestand: ondergewicht (BMI < 18,5), gezond gewicht (< 25), overgewicht (< 30) of obesitas.
Vervang de alerts door $("#uitkomstTekst").html(toestand): bewaar de gewichtstoestand eerst in een variabele toestand en toon ze dan op de pagina.
Kleur de gewichtstoestand met css(): gezond gewicht is groen, ondergewicht en overgewicht oranje, obesitas rood.
🔍 Opzoekwerk — 11 jQuery: waarden, html en styling
Zoek het antwoord zelf op (internet, cursus, ...) en typ het hieronder. Wordt automatisch bewaard.
Tip: html() interpreteert tags, text() niet.
✓ opgeslagenTip: probeer ze uit met een eigen knop.
✓ opgeslagen✅ Testjezelf-quiz — 11 jQuery: waarden, html en styling
Beantwoord alle vragen en klik daarna op "Controleer". Je mag zo vaak opnieuw proberen als je wil.
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.
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
actionenmethodvoorlopig weg (die komen later aan bod). - Bij de input voeg je required toe.
- De knop verandert van
type="button"naartype="submit". Deonclickverdwijnt: nu start je functie via$("#berekenForm").submit(function () { … });.
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.
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
- Een leeg veld geeft
"". Controleer met een if en stop metreturn. - 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.
Verwerk wat je hierboven las met de onderdelen hieronder. Ze horen bij deze theorie.
🧪 Oefeningen — 12 Invoer controleren en formulieren
Typ je code in het vak en klik op "Controleer". Je code wordt nagekeken op de vereiste onderdelen (waar een Voorbeeld-knop staat, kan je je pagina ook meteen bekijken). Je code wordt bewaard als je aangemeld bent.
Vul de functie aan: zijn lengte of massa leeg, toon dan de melding Niet alle waardes zijn ingevuld en stop (return). Zijn ze wel ingevuld, toon dan de BMI in #uitkomstWaarde.
Het formulier is al gemaakt (met required). Schrijf de code die bij het submit van #berekenForm de pagina niet herlaadt, de BMI berekent en in #uitkomstWaarde toont.
Beantwoord kort met één woord of code.
🔍 Opzoekwerk — 12 Invoer controleren en formulieren
Zoek het antwoord zelf op (internet, cursus, ...) en typ het hieronder. Wordt automatisch bewaard.
Tip: zoek op "HTML5 form validation attributes".
✓ opgeslagenTip: de server (PHP) moet altijd zelf ook controleren.
✓ opgeslagen✅ Testjezelf-quiz — 12 Invoer controleren en formulieren
Beantwoord alle vragen en klik daarna op "Controleer". Je mag zo vaak opnieuw proberen als je wil.
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.
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.
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.
Synthese
- 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.
Verwerk wat je hierboven las met de onderdelen hieronder. Ze horen bij deze theorie.
🧪 Oefeningen — 13 jQuery met variabelen en classes
Typ je code in het vak en klik op "Controleer". Je code wordt nagekeken op de vereiste onderdelen (waar een Voorbeeld-knop staat, kan je je pagina ook meteen bekijken). Je code wordt bewaard als je aangemeld bent.
Schrijf kleuren(kleur): de knop met die id krijgt de achtergrondkleur van de parameter en een witte tekstkleur.
Schrijf ook reset(): alle knoppen (class resetKleur) krijgen een witte achtergrond en een blauwe tekstkleur. Werk zowel kleuren() als reset() uit.
Zonder onclick: koppel met $(".resetKleur").click(function () { … }) een functie aan alle knoppen. Toon in de console de tekst van de aangeklikte knop met $(this).text() en geef die knop een gouden achtergrond.
🔍 Opzoekwerk — 13 jQuery met variabelen en classes
Zoek het antwoord zelf op (internet, cursus, ...) en typ het hieronder. Wordt automatisch bewaard.
Tip: de selector-speeltuin in hoofdstuk 10 helpt je om ze uit te proberen.
✓ opgeslagenTip: een lus over alle elementen met die class.
✓ opgeslagen✅ Testjezelf-quiz — 13 jQuery met variabelen en classes
Beantwoord alle vragen en klik daarna op "Controleer". Je mag zo vaak opnieuw proberen als je wil.
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
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!).
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.
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.
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.
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
- 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.
Verwerk wat je hierboven las met de onderdelen hieronder. Ze horen bij deze theorie.
🧪 Oefeningen — 14 Project: de rekenmachine
Typ je code in het vak en klik op "Controleer". Je code wordt nagekeken op de vereiste onderdelen (waar een Voorbeeld-knop staat, kan je je pagina ook meteen bekijken). Je code wordt bewaard als je aangemeld bent.
Zorg dat een cijfer op het scherm (#resultaat) verschijnt. Bij het begin van een nieuw getal (#nieuw is “ja”) vervang je het scherm en zet je #nieuw op “nee”; anders plak je het cijfer achter het scherm.
Werk de cijfers uit (stap 1) en daarnaast: als je op een bewerking (class bewerking) drukt, bewaar je het schermgetal in #getal1, de bewerking in #bewerking en zet je #nieuw weer op “ja”.
Werk de hele rekenmachine uit: cijfers, bewerkingen én het gelijkheidsteken (id is) dat met parseFloat beide getallen omzet, met een if-else-if de bewerking (+, -, ×, ÷) uitvoert en de uitkomst op het scherm toont. Test: 8 ÷ 4 = 2 en 7 × 6 = 42.
🔍 Opzoekwerk — 14 Project: de rekenmachine
Zoek het antwoord zelf op (internet, cursus, ...) en typ het hieronder. Wordt automatisch bewaard.
Tip: veiligheid; zoek op "eval is evil".
✓ opgeslagenTip: zoek op "floating point" en toFixed / toPrecision.
✓ opgeslagen✅ Testjezelf-quiz — 14 Project: de rekenmachine
Beantwoord alle vragen en klik daarna op "Controleer". Je mag zo vaak opnieuw proberen als je wil.
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.
Elementen toevoegen en verwijderen
| Methode | Wat 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 |
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).
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.
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”.
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.
Synthese
- Array:
[a, b, c], index vanaf 0,.length,push/pop. - Object:
{ sleutel: waarde }, lezen metobject.sleutel. - Lus over een array: for, for…of of forEach;
filterenmapgeven een nieuwe array. - JSON:
JSON.stringify()enJSON.parse().
Verwerk wat je hierboven las met de onderdelen hieronder. Ze horen bij deze theorie.
🧪 Oefeningen — 15 Uitbreiding: arrays en objecten
Typ je code in het vak en klik op "Controleer". Je code wordt nagekeken op de vereiste onderdelen (waar een Voorbeeld-knop staat, kan je je pagina ook meteen bekijken). Je code wordt bewaard als je aangemeld bent.
Maak een array namen met “Jan”, “Piet” en “Joris”. Voeg met push “Corneel” toe en toon het aantal (4) en het eerste element in de console.
Gegeven var punten = [12, 7, 15, 9, 17];. Bereken met een lus de som en toon in de console het gemiddelde (12).
Maak een object boek met de eigenschappen titel (“De Hobbit”), jaar (1937) en gelezen (true). Toon de titel en het jaar in de console.
Gegeven var punten = [8, 12, 5, 15, 9, 18];. Maak met filter() een nieuwe array geslaagd met de punten van 10 of meer en toon ze in de console.
🔍 Opzoekwerk — 15 Uitbreiding: arrays en objecten
Zoek het antwoord zelf op (internet, cursus, ...) en typ het hieronder. Wordt automatisch bewaard.
Tip: zoek op "MDN Array methods".
✓ opgeslagenTip: open de URL in je browser.
✓ opgeslagen✅ Testjezelf-quiz — 15 Uitbreiding: arrays en objecten
Beantwoord alle vragen en klik daarna op "Controleer". Je mag zo vaak opnieuw proberen als je wil.
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.
| jQuery | Wat 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 |
.length | aantal 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.
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:
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.
Synthese
- 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 () {…}).
Verwerk wat je hierboven las met de onderdelen hieronder. Ze horen bij deze theorie.
🧪 Oefeningen — 16 Uitbreiding: een dynamische pagina
Typ je code in het vak en klik op "Controleer". Je code wordt nagekeken op de vereiste onderdelen (waar een Voorbeeld-knop staat, kan je je pagina ook meteen bekijken). Je code wordt bewaard als je aangemeld bent.
Schrijf de code voor de knop #voegToe: zit er tekst in #taak, dan voeg je een <li> met die tekst toe aan #lijst en maak je het invoerveld leeg. Bij een lege invoer gebeurt er niets.
Zorg dat je een taak verwijdert door erop te dubbelklikken, ook als ze pas later is toegevoegd (gedelegeerd event). Werk ook het aantal taken bij in #teller.
Tel met each() alle prijzen (class prijs) op en toon het totaal met twee decimalen in #totaal.
🔍 Opzoekwerk — 16 Uitbreiding: een dynamische pagina
Zoek het antwoord zelf op (internet, cursus, ...) en typ het hieronder. Wordt automatisch bewaard.
Tip: je wijzigt enkel je eigen kopie in de browser.
✓ opgeslagenTip: localStorage.setItem("sleutel", JSON.stringify(array)).
✓ opgeslagen✅ Testjezelf-quiz — 16 Uitbreiding: een dynamische pagina
Beantwoord alle vragen en klik daarna op "Controleer". Je mag zo vaak opnieuw proberen als je wil.
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:
| Soort | Voorbeeld | Wat gebeurt er? |
|---|---|---|
| Syntaxfout | een haakje of quote vergeten | het script start helemaal niet (SyntaxError) |
| Uitvoeringsfout | een variabele gebruiken die niet bestaat | het script stopt op die regel (ReferenceError, TypeError) |
| Logische fout | delen door het verkeerde getal | geen 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.
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.
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.
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.
Debuggen: zo zoek je een fout
Lees de melding
Open de console (F12). Type, uitleg en regelnummer vertellen je waar het misliep.
Controleer met console.log
Toon de waarden van je variabelen vóór en na de plek waar het fout gaat.
Verklein het probleem
Zet stukken code in commentaar tot het werkt, en voeg ze één voor één terug toe.
Gebruik breakpoints
In F12 → Sources zet je een breakpoint en loop je regel per regel door de code.
Synthese
- 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.
Verwerk wat je hierboven las met de onderdelen hieronder. Ze horen bij deze theorie.
🧪 Oefeningen — 17 Uitbreiding: fouten afhandelen
Typ je code in het vak en klik op "Controleer". Je code wordt nagekeken op de vereiste onderdelen (waar een Voorbeeld-knop staat, kan je je pagina ook meteen bekijken). Je code wordt bewaard als je aangemeld bent.
Roep JSON.parse("dit is geen json") aan binnen een try. Vang de fout op en toon in de console “Ongeldige gegevens” én een finally met “Klaar”.
Maak een functie wortel(x) die een fout opwerpt met de tekst Geen negatief getal als x kleiner is dan 0 en anders Math.sqrt(x) teruggeeft. Roep ze op met 16 en met −4 (in een try … catch) en toon de resultaten of de foutmelding.
Vraag met prompt() een getal. Is de invoer geen getal (gebruik isNaN()), toon dan “Dat is geen getal”; anders toon je het dubbele. (Vul “abc” of “21” in het antwoordenvak in.)
🔍 Opzoekwerk — 17 Uitbreiding: fouten afhandelen
Zoek het antwoord zelf op (internet, cursus, ...) en typ het hieronder. Wordt automatisch bewaard.
Tip: zoek op "MDN JavaScript errors".
✓ opgeslagenTip: F12 → Sources.
✓ opgeslagen✅ Testjezelf-quiz — 17 Uitbreiding: fouten afhandelen
Beantwoord alle vragen en klik daarna op "Controleer". Je mag zo vaak opnieuw proberen als je wil.
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.
| Begrip | Uitleg | Voorbeeld (auto) |
|---|---|---|
| klasse | de bouwtekening | class Auto |
| object / instantie | een concreet exemplaar | mijn rode Volkswagen |
| eigenschap | een gegeven van het object | kleur, merk, snelheid |
| methode | een functie van het object | rijden(), remmen() |
| constructor | zet het object klaar bij het aanmaken | constructor(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.
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.
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().
Synthese
- 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(). extendslaat een klasse alles van een andere overnemen (overerving).
Verwerk wat je hierboven las met de onderdelen hieronder. Ze horen bij deze theorie.
🧪 Oefeningen — 18 Uitbreiding: objecten en klassen (OOP)
Typ je code in het vak en klik op "Controleer". Je code wordt nagekeken op de vereiste onderdelen (waar een Voorbeeld-knop staat, kan je je pagina ook meteen bekijken). Je code wordt bewaard als je aangemeld bent.
Maak een klasse Rechthoek met een constructor (breedte en hoogte) en de methodes oppervlakte() en omtrek(). Maak een rechthoek van 5 bij 3 en toon de oppervlakte (15) en de omtrek (16) in de console.
Maak een klasse Leerling met naam en een lege array punten. Voeg de methodes voegPuntToe(punt) (met push) en gemiddelde() toe. Maak “Marie”, geef haar de punten 12 en 16 en toon haar gemiddelde (14).
Gegeven de klasse Dier hieronder. Maak een klasse Kat die van Dier erft (extends) en de methode maakGeluid() overschrijft: “naam zegt miauw!”. Maak Kat “Mia” en toon haar geluid.
🔍 Opzoekwerk — 18 Uitbreiding: objecten en klassen (OOP)
Zoek het antwoord zelf op (internet, cursus, ...) en typ het hieronder. Wordt automatisch bewaard.
Tip: denk aan auto’s of dieren.
✓ opgeslagenTip: een static methode roep je op met de klassenaam, niet met een object.
✓ opgeslagen✅ Testjezelf-quiz — 18 Uitbreiding: objecten en klassen (OOP)
Beantwoord alle vragen en klik daarna op "Controleer". Je mag zo vaak opnieuw proberen als je wil.
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:
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.
$.ajax() met POST
In jQuery gebruik je $.ajax() met een object vol instellingen:
| Instelling | Betekenis |
|---|---|
url | het PHP-bestand dat het verzoek verwerkt |
method | de manier van versturen: "POST" (gegevens versturen) of "GET" |
data | een object met de gegevens die je meestuurt (PHP leest ze in $_POST) |
dataType | het soort antwoord dat je verwacht: "json" |
success | de functie die loopt als het antwoord binnenkomt (krijgt het antwoord als parameter) |
error | de 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.");
}
});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) . '!']);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:
Synthese
- 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
$_POSTen antwoordt metjson_encode(…). - Controleer altijd ook in PHP en geef fouten netjes weer met de
error-functie.
Verwerk wat je hierboven las met de onderdelen hieronder. Ze horen bij deze theorie.
🧪 Oefeningen — 19 AJAX: gegevens uitwisselen met de server
Typ je code in het vak en klik op "Controleer". Je code wordt nagekeken op de vereiste onderdelen (waar een Voorbeeld-knop staat, kan je je pagina ook meteen bekijken). Je code wordt bewaard als je aangemeld bent.
Schrijf een $.ajax()-oproep (op papier of hier; ze wordt niet uitgevoerd) die met POST naar groet.php de naam uit het veld #naam verstuurt, een JSON-antwoord verwacht en in success de tekst antwoord.tekst in #uit plaatst.
Breid de oproep uit: voeg een error-functie toe die in #uit de tekst “De server is niet bereikbaar.” toont. Controleer in success ook antwoord.ok met een if.
Het antwoord van de server is een lijst van leerlingen (zie het voorbeeld hierboven). Schrijf de code die voor elke leerling een tabelrij met id, naam en klas toevoegt aan #tabel. Het antwoord staat al in de variabele.
🔍 Opzoekwerk — 19 AJAX: gegevens uitwisselen met de server
Zoek het antwoord zelf op (internet, cursus, ...) en typ het hieronder. Wordt automatisch bewaard.
Tip: zoek op "fetch API POST JSON".
✓ opgeslagenTip: same-origin policy.
✓ opgeslagen✅ Testjezelf-quiz — 19 AJAX: gegevens uitwisselen met de server
Beantwoord alle vragen en klik daarna op "Controleer". Je mag zo vaak opnieuw proberen als je wil.
⚠️ Je verliet deze pagina
Je wisselde van tabblad (of verliet de pagina) terwijl je bezig was met een oefening, opdracht of zelftest. Dit werd geregistreerd als het verlaten van de oefening en kan als vals spelen bestempeld worden.