1 Katholieke Hogeschool Zuid-West-Vlaanderen Studiegebied handelswetenschappen en bedrijfskunde Industriële wetenschappen en technologie opleiding van...
Studiegebied handelswetenschappen en bedrijfskunde Industriële wetenschappen en technologie opleiding van één cyclus
DEPARTEMENT VHTI VRIJ HOGER INSTITUUT VOOR TECHNOLOGIE & INFORMATICA Doorniksesteenweg 145 8500 KORTRIJK Tel. : (056)26 41 20 Fax : (056)21 98 67 e-mail : [email protected]
Lab Multimedia & Webtechnologie Javascript
Opleiding TOEGEPASTE INFORMATICA 1ste jaar
CURSUS JAVASCRIPT
Cursus Javascript
3
1
INLEIDING
De voorkant van een website rust op drie poten: structuur, presentatie en gedrag, oftewel XHTML, CSS en JavaScript. Deze drie poten dienen goed met elkaar samen te werken en strikt van elkaar gescheiden te zijn. Klinkt tegenstrijdig, maar dat is het niet. Strikt gescheiden betekent dat elke poot zijn eigen plek heeft: .html bestanden voor de structuur, een .css bestand voor de presentatie en een .js bestand voor het gedrag. Een beetje site bestaat uit tientallen XHTML-pagina's, maar als al deze pagina's naar dezelfde .css en .js bestanden linken, kun je door een paar regels code te veranderen de presentatie of het gedrag van de gehele site wijzigen. Strikte scheiding vereenvoudigt dus het onderhoud van de site. ECMAScript, een standaard van ECMA, is een programmeertaal die toelaat in een web browser berekeningen uit te voeren en objecten te manipuleren. Deze standaard is ontstaan uit Javascript (van Netscape) en JScript (van Microsoft) met als doel incompatibiliteit van die twee talen uit de wereld te helpen. Een website die Javascript gebruikt, werkt namelijk enkel volledig in Netscape Navigator, en een website die JScript gebruikt enkel in Internet Explorer. De derde versie van ECMAScript is van 1999. Gebruik van ECMAScript voor scripts garandeert dat de bedoelde functionaliteit in zoveel mogelijk browsers werkt. Javascript (ECMAScript) is een Object Oriented Programming taal. Dit wil zeggen dat men bestaande OBJECTEN en hun PROPERTIES gaat aanspreken of dat men er nieuwe gaat creëren. Wat zijn objecten ?
een document een button een beeld een link ...
Alle objecten hebben PROPERTIES Wat zijn properties ?
de achtergrondkleur van een document de grootte van een knop de transparantie van een beeld de relatieve of absolute referentie van een link ...
een document kan worden geopend of gesloten op een knop kunnen we klikken afbeeldingen kunnen door er op te klikken een pagina openen er op klikken zal u naar een andere pagina brengen ...
EVENTS zullen de functies "uitoefenen" bv. We klikken op een knop waaraan de functie open een dialoogvenster, hangt.
Cursus Javascript
5
2
DE EERSTE STAPPEN
Javascript is ontworpen om aan de html taal meer interactiviteit te geven. Html en Javascript gaan dikwijls samen. Dus wordt er verondersteld dat je de html (xhtml) taal beheerst. Wat is Javascript nu eigenlijk? Javascript is een scriptingtaal, wat wil zeggen dat er een aantal objecten kunnen worden aangesproken, en dat er nieuwe kunnen worden aangemaakt. Met andere woorden, we bouwen niet alles op uit het niets, wat in een programmeertaal wel het geval is. Javascript moet altijd met een browser samenwerken: Internet Explorer, Netscape, ... Deze zullen de html elementen en de Javascript-instructies ontleden en omzetten. Zoals we een xhtml document steeds beginnen met de tags Title <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
Zo zullen we een script steeds tussen de twee volgende tags plaatsen <script type="text/javascript">
Al wat tussen deze twee tags vervat zit, is script-code. We zullen een eerste oefening doornemen. Title <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/> <script type="text/javascript"> //
We zien dat de script-tags tussen de en de worden geplaatst. Maar men kan ze eveneens na de zetten. Wanneer we een XHTML-pagina willen valideren, kan het gebeuren dat het script een onbekend aantal fouten oplevert, omdat de validator het script wil controleren op XHTML-compatibiliteit. Wil je toch de code in de pagina plaatsen, en niet in een extern bestand (.js) plaatsen, maak dan gebruik van de CDATA tag. Deze zorgt ervoor dat de XHTML-parser het script niet controleert. Met andere woorden, de validator slaat dit deel over. Je gebruikt CDATA op de volgende manier:
Cursus Javascript
6
<script type="text/javascript"> //
We zullen nu het bovenstaande script ontleden : Document is het object writeln Mijn eerste Javascript
is de functie van het object is de parameter van de functie van het object
Met andere woorden, we zeggen aan de browser dat hij "Mijn eerste Javascript" moet schrijven in het huidige, actieve document. We zullen nog een oefening maken. We wensen in ons document "Hello" te schrijven. document.writeln("Hello");
We gaan nog een stap verder, we willen dat Hello met de
heading wordt weergegeven. We zetten onder het voorgaande: document.writeln("
Hello
");
Hier zien we duidelijk dat xhtml en Javascript elkaar aanvullen. We gaan nog een stap verder. We zetten onder de twee voorgaande lijnen: (niet vergeten iedere lijn af te sluiten met een puntkomma ; document.fgColor="#ff0000";
Hier zeggen we dat de voorgrondkleur (fgColor= foreground color), die een eigenschap van het object document is, rood moet zijn. De RGB (Rood Groen Blauw) kleur rood wordt hier met een hexadecimale waarde aangeduid: ff0000 = 255 000 000. Als er nu een tekst in de body verschijnt, zal deze de rode kleur krijgen. Even samenvatten. • Javascript werkt samen met html • Javascript wordt tussen de tags of de tags gezet • In Javascript zijn er verschillende objecten, die we kunnen oproepen • Al deze objecten hebben functies, parameters, properties enz.. • Door deze in de juiste volgorde te zetten geven we instructies door Moet het steeds tekst zijn ? Neen, natuurlijk niet. Bekijk het volgende voorbeeld. document.writeln("");
Cursus Javascript
7
Er moet natuurlijk een afbeelding met de naam "bos.gif" bestaan. Dit zal in de pagina getoond worden.
2.1
Het document-object
Bij het openen van het xhtml-bestand met dit script erin zal de tekening bos.gif worden getoond. Natuurlijk moet je zeker zijn dat er een figuur met de naam bos.gif in dezelfde map staat als je html-pagina. Nu gaan we nog een stap verder: we zullen tekst en tekening samen in een script zetten. Misschien heb je al opgemerkt dat er steeds een ; (punt-komma) achter een instructie staat. Dit is om het einde van die instructie aan te tonen. document.writeln(""); document.writeln("Hello") ; document.fgColor="#ff0000" ;
En wat zien we? Eerst onze tekening en dan de woorden HELLO in het rood. We brengen een lichte verandering aan, in die zin dat we de tekst die moet verschijnen niet in het script zelf zetten maar in de body van het document. We krijgen hetzelfde resultaat. Om het overzichtelijk te maken zien we hieronder de twee voorbeelden, volledig uitgewerkt. Dus eerst het voorgaande voorbeeld waar de tekst (Hello) tussen de script tags staat, en dan het nieuwe voorbeeld waar de tekst "Hello" tussen de body tags staat. Voorbeeld 1
De volgende stap is het aanroepen van het script op het moment dat wij dit wensen, dus niet automatisch bij het openen van de pagina. Dit doen we door van het geheel van de instructies een FUNCTIE te maken, deze een naam te geven en vervolgens via een button op te roepen. voorbeeld met functie <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/> <script type="text/javascript"> //"); document.writeln("Hello"); document.fgColor="#ff0000"; } //]]>
Er gebeurt niets. Pas als we op de knop klikken, zien we de afbeelding en de rode tekst. Verder merken we op dat alle FUNCTIE-instructies tussen { } accolades staan. Dit is zeer belangrijk. Zo weet de browser waar de functie begint en eindigt. Dit wordt duidelijk als we meerdere functies onder elkaar schrijven.Ook hebben we voor het eerst een EVENT gebruikt, t.t.z. een click event. Maar later meer hierover.
2.2
De functies
In Javascript zullen we dikwijls gebruik maken van functies. Daarom is het goed om er nu reeds bij stil te staan. Functies maken is een manier om verschillende instructies te bundelen. Om dit duidelijk te maken gaan we eenzelfde tekst driemaal na elkaar zetten. voorbeeld met functie <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/> <script type="text/javascript"> //
Cursus Javascript
9
document.write("Dit is mijn tweede pagina ! "); document.write("Gemaakt in Javascript ! "); document.write("Dit is mijn tweede pagina ! "); document.write("Gemaakt in Javascript ! "); document.write("Dit is mijn tweede pagina ! "); document.write("Gemaakt in Javascript ! "); //]]>
We zien dezelfde tekst driemaal verschijnen. Nu gaan we hetzelfde in een functie gieten. voorbeeld met functie <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/> <script type="text/javascript"> //"); document.write("Gemaakt in Javascript ! "); } hetzelfde(); hetzelfde(); hetzelfde(); //]]>
Door een functie te maken die hetzelfde noemt en deze drie keer aan te roepen (function call) krijgen we onze tekst driemaal op het scherm. We merken op dat de commando's in de functie gebundeld worden tussen { } accolades en dat elke regel met een ; (puntkomma) wordt afgesloten. Een functie kan ook in samenwerking met een EVENT-HANDLER voorkomen. We hebben al de event-handler onClick gezien. We zullen hetzelfde event gebruiken om met variabelen in een functie te werken. Variabelen zullen verder nog meer aan bod komen. voorbeeld met functie <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/> <script type="text/javascript"> //
Cursus Javascript
10
var x=12; var y=5; var result=x + y; alert(result); } //]]>
Dit is het script-gedeelte. Nu moeten we dit in de xhtml pagina invoegen, zodat we ons formulier op het scherm krijgen, de tekstbox invullen, om vervolgens de inhoud van het element na name: uit het formulier terug op te roepen. Hieronder vind je de volledige pagina: voorbeeld met functie <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/> <script type="text/javascript"> //
We gaan verder met onze oefening. We vullen de twee tekstvakken in ons formulier in. Bij het klikken op de knop Opvragen krijgen we in een alert box de tekst die in het eerste element staat (dus na name:). Dat is ook datgene wat we in ons script gezet hebben : name=document.mijnform.txtnaam.value; dus de waarde (value) van het element[txtnaam] (het eerste tekstvak is element[0]) en van het formulier (mijnform) We kunnen natuurlijk de inhoud van element[1] ook opvragen, dus hetgeen we invullen na Email. Dan zou de coderegel in het script zijn: name=document.mijnform.txtmail.value;
Cursus Javascript
16
We zetten na mijnform de naam txtmail aangezien het tweede element de naam txtmail heeft.Verder zullen we leren hoe we de tekst in een andere pagina kunnen zetten i.p.v. in een alert box. 3.1.2
Tussenliggende Dom’s
Na DOM 0 ontwikkelden Netscape en Microsoft op eigen houtje een eigen DOM. Netscape koos voor document.layers, waarbij ze hun eigen filosofie volgden en ook een nieuwe tag LAYER gingen gebruiken. Deze DOM zullen we niet verder bespreken daar zelfs Netscape nu is afgestapt van deze DOM. Microsoft ging werken met document.all: één object-collectie van waaruit je alle elementen op de pagina kan bereiken.
3.1.3
W3C DOM
De verschillende objectmodellen van Netscape en Microsoft bemoeilijkten het leven van ontwikkelaars. Scripters wilden een standaard, zoals het HTML- en CSS-standaarden voor inhouden en stijlen. Het W3C reageerde met een standaard voor het documentenobjectmodel : het W3C DOM.
Cursus Javascript
17
4
W3C DOM
De W3C DOM is een platform-onafhankelijk interface die via script toegang heeft tot alle elementen ,inhoud, attributen en styles van een document. Voordien was directe toegang niet mogelijk, iets dat werd omzeild door hele stukken inhoud te herschrijven via document.write() e.d.. The DOM is onderverdeeld in verschillende delen (Core, XML, and HTML) and verschillende levels (DOM Level 1/2/3): • Core DOM - defines a standard set of objects for any structured document • XML DOM - defines a standard set of objects for XML documents • HTML DOM - defines a standard set of objects for HTML documents Wij leggen de nadruk in deze cursus op HTML DOM Voorbeeld : Dit voorbeeld toont hoe je de achtergrondkleur van een XHTML-document kan wijzigen naar geel wanneer de gebruik klikt. voorbeeld met functie <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/> <script type="text/javascript"> //
Click on this document!
Document Objects The HTML DOM defines HTML documents as a collection of objects. The document object is the parent of all the other objects in an HTML document. The document.body object represents the element of the HTML document. The document object is the parent of the body object, and the body object is a child of the document object. Object Properties
Cursus Javascript
18
HTML document objects can have properties (also called attributes). The document.body.bgColor property defines the background color of the body object. The statement document.body.bgColor="yellow" in the example above, sets the background color of the HTML document to yellow. Object Events HTML document objects can respond to events. The onclick="ChangeColor()" attribute of the element in the example above, defines an action to take place when the user clicks on the document. Functions The ChangeColor() function in the example above, is a JavaScript function. The function will be triggered (started) when a user clicks on the HTML document. Changing Style The HTML DOM also defines a model for changing the styles of HTML objects. The coding example below shows how to obtain the same effect as the first example, by changing the style of the body object:
4.1
NODES
De W3C DOM gaat uit van het concept van nodes. Elke container (
,
,..), elk zelfstandig element ( en elk stuk tekst is een node (knooppunt). Nodes hebben parentchild-relaties als de ene container een andere bevat. Net als in het echt geldt een parent-childrelatie alleen voor direct opvolgende generaties; een node kan nul of meer kinderen hebben. Veronderstel het volgende html doc: DOM
heading 1
een tekst
Dan ziet zijn DOM tree er zo uit in de DOM Inspector van Mozilla:
Cursus Javascript
19
Deze begint vanuit de document root, waaronder een DOCTYPE declaratie volgt. De eerste elementnode is die als child alle verdere elementen bevat. Bijvoorbeeld,
een Element node, die zelf nog een textNode als child heeft. Element nodes kunnen childNodes hebben, terwijl een textNode dat nooit kan. Er zijn ook attributeNodes die hier niet zichtbaar gemaakt zijn door de DOM inspector: een element kan attributen hebben die subnodes ervan zijn.
4.2
Relaties tussen nodes
Veronderstel volgend voorbeeld: •
Node 1
•
Node 2
•
o
Sub Node 1
o
Sub Node 2
o
Sub Node 3
Node 3
Cursus Javascript
id="ouder">
Node 1
Node 2
Sub Node 1
Sub Node 2
Sub Node 3
Node 3
Sub Node 1
20
o
Sub Node 1
Vertrekkende van het ul element "ouder" heeft dit element 3 childNodes, Node 1, 2 en 3. Alledrie hebben die dezelfde parentNode "ouder". Node 2 heeft als previousSibling Node1 en als nextSibling Node 3 (als we de 'whitespace' niet meerekenen). Elk li element heeft ook nog een textNode die zijn inhoud bevat. Net als alle andere element nodes heeft Node 2 een childNodes collection die zijn kinderen bevat. Met childNodes.length kunnen we weten hoeveel. Met childNodes[i] of childNodes.item(i) kunnen we elke individueel child aanspreken.
Wanneer je een node aangesproken hebt, kan je volgende properties, methods en collections gebruiken. Deze propertes, methods en collections zijn voornamelijk bedoeld om doorheen de nodes te navigeren. Naast deze heb je voor elk type node (element/object) bijkomende properties, methods en events (zie verder in de cursus). Properties Methods Collections firstChild appendChild() childNodes[] lastChild removeChild() attributes[] parentNode replaceChild() previousSibling createElement() nextSibling createTextNode() nodeName cloneNode() nodeType insertBefore() nodeValue getAttribute() Length setAttribute() hasAttributes() hasChildNodes()
4.3
DOM-Objecten
Let op : niet alle objecten worden ondersteund door het W3C. Elk object kent Porterties die men kan beïnvloeden, Methods en Events. Al deze gegevens kan je terugvinden op
Cursus Javascript
21
http://www.w3schools.com/htmldom/default.asp Object Anchor Applet Area Base Basefont Body Button Checkbox
Document Event
FileUpload Form Frame Frameset Hidden History
Iframe Image Link Location Meta Navigator Option
Password Radio Reset Screen Select
Cursus Javascript
Description Represents an HTML a element (a hyperlink) Represents an HTML applet element. The applet element is used to place executable content on a page Represents an area of an image-map. An image-map is an image with clickable regions Represents an HTML base element Represents an HTML basefont element Represents the body of the document (the HTML body) Represents a push button on an HTML form. For each instance of an HTML tag on an HTML form, a Button object is created Represents a checkbox on an HTML form. For each instance of an HTML tag on an HTML form, a Checkbox object is created Used to access all elements in a page Represents the state of an event, such as the element in which the event occurred, the state of the keyboard keys, the location of the mouse, and the state of the mouse buttons For each instance of an HTML tag on a form, a FileUpload object is created Forms are used to prompt users for input. Represents an HTML form element Represents an HTML frame Represents an HTML frameset Represents a hidden field on an HTML form. For each instance of an HTML tag on a form, a Hidden object is created A predefined object which can be accessed through the history property of the Window object. This object consists of an array of URLs. These URLs are all the URLs the user has visited within a browser window Represents an HTML inline-frame Represents an HTML img element Represents an HTML link element. The link element can only be used within the tag Contains information about the current URL Represents an HTML meta element Contains information about the client browser Represents an option in a selection list on an HTML form. For each instance of an HTML