Mi a JavaScript?
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.
A JavaScript nem Java!
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.
JavaScript futtatása
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:
-
<SCRIPT LANGUAGE="JavaScript"> 1.0-ás JavaScript-et támogató
böngészõkhöz (pl. Netscape 2.0)
-
<SCRIPT LANGUAGE="JavaScript1.1"> 1.1-es JavaScript-et támogató
böngészõkhöz (pl. Netscape 3.0)
-
<SCRIPT LANGUAGE="JavaScript1.2"> 1.2-es JavaScript-et támogató
böngészõkhöz (pl. Netscape 4.0)
Ez azt jelenti, hogy például a Netscape 2.0 a JavaScript1.1,
a Netscape 3.0 a JavaScript1.2 verziójú kódot
figyelmen kívül hagyja.
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.
Események
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 |
Függvények
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>"
|