Inhoud

  1. Geen paragrafen H1 - Voorwoord
  2. Geeft paragrafen weer H2 - Wat is JavaScript?
    1. §1. Wat kun je met JavaScript?
    2. §2. De script-tag
    3. §3. Opdrachten
  3. Geeft paragrafen weer H3 - Statements (opdrachten)
    1. §1. Wat zijn statements?
    2. §2. Functie document.write
    3. §3. Commentaar
    4. §4. Functie alert
    5. §5. Opdrachten
  4. Geeft paragrafen weer H4 - Variabelen
    1. §1. Wat is een variabele?
    2. §2. Variabelen maken en gebruiken
    3. §3. Functie prompt
    4. §4. Operatoren
    5. §5. Strings
    6. §6. Opdrachten
  5. Geeft paragrafen weer H5 - Functies
    1. §1. Wat is een functie?
    2. §2. Functies maken en gebruiken
    3. §3. Functies die iets teruggeven
    4. §4. Parameters en argumenten
    5. §5. De scope van variabelen
    6. §6. Expressies
    7. §7. Functie parseInt
    8. §8. Opdrachten
  6. Geeft paragrafen weer H6 - Loops en voorwaardes
    1. §1. Wat zijn loops en voorwaardes?
    2. §2. Het if-else statement
    3. §3. Vergelijkingen en hun operatoren
    4. §4. Functie confirm
    5. §5. Het switch-statement
    6. §6. De while-loop
    7. §7. De for-loop
    8. §8. Stoppen door break
    9. §9. Opdrachten
  7. Geeft paragrafen weer H7 - Events
    1. §1. Wat is een event?
    2. §2. Events maken en gebruiken
    3. §3. Welke events zijn er?
    4. §4. Variabele this
    5. §5. Event-object
    6. §6. Opdrachten
  8. Geeft paragrafen weer H8 - Arrays
    1. §1. Wat is een Array?
    2. §2. Een Array maken en gebruiken
    3. §3. Een Array doorlopen
    4. §4. Een associatieve array
    5. §5. De for-in loop
    6. §6. Opdrachten
  9. Geeft paragrafen weer H9 - Objecten
    1. §1. Wat is een object?
    2. §2. Verschil object en variabele
    3. §3. Eigenschappen
    4. §4. Methodes
    5. §5. Eigenschappen en methodes
    6. §6. Opdrachten
  10. Geeft paragrafen weer H10 - Globale objecten
    1. §1. Het window-object
    2. §2. Het document-object
    3. §3. Het Math-object
    4. §4. Standaard HTML-Element-object
    5. §5. Een HTML-Table-object
    6. §6. Opdrachten

10. Globale objecten

Naar boven

10.1. Het window-object

Het window-object gebruik je veel maar dat merk je nooit. Het eigenaardige aan dit object is namelijk dat dit het enige geval is waarbij je de objectnaam en dan de punt mag weglaten. Zo heb je de functie alert() al vaak gebruikt, maar eigenlijk is dat een methode van window terwijl je niet hoeft te typen window.alert() (wat overigens wel mag).

Je mag de naam window dus weglaten. Je hoeft het enkel te weten om te snappen waarom ergens soms window.alert() of window.document.getElementById() staat in plaats van gewoon alert() of document.getElementById(). Zelf hoef je nooit window. te typen, tenzij je dat natuurlijk overzichtelijker vindt.

Het window-object bevat nog twee handige methoden die je vaak zult gebruiken, window.setTimeout() en window.setInterval() Of zoals je het dus ook kan noemen: setTimeout() en setInterval(). Ze hebben beide 2 argumenten nodig, het eerste is een string die een stukje JavaScript bevat, het tweede een aantal milliseconden. Vervolgens wordt het stukje JavaScript in de string na het gegeven aantal milliseconden uitgevoerd. In het gevan van setTimeout() wordt het eenmalig uitgevoerd, in het geval van setInterval() wordt het elke keer weer opnieuw uitgevoerd na het gegeven aantal milliseconden.

JavaScript:
  1. setTimeout('alert("Mij zie je na 5 seconden!");', 5000); // 5000 ms = 5s
  2. setInterval('alert("Mij zie je elke 3.5 seconden!");', 3500); // 3500 ms = 3.5s

Soms wil je een time-out of interval stoppen. Zeker bij een interval kan dat handig zijn. Zodra je een van die twee functies aanroept geeft die een ID terug, dat ID kun je dan opslaan in een variabele en kun je later weer gebruiken om de timer te stoppen. Merk op dat als je de timer stopt de code dus niet meer uitgevoerd wordt. Het stoppen van die timer gaat met clearTimeout() voor time-outs en clearInterval() voor een interval. Als argument geef je dan het ID van de time-out of interval die je wilt stoppen aan de functie mee.

JavaScript:
  1. var id = setTimeout('alert("Mij zie je na 5 seconden!");', 5000); // Sla het ID op in een variabele
  2. clearTimeout(id); // Stop de timer
Naar boven

10.2. Het document-object

Het document-object heb je ook al eens gebruikt. Het is deel van het window-object, maar zoals beschreven in H10.2 hoef je window niet te noemen. Je kan dus window.document typen, maar ook document.

Het document-object stelt het gehele HTML-document voor. Dus alle HTML-tags, plaatjes, links, formulieren, noem maar op. Het document-object bevat dan ook methodes en eigenschappen om die dingen op te vragen en te bewerken. Zo bevat document altijd vier arrays:

Naam arrayZo gebruik je hemBevat
anchorsdocument.anchorsAlle anchors uit het HTML-document (a-elementen met het attribuut name).
imagesdocument.imagesAlle img-elementen uit het HTML-document.
formsdocument.formsAlle form-elementen uit het HTML-document.
linksdocument.linksAlle links (dat kunnen a-elementen en area-elementen zijn) uit het HTML-document.

Zo kun je bijvoorbeeld aangeven hoeveel plaatjes er op je webpagina staan.

JavaScript:
  1. function telPlaatjes()
  2. {
  3. alert("Deze pagina bevat " + document.images.length + " plaatjes.");
  4. }
  5. window.onload = telPlaatjes; // Omdat de HTML eerst geladen moet worden voordat de JavaScript uitgevoerd kan worden (gezien de JavaScript de HTML gebruikt)

HTML:
  1. <img src="img/plaatje.png" alt="Een plaatje" /><br />
  2. <img src="img/plaatje2.png" alt="Nog een plaatje" />

Aangezien die arrays HTML-elementen bevatten kan je die HTML-elementen ook aanpassen via die array.

JavaScript:
  1. function veranderTekst()
  2. {
  3. for(var i=0; i<document.anchors.length; ++i)
  4. {
  5. document.anchors[i].innerHTML = "Hello world!"; // Pas de tekst van het a-element aan
  6. }
  7. alert("In alle anchors staat nu de tekst Hello world!");
  8. }
  9. window.onload = veranderTekst;

HTML:
  1. <a name="een naam">Tekst</a><br />
  2. <a href="pagina.html">Nog wat tekst</a><br />
  3. <a name="nog een naam" href="pagina2.html">En nog wat tekst!</a>

De eigenschap body is ook wel noemenswaardig, document.body verwijst gewoon naar de body van de HTML. Dus het body-element.

Verder bevat hij de volgende handige methodes:

MethodeZo gebruik je hemWat doet hij
getElementById()document.getElementById("id");Returnt het HTML-element met het gegeven id, als dit element niet bestaat wordt de waarde null terug gegeven.
getElementsByTagName()document.getElementsByTagName("tag-naam");Returnt een array van alle HTML-elementen in het document met de gegeven naam (bijvoorbeeld alle b-elementen), als er geen zijn zal de array leeg zijn.

Wat je allemaal met een HTML-element in JavaScript kan wordt uitgelegd in H10.5. Een ding ken je al: innerHTML.

JavaScript:
  1. function veranderTeksten()
  2. {
  3. var alleSpans = document.getElementsByTagName("span");
  4. for(var i=0; i<alleSpans.length; ++i) // Eerst vullen we alle span-elementen met de tekst "How are you?"
  5. {
  6. alleSpans[i].innerHTML = "How are you?";
  7. }
  8. document.getElementById("mijnID").innerHTML = "Hello world!"; // Daarna veranderen we de tekst van alleen het HTML-element met het id "mijnID" in "Hello world!"
  9. }
  10. window.onload = veranderTeksten;

HTML:
  1. <span id="mijnID">Lorem ipsum</span>
  2. <span>dolor sit amet</span>

Ook hier geldt weer dat er meer methodes bestaan, daarvoor verwijs ik wederom naar een naslagwerk: W3Schools JavaScript - Het document-object

Naar boven

10.3. Het Math-object

Met het Math object kun je wiskundige functies en constanten (zoals π) gebruiken. Deze website is niet bedoeld om wiskunde uit te leggen, dus er wordt alleen genoemd wat welke methode doet of wat een eigenschap voorstelt. Er wordt niet uitgelegd wat je er wiskundig mee kan.

MethodeWat doet het
abs(x)Geeft absolute waarde van x
acos(x)Geeft de boogcosinus van x in radialen (ook bekend als de inverse cosinus)
asin(x)Geeft de boosinus van x, in radialen (ook bekend als de inverse sinus)
atan(x)Geeft de boogtangens van x in radialen tussen -π/2 en π/2
atan2(x, y)Geeft de boogtangens van de quotiënt van zijn argumenten
ceil(x)Geeft x, naar boven afgerond
cos(x)Geeft de cosinus van x, in radialen
exp(x)Geeft Ex
floor(x)Geeft x, naar beneden afgerond
log(x)Geeft het natuurlijke logaritme (basis: E) van x
max(a, b, c, ..., z)Geeft het argument met de hoogste waarde terug (aantal argumenten maakt niet uit)
min(a, b, c, ..., z)Geeft het argument met de laagste waarde terug (aantal argumenten maakt niet uit)
pow(x, n)Geeft xn
random()Geeft een willekeurig getal tussen 0 en 1
round(x)Geeft x, afgerond naar het dichtsbijzijnde gehele getal
sin(x)Geeft de sinus van x, in radialen
sqrt(x)Geeft de vierkantswortel van x
tan(x)Geeft de tangens van x, in radialen

De eigenschappen van het Math object zijn constant, dat wil zeggen dat je ze niet aan kan passen.

EigenschapWat stelt het voorIs ongeveer
EEulers constante2.718
LN2Natuurlijk logaritme van 20.693
LN10Natuurlijk logaritme van 102.302
LOG2ELogaritme van E, met basis 21.442
LOG10ELogaritme van E, met basis 100.434
PIπ3.14159
SQRT1_2Vierkantswortel van 1/20.707
SQRT2Vierkantswortel van 21.414

Voorbeeld van gebruik van het Math object:

JavaScript:
  1. var x = prompt("Geef een getal op", "");
  2. alert("De wortel van " + x + " is " + Math.sqrt(x));
Naar boven

10.4. Standaard HTML-Element-object

Wanneer je een variabele in JavaScript hebt die naar een HTML-element verwijst (bijvoorbeeld verkregen van document.getElementById()) dan kun je dat HTML-element aanpassen via die variabele. Zo'n HTML-element is in JavaScript namelijk ook gewoon een object met methodes en eigenschappen. Voor een aantal HTMl elementen zijn natuurlijk specifieke eigenschappen (zoals bijvoorbeeld bij een img-tag het attribuut src ). Maar HTML-elementen hebben ook veel gemeen, in deze paragraaf worden een aantal handige methodes en eigenschappen beschreven die elk HTML-element in JavaScript heeft.

Zoals je al eerder hebt gezien kun je de inhoud van het element aanpassen via innerHTML. Dit vervangt de gehele inhoud, dus ook de tags die er in staan.

JavaScript:
  1. function veranderTekst()
  2. {
  3. var span = document.getElementById("spanTag");
  4. span.innerHTML="Hallo <i>wereld!</i>";
  5. }
  6. window.onload = veranderTekst;

HTML:
  1. <span id="spanTag">Hello <b>world!</b></span>

De CSS-stijl van het element kan ook aangepast worden, via style. Dit is alsof je gewoon CSS zou neerzetten het style-attribuut van dat element. Zo kun je bijvoorbeeld de tekstkleur veranderen wanneer er met de muis overheen gegaan wordt.

JavaScript:
  1. function veranderTekstKleur()
  2. {
  3. this.style.color = "#f00"; // Verander de tekst-kleur van het element waar vanuit de event getriggerd is in rood
  4. }
  5. function maakEvents()
  6. {
  7. var spans = document.getElementsByTagName("span");
  8. for(var i = 0; i < spans.length; ++i)
  9. {
  10. spans[i].onmouseover = veranderTekstKleur;
  11. }
  12. }
  13. window.onload = maakEvents;

HTML:
  1. <span>Dit is een beetje tekst</span><br />
  2. <span>Nog wat tekst</span><br />
  3. <span>Het laatste beetje tekst</span>

Het gebruik is dus simpel: element.style.CssStijlNaam = "CSS waarde";, dit zou dan gelijk zijn aan style="CssStijlNaam: CSS waarde;" in het gekozen element. Alleen zijn er in CSS ook stijl namen met een - er tussen (zoals bijvoorbeeld background-color), en in een naam in JavaScript kan geen - zitten want dat is al een minteken. Daarom laat je dan de - weg, en begin je het woord na de - met een hoofdletter: element.style.backgroundColor = "#f00";. Voor een volledig overzicht van alle CSS stijlen die via style aan te passen zijn, zie: W3Schools JavaScript - style

Merk op dat je in CSS vaak een eenheid erbij moet geven, bijvoorbeeld: width: 20px;, de waarde is dan dus 20px en niet alleen 20 en dus zonder ; (die geeft enkel aan dat de waarde daar eindigt, maar is dus geen deel van de waarde). Dus in JavaScript moet dat dan ook: element.style.width = "20px"; worden, waarbij dus die ; niks met de CSS te maken heeft maar enkel het einde van het statement aan geeft (zie H3.1).

Via elke JavaScript-verwijzing naar een HTML-element kan het id of de class van dat HTML-element opgevraagd of gewijzigd worden. Dat kan via element.id of element.className. Zo kun je bijvoorbeeld met JavaScript alle spans selecteren die de class abc hebben.

JavaScript:
  1. function veranderSpans()
  2. {
  3. var spans = document.getElementsByTagName("span"); // Selecteer alle spans in het document
  4. for(var i=0; i<spans.length; ++i) // Doorloop al die spans
  5. {
  6. if(spans[i].className == "abc") // Als de huidige span de class "abc" heeft
  7. {
  8. spans[i].style.color = "#f00"; // Pas de stijl van de huidige span aan, maak de tekst rood
  9. }
  10. }
  11. }
  12. function maakEvents()
  13. {
  14. document.getElementById("veranderABC").onclick = veranderSpans;
  15. }
  16. window.onload = maakEvents;

HTML:
  1. <span class="abc">Deze span heeft de class &quot;abc&quot;</span><br />
  2. <span class="abc">Deze ook...</span><br />
  3. <span>Maar deze niet!</span><br />
  4. <button id="veranderABC">Kleur alle abc-spans rood</button>

Nodes

In HTML staan alle elementen in elkaar:

HTML:
  1. <div id="deDiv">Ik ben een div-element
  2. <span id="deSpan">En ik ben een span element in het div-element
  3. <b id="deB">Met daar in weer een b-element...</b>
  4. <i id="deI">en een i-element!</i>
  5. </span>
  6. </div>

Als je met JavaScript een verwijzing naar een element hebt, kun je ook een verwijzing naar zijn parent krijgen. Zijn parent is het element waar hij in staat. Dus in het geval van de span hierboven, zou dat de div zijn. Die verwijzing kan met de eigenschap parentNode worden opgevraagd.

Een element kan altijd maar 1 parent hebben, maar kan meerdere childs (kinderen) hebben. Zoals de span in het bovenstaande voorbeeld, die heeft een b en een i als child, merk op dat de b en i wel indirect childs zijn van de div maar niet direct. Al die directe childs kun je verkrijgen met de eigenschap childNodes, dat is dus een array van alle HTML-elementen die direct in dat element zitten (kan dus ook leeg zijn).

Nou kan er ook nog tekst in een element staan, dit telt ook als child. Zelfs de enter en de paar spaties aan het eind van de div met het id deDiv (dus tussen </span> en </div>) in het bovenstaande stukje HTML tellen als tekst, ook al zie je ze niet in het resultaat!

JavaScript:
  1. function laatKinderenZien()
  2. {
  3. var div = document.getElementById("deDiv");
  4. alert("Het div-element bevat " + div.childNodes.length + " childs");
  5.  
  6. var span = div.childNodes[1]; // Het span-element is 2e (na het stukje tekst) child van de div
  7. alert("Het span-element bevat " + span.childNodes.length + " childs");
  8. for(var i=0; i<span.childNodes.length; ++i)
  9. {
  10. alert("Het " + (i+1) + "e element is een " + span.childNodes[i].nodeName + "-element");
  11. }
  12. }
  13. window.onload = laatKinderenZien;

HTML:
  1. <div id="deDiv">Ik ben een div-element
  2. <span id="deSpan">En ik ben een span element in het div-element
  3. <b id="deB">Met daar in weer een b-element...</b>
  4. <i id="deI">en een i-element!</i>
  5. </span>
  6. </div>

In het bovenstaande stukje code zie je ook nodeName staan (regel 9). Dit is ook een eigenschap die elk HTML-element bevat, en is niks anders dan de naam van het element (DIV, SPAN, B, I, etc) in hoofdletters.

Wederom zijn er veel meer eigenschappen en methodes dan in deze paragraaf besproken zijn, daarvoor verwijs ik weer naar W3Schools JavaScript - Eigenschappen en methodes van alle HTML-elementen

Naar boven

10.5. Een HTML-Table-object

Zoals in H10.5 al is gezegd, hebben een aantal HTML-elementen nog wat specifieke eigenschappen. Zo heeft ook een tabel een aantal handige eigenschappen die ik hier nog wel wil bespreken. Je zal deze namelijk vaak nodig hebben. Als je bijvoorbeeld een spelletje maakt, dan gebruik je vaak een tabel als speelbord of level.

Elke tabel-object in JavaScript heeft een eigenschap rows, dit is een array van alle rijen in die tabel. Deze array kan dus leeg zijn. Elk element in die array is dus een verwijzing naar een tr-element. De rijen staan in de array op dezelfde volgorde als ze in de HTML voorkomen.

Elke rij, dus elk tr-element, bevat weer een een eigenschap genaamd cells. Dat is een array van alle cellen (dus td's) in die rij, ook weer in dezelfde volgorde als voorkomen in de HTML.

Op die manier kun je bijvoorbeeld een blokje door een tabel laten bewegen.

JavaScript:
  1. var x = 2; // De x-coordinaat van het zwarte wordt in deze variabele bijgehouden
  2. var y = 2; // De y-coordinaat van het zwarte wordt in deze variabele bijgehouden
  3.  
  4. function beweeg(event)
  5. {
  6.  
  7.  
  8. var table = document.getElementById("gameboard");
  9. table.rows[y].cells[x].style.backgroundColor = "#fff"; // Maak het huidige zwarte vakje wit, we gaan immers hier vandaan verplaatsen
  10. // Als er geen pijltjes toets ingedrukt is blijven de coordinaten ongewijzigd
  11. // en zal het vakje dus opnieuw zwart worden gemaakt aan het einde van deze functie
  12.  
  13. if(event.keyCode == 37){ // Pijltje naar links
  14. if(--x < 0){ // Trek 1 van x af, als het resultaat kleiner is dan 0 (dus buiten de tabel valt)
  15. x = 4; // Spring dan weer naar rechts
  16. }
  17. }
  18.  
  19. if(event.keyCode == 38){ // Pijltje naar boven
  20. if(--y < 0){ // Trek 1 van y af, als het resultaat kleiner is dan 0 (dus buiten de tabel valt)
  21. y = 4; // Spring dan weer naar onder
  22. }
  23. }
  24.  
  25. if(event.keyCode == 39){ // Pijltje naar rechts
  26. if(++x > 4){ // Tel 1 bij x op, als het resultaat groter is dan 4 (dus buiten de tabel valt)
  27. x = 0; // Spring dan weer naar links
  28. }
  29. }
  30.  
  31. if(event.keyCode == 40){ // Pijltje naar onder
  32. if(++y > 4) { // Tel 1 bij y op, als het resultaat groter is dan 4 (dus buiten de tabel valt)
  33. y = 0; // Spring dan weer naar boven
  34. }
  35. }
  36.  
  37.  
  38. table.rows[y].cells[x].style.backgroundColor = "#000"; // Maak het vakje met de nieuwe coordinaten zwart
  39. }
  40.  
  41. function maakEvents()
  42. {
  43. document.body.onkeydown = beweeg;
  44. }
  45. window.onload = maakEvents;

HTML:
  1. <table id="gameboard" style="empty-cells:show;width:250px;height:250px;">
  2. <tr><td></td><td></td><td></td><td></td><td></td></tr>
  3. <tr><td></td><td></td><td></td><td></td><td></td></tr>
  4. <tr><td></td><td></td><td style="background-color:#000;"></td><td></td><td></td></tr>
  5. <tr><td></td><td></td><td></td><td></td><td></td></tr>
  6. <tr><td></td><td></td><td></td><td></td><td></td></tr>
  7. </table>
  8. Bestuur het zwarte vakje met de pijltjes
Naar boven

10.6. Opdrachten

  1. Maak een soort timer. De gebruiker wordt gevraagd over hoeveel seconden de timer af moet gaan (ga er vanuit dat er een geldig getal ingevoerd wordt). Na zoveel seconden moet er dan een berichtje verschijnen met de tekst: "Timer afgelopen!". (H10.2)
    Antwoord
  2. Als opdracht 1, maar maak er nu een knop bij waarmee de timer gestopt kan worden voordat deze afgelopen is. (H10.2)
    Antwoord
  3. Maak een pagina met daarop jouw naam en ernaast een knopje (of linkje) "Geef details weer". Als daarop geklikt wordt verandert de tekst van dit linkje in "Verberg details" en moet onder jouw naam je geboortedatum en woonplaats verschijnen.
    Als er op "Verberg details" geklikt wordt moeten je geboortedatum en woonplaats weer verdwijnen (je naam blijft altijd staan) en moet de tekst op de knop/link weer veranderen in "Geef details weer". Gebruik het style-attribuut om iets te verbergen: style="display:none;". De waarde van display moet op block worden ingesteld om een element weer zichtbaar te maken, (H10.2)
    Antwoord
  4. Maak een tabel waarin elke keer dat de muiscursor over een cel heen beweegt de achtergrond daarvan zwart wordt en de waarde in de cel (in eerste instantie 0) opgehoogd wordt.
    Bij het verlaten van de cel moet de achtergrond weer wit worden.
    Maak gebruik van this. (H10.4)
    Antwoord
  5. Maak een boter, kaas en eieren spelletje.
    De spelers mogen om de beurt klikken, alleen als er op een leeg vakje geklikt wordt zal er een x of o verschijnen (afhankelijk van wie aan de beurt is).
    Er hoeft geen bericht te verschijnen als er iemand gewonnen heeft. (H10.4)
    Antwoord