A JavaScriptet a Netscape fejlesztette ki. Ez egy olyan parancsnyelv, amely segítségével létrehozhatunk interaktív Web-oldalakat. A cikk során számos klasszikus példával megismerkedhet az olvasó, ezeket könnyedén beépítheti a saját oldalaiba, vagy továbbfejlesztheti õket saját igényeinek megfelelõen. Az Internetrõl is letölthetõ sok egyszerû és kevésbé egyszerû példa. Tanácsos ezek forrását is áttanulmányozni, hiszen jó ötletek leshetõk el belõlük.
Mielõtt mélyebben belekezdenénk a JavaScript tanulmányozásába, érdemes egy fontos különbségre felhívni a figyelmet. A JavaScript nem tévesztendõ össze a Java-val! A hasonló név ellenére a Java önálló programozási nyelv, szükség van fordító programra, amivel a forráslistából bájtkódot készíthetünk. A JavaScript pedig parancsnyelv, futtatásához nem kell más, mint egy böngészõ, amely kezelni képes a JavaScriptet.
Hasonlóság azonban nem csak a névben van, ugyanis a két nyelv szintaxisa a C nyelvhez hasonlatos, a manapság divatos objektumorientáltságot pedig egyikük sem kerülhette el.
Mint korábban említettem, csak egy JavaScriptet "értõ"
böngészõre van szükségünk. Ez lehet
akár a Netscape Navigator, amely a 2.0-ás verzió óta
ismeri a JavaScriptet, vagy a Microsoft Internet Explorer (3.0 vagy nagyobb
verzió), így a legtöbb ember képes JavaScriptet futtatni.
Ha az olvasó nem ismerné a HTML alapjait, érdemes
most utána olvasni az Interneten található leírásokban,
vagy az errõl szóló szaklapokban, mielõtt tovább
olvasná a leírást.
JavaScript beágyazása HTML dokumentumba
A JavaScript utasítások közvetlenül a HTML oldalba kerülnek be. Lássunk erre egy egyszerû példát:
<HTML> <BODY> Ez itt hagyományos HTML.<BR> <SCRIPT LANGUAGE="JavaScript"> document.write("Ez már JavaScriptben íródott!!!<BR>"); </SCRIPT> Ez a sor újra HTML!<BR> </BODY> </HTML>Ha a böngészõnk értelmezni tudja a JavaScriptet, akkor ez a pár sor a következõt eredményezi:
Ez itt hagyományos HTML.
Ez a sor újra HTML.
A három sor közül az elsõ és utolsó HTML-ben íródott, míg a középsõt a JavaScript document.write() parancsával írattuk ki. Látható, hogy a HTML <SCRIPT> elemét használtuk arra, hogy JavaScript utasításokat ágyazzunk a HTML dokumentumunkba. Minden, amit a <SCRIPT> és a </SCRIPT> elemek közé teszünk JavaScript utasításokként értékelõdik ki. A LANGUAGE attribútum segítségével a JavaScript verziószámát határozhatjuk meg. A lehetséges verziók:
Mi történik akkor, ha a böngészõnk régebbi, JavaScriptet nem ismerõ típus? Mivel a böngészõ nem ismeri a <SCRIPT> elemet, ezért azt nem veszi figyelembe, és a közötte lévõ utasításokat szövegként jeleníti meg a HTML dokumentumon belül. Természetesen van megoldás ennek elkerülésére. Amint az ismert, a HTML dokumentumokba megjegyzéseket az alábbi módon tehetünk:
<!-- A megjegyzés eleje
....................................
A megjegyzés vége -->
Javítsuk ki az elõbbi egyszerû példát az alábbi módon:
<HTML> <BODY> Ez itt egy hagyományos HTML dokumentum.<BR> <SCRIPT LANGUAGE="JavaScript"> <!-- A JavaScript kód elrejtése, amennyiben szükséges document.write("Ez már JavaScriptben íródott!!!<BR>") // A kód elrejtésének vége --> </SCRIPT> Ez a sor újra HTML!<BR> </BODY> </HTML>
A JavaScript utasításokat HTML megjegyzések közé tesszük, így a nyelvet nem ismerõ böngészõk nem jelenítik meg az utasításokat, ugyanis azt megjegyzésként értelmezik. A JavaScriptet nem ismerõ böngészõ ezt a kódot az alábbi módon jelenítené meg:
Ez itt egy hagyományos HTML dokumentum.
Ez a sor újra HTML.
Ellenkezõ esetben igen zavaros sorokat kaphatunk:
Ez itt egy hagyományos HTML dokumentum.
document.write("Ez már JavaScriptben íródott!!!<BR>")
Ez a sor újra HTML.
Fontos viszont megemlíteni, hogy a JavaScript nem védhetõ meg a "kíváncsiskodó szemek" elõl, hiszen a HTML dokumentumok forrása megtekinthetõ a legtöbb böngészõ segítségével, a JavaScript utasítások pedig ennek közvetlen részét képezik.
A programoknak gyakran kell reagálnia olyan eseményekre, mint billentyû lenyomása, vagy az egér mozgatása. Az események és eseménykezelõk a JavaScript programozásban is nagyon fontosak. Az ilyen események kezeléséhez különféle függvények, eseménykezelõk léteznek.
Tekintsük a következõ példát. Azt akarjuk, hogy a JavaScript programunk reagáljon valamilyen eseményre, pontosabban létrehozunk egy gombot, amire kattintva egy ablak jelenik meg a képernyõn. Ez gyakorlatilag azt jelenti, hogy az ablaknak egy kattintás-esemény (click-event) hatására kellene megjelenni. Az itt használt eseménykezelõ neve: onClick.
<form> <input type="button" value="Kattints rám!" onClick="alert('Hello!')"> </form>
Ebben a példában létrehoztunk egy ûrlapot, amely egyetlen gombból áll. Ennek így még semmi köze nincs a JavaScripthez, hiszen ezt HTML-ben írtuk meg. Az újdonság az onClick="alert('Hello!')" rész, ami az <INPUT> HTML elem belsejében található, és ez már valóban JavaScript (vegyük azt is észre, hogy itt nem használtuk a <SCRIPT> HTML elemet!). Ez mondja meg, hogy mi történjen akkor, ha a felhasználó megnyomja a gombot. Ha ez bekövetkezik, akkor valójában egy onClick esemény generálódik, és ez végrehajtja az alert('Hello!') JavaScript kódot. Ez egy függvény, amely létrehoz egy üzenetablakot, melyben a zárójelen belül idézõjelek közé írt szöveget jeleníti meg.
Figyeljük meg azt is, hogy lehet idézõjelen belül idézõjelet használni! JavaScriptben mindkét idézõjelet lehet használni, csak arra kell ügyelni, hogy ez a számítógép számára is egyértelmû legyen. Az alábbi idézõjelhasználat is helyes lett volna:
onClick='alert("Hello!")'
Általánosan így írható le az eseménykezelés szintaxisa:
<HTML_elem eseménykezelõ_neve="JavaScript_utasítás">Még sok más eseménykezelõ létezik. Ezek közül néhánnyal még találkozunk a cikk során, de addig is a következõ táblázat összefoglalja a fontosabb eseményeket:
Események | Mire alkalmazható? | Mikor következik be? | Eseménykezelõ neve |
abort | képek | A felhasználó megszakítja a kép betöltését | onAbort |
blur | ablak, keret, és minden ûrlapmezõ | Az inputfókusz elkerül az elemrõl (pl. az egérrel az aktuális mezõn kívülre kattintunk) | onBlur |
change | szövegmezõ, listaablak | Megváltoztatunk egy ûrlapbeli értéket | onChange |
click | gombok, rádió gomb, csatolások (linkek) | Az ûrlap valamely elemére, vagy egy csatolásra (link) kattintunk | onClick |
error | ablak, képek | Ha kép vagy dokumentum betöltésekor hiba lép fel | onError |
focus | ablak, keret, minden ûrlapmezõ | Az inputfókusz az adott elemhez kerül (pl. kijelöljük az ûrlap egy elemét) | onFocus |
load | dokumentum törzse (BODY) | Ha az oldal betöltése befejezõdött | onLoad |
mouseout | linkek, képek | Ha az egérmutató elhagyja a linket vagy a kép területét | onMouseOut |
mouseover | linkek, képek | Ha az egérmutató a link felett tartózkodik vagy a kép területén | onMouseOver |
reset | ûrlapokra | Ûrlap törlésekor | onReset |
select | szövegmezõ | Új mezõt jelölünk ki | onSelect |
submit | submit típusú nyomógomb | Ûrlap elküldésekor | onSubmit |
unload | dokumentum törzse (BODY) | Ha elhagyjuk az oldalt | onLoad |
Minden programozási nyelvben, így a JavaScript-ben is rendkívül fontos szerepet kapnak a függvények. A nyelv számos függvényt tartalmaz, például a korábban megismert alert() függvény is ezek közül való. A függvényeknek adhatunk át paramétereket, amelyekkel dolgozni fognak (az alert() függvény paramétere az idézõjelek között átadott szöveg volt, amit a függvény egy üzenetablakban jelenített meg). Mi magunk is írhatunk függvényeket, hogy a nagyobb, összetettebb feladatokat kisebb, jobban kezelhetõbb részekre bontsuk. Ezek a függvények szintén átvehetnek paramétereket, sõt értéket is adhatnak vissza, csakúgy, mint más progamozási nyelvekben. A függvények mûködését egy rövid példán keresztül mutatom be:
<HTML> <SCRIPT LANGUAGE="JavaScript"> <!-- A JavaScript kód elrejtése, amennyiben szükséges function szamol_1(x,y){ var eredmeny = x + y; document.write("<H3>"+x+" + "+y+" = "+eredmeny+"</H3><BR>"); } function szamol_2(x,y){ return x+y; } szamol_1(23,11); szamol_1(17,27); szamol_1(3,45); document.write("<H3>13 + 5 = " + szamol_2(13,5) + "<H3>"); //--> </SCRIPT> </HTML>A program eredménye a következõ lesz:
Ebben a rövid programban két függvényt hoztunk
létre szamol_1 és szamol_2 néven. Figyeljünk
arra, hogy a JavaScript a kis- és nagybetûk között
különbséget tesz, így például a JAVASCRIPT,
javascript, JavaScript három különbözõ függvénynévnek
bizonyulna.
A JavaScript-ben írt függvények elé kötelezõen
be kell írni a function kulcsszót, viszont
ellentétben pl. a C++ vagy a Java függvényeivel nem
kell a visszatérési értéknek, valamint a paramétereknek
a típusát megadni.
Nézzük most meg részletesen a szamol_1 nevû
függvényt, hogyan épül fel, és hogy mûködik!
function szamol_1(x,y){ var eredmeny = x + y; document.write("<H3>"+x+" + "+y+" = "+eredmeny+"</H3><BR>"); }
A function kulcsszót közvetlenül a függvény
neve követi, majd zárójelekben a paramétereket
adjuk meg. Ez a függvény két paraméterrel rendelkezik,
x-szel és y-nal (amelyek típusát nem
adtuk meg). A függvény törzse kapcsos zárójelek
között van, és ide helyezzük el a függvényhez
tartozó utasításokat.
A függvényben három változót is használunk
(x, y és eredmeny). A JavaScript programok
változókban tárolják az információkat,
adatokat. A példánál maradva x illetve y
tárolja el az összeadandó számok értékeit,
és az eredmeny nevû változó tárolja
el az összeget.
Eltérõen más programozási nyelvektõl,
a JavaScript-ben nem kell definiálnunk a változók
típusát (mint pl. int, float, char stb.), hanem azt
a programot végrehajtó böngészõ állapítja
meg a változók használata alapján.
JavaScript-ben a változók neve betûvel, vagy aláhúzással
(_) kezdõdhet, és a függvénynevekhez hasonlóan
szintén különbség van kis- és nagybetûk
között.
Változót a var kulcsszóval, majd
a változó nevének megadásával deklarálhatunk.
Deklaráláskor az értékadó operátor
(=) segítségével kezdõértéket
is rendelhetünk a változókhoz. Ezt tettük a példánkban
is:
var eredmeny = x + y;
Azaz létrehoztuk az eredmeny nevû változót, és kezdõértéknek a paraméterként átadott x és y változók összegét adtuk. A függvény törzsének második sora elvégzi a számolás eredményének kiírását. A document.write utasítást használtuk itt fel, amivel már találkoztunk. Az egyetlen érdekesség az argumentumban található, a zárójeleken belül, ugyanis a kiírandó szöveget részekbõl fûztük össze. A "<H3>" rész HTML-bõl ismerõs, a kiírás típusát határozza meg. Ehhez fûzzük hozzá az x változót. Mivel x nem idézõjelek között van, ezért nem egy x karakter, hanem az x változó értéke kerül kiírásra. És így tovább, elõször egy "+" karaktert, majd y változó értékét, egy "=" karaktert, ill. az eredmeny változó értékét fûzzük az eddigi karakterláncunkhoz, legvégül a "</H3>" HTML elemmel zárjuk le a karakterláncunkat a HTML szabályainak megfelelõen. Ha x értéke 23, y értéke 11, akkor az eredmeny változó értéke x és y összege, azaz 34 lesz, és a kiírandó karakterlánc a következõnek felel meg:
"<H3> 23 + 11 = 34 </H3>"
A függvényeket a nevükkel hívjuk meg, és híváskor adjuk át a paraméterek aktuális értékét. Példánkban az elsõ függvényt háromszor hívtuk meg:
szamol_1(23,11); szamol_1(17,27); szamol_1(3,45);
Látható, hogy a függvény nevét követi az ún. aktuális paraméter lista, ami az elsõ esetben 23 és 11, azaz a függvényben szereplõ x változó értéke 23, míg az y értéke 11 lesz. Az aktuális paraméterlistát ugyanúgy zárójelek közé tesszük, mint a függvények definíciójában szereplõ formális paraméterlistát. A második esetben ez alapján x 17, y 27, a harmadik esetben x 3, y 45 értéket vesz fel.
A szamol_2 függvény egy lényeges dologban különbözik az elõbbitõl. Rendelkezik visszatérési értékkel.
function szamol_2(x,y){ return x+y; }
Amint említettem, JavaScript-ben eltérõen más programozási nyelvektõl nem kell a visszatérési érték típusát megadni. A függvény x+y értéket adja vissza a return utasítás felhasználásával. Figyeljük meg a függvény hívását!
document.write("<H3>13 + 5 = " + szamol_2(13,5) + "</H3>");
A szamol_2 függvényt a 13 és 5 paraméterekkel hívtuk meg, amely kiszámolja azok összegét és visszatér ezzel az értékkel. Ez az érték behelyettesítõdik a hívás helyére, így a document.write függvény argumentuma gyakorlatilag a következõ lesz:
"<H3>13 + 5 = 18 </H3>"
Tovább a második fejezethez >>
Copyright Weblabor
© 1999-2000
All Rights Reserved