Professional Documents
Culture Documents
1. Dl - vod
Kad tden vyjde minimln jeden lnek a pokud je budete piln st neml by bt pro vs
na konci problm pst vlastn skripty. Zklad pro pochopen lnk je znalost HTML.
Co je JavaScript?
JavaScript je skriptovac jazyk zaloen na programovacm jazyku JAVA. JavaScript me
bt sputn na stran klienta (client-side) nebo serveru (server-side). V lncch naleznete
informace pouze o tvorb JavaScriptu na stran klienta (client-side), kdy se kd nachz v
HTML dokumentu a je realizovn v internetovm prohlei, tj. kd se penese spolu s HTML
dokumentem z webov strnky a v prohle ho spust a vykon.
Poznmka: JavaScript NEN to stejn co JAVA!
Skriptovac jazyk umouje pistupovat k rznm prvkm webovch strnek jako jsou
obrzky, formule, odkazy a jin. Tyto prvky meme s pomoc JavaScriptu rzn mnit a
ovlivovat. JavaScript tak dovoluje reagovat na rzn udlosti, napklad kliknut myi, stisk
klvesy a dal, co dovoluje spoutt rzn akce podle chovn uivatele.
V JavaScriptu se d napsat napklad skript reagujc na udlosti vyvolan my (pohyb myi,
stisk tlatka, ), kontrolu formule i animace. Jak to ho doshnout se dozvte v srii lnk.
JavaScript m i nkolik omezen, ovem logickch. Napklad se nedaj st ani zapisovat
soubory na uivatelsk pota (ten, kdo si prohl vae strnky). Toto omezen je jasn,
pokud si nkdo spust program na svm potai (client-side skripty jsou vykonvny na
stran klienta) mus si bt jist, e program (skript) neohroz bezpenost potae.
Verze JavaScriptu
JavaScript proel uritm vvojem a to nm pineslo nkolik verz:
Zpis skriptu
<script language="JavaScript" type="text/javascript">
<!-vlastn kd
//>
</script>
Tmto tagem prohlei sdlme, e skript, kter bude nsledovat, je napsn v JavaScriptu, a
e MIME-type je "text/javascript". Pokud vynechte definici TYPE nic se nestane, kd se
provede stejn, ale nen to podle standardu W3C.
<SCRIPT LANGUAGE="JavaScript" TYPE="text/javascript">
Nyn skryjeme obsah skriptu ped starmi prohlei pomoc triku s komenti.
<!-//>
Ped ukonen HTML komente pidme dv lomtka. Prohlee, kter znaj JavaScript, se
nkdy pokouely interpretovat konec HTML komente za st skriptu. Konec skriptu ns
vrt do normlnho HTML.
</SCRIPT>
Skripty mete ke strnce pipojit i pomoc externho souboru. V tomto ppad pouijete
parametr SRC s definic URL skriptu. Takto pipojen skripty maj obvykle koncovku .js:
<script language="JavaScript" src="mujsckript.js"
type="text/javascript"></script>
Prov tag <SCRIPT> mete na strnce pout kolikrt chcete. Nejlep a nejsnadnj je
vak umstit cel skript na jedno msto a v jednotlivch stech strnky volat pouze funkce ve
skriptu definovan. (V nkterch vyjmench ppadech budete muset skript rozdlit, abyste
zajistili sprvn proveden skriptu.)
Pi vkldn skriptu preferujte vloen pomoc externho souboru, co pin znan vhody.
Veobecn se skript vkld mezi tagy <HEAD> a </HEAD>. To zajiuje, e skript bude
pipraven k pouit ihned po naten strnky. Sem je dobr vloit vechny funkce nebo
skripty, kter maj bt funkn jet ped vlastnm zobrazenm strnky.
Jindy je teba vloit skript mezi tagy <BODY> a </BODY>. Tento zpsob vloen se
pouv, kdy skript generuje vlastn HTML obsah strnky.
2. Dl Zklady syntaxe
Tag Script
V tagu <SCRIPT> me specifikovat, kter verze JavaScriptu je pouita. A to pomoc
parametru LANGUAGE = hodnota. Me zde bt "JavaScript", "JavaScript1.1",
"JavaScript1.2", "JavaScript1.3" nebo "JavaScript1.5" a speciln pro IE "JScript". Vtina
prohle si zjist verzi z parametru LANGUAGE a pokud tuto verzi nepodporuje, skript se
ignoruje.
Poznmka: O tom, e Microsoft od IE 3 pedstavil i vlastn implementaci JavaScriptu jsem se
zmnil ji v prvnm dlu. Pro zopakovn, Microsoft implementace je pojmenovna prv
JScript.
Zptky k parametru LANGUAGE. Pomoc tohoto parametru meme definovat odlin
skripty pro rzn verze prohle. Jednoduch seznam rznch verz prohle a
podporovan verze JavaScriptu byl taky v prvnm dlu.
Napklad prohle Netscape 2.0 ignoruje skript definovan tagem <SCRIPT
LANGUAGE="JavaScript1.2">, ale Netscape 4.0 tento kd vykon. Tak meme odliit
rzn verze skript na jedn strnce. Kad verze skriptu mus bt uzavena v samostatnm
tagu SCRIPT.
Pklad, jak si zjistit podporovanou verzi JavaScriptu:
<html>
<head>
<title>Verze JavaScriptu</title>
</head>
<body>
<script language="JavaScript1.1">
// JavaScript pro star prohlee
document.write("JavaScript 1.1<br> <br>");
</script>
<script language="JavaScript1.2">
// JavaScript pro novej prohlee
document.write("JavaScript 1.2<br> <br>");
</script>
<script language="JavaScript1.3">
// JavaScript pro nejnovj prohlee
document.write("JavaScript 1.3<br> <br>");
</script>
<script language="JavaScript1.5">
// JavaScript pro nejnovj prohlee
document.write("JavaScript 1.5<br> <br>");
</script>
<script language="JScript">
// Speciln verze JavaScriptu pro IE - JScript
document.write("Jcript - pro IE<br> <br>");
</script>
</body>
</html>
Poznmka: Pokud se v pkladu ve uvede definice TYPE (viz prvn dl) nemus skript vdy
fungovat sprvn. To jsou paradoxy.
<script language="JavaScript" type="text/javascript">
function f1() {
// Zde bude skript v JavaScriptu pro star prohlee.
...
}
</script>
<script language="JavaScript1.2" type="text/javascript">
function f1() {
// JavaScript 1.2 kd pro novj prohlee.
...
}
</script>
Tady si u skript vysvtlme. Prohle Netscape 2.0 pouije definici funkce f1 uzavenou v
prvnm provm tagu <SCRIPT>, ale definici uzavenou v druhm tagu <SCRIPT> ignoruje.
Prohle Netscape 4.0 pouije tak prvn definici, avak pokud m druh funkce (f1=f1)
stejn jmno pepe prvn definici.
Zklady syntaxe
Jet ne zaneme pst vlastn skripty, musme znt minimln zklady syntaxe a struktury
JavaScriptu. Co mem pouvat, kam co a jak umstit, atd.
Syntaxe JavaScriptu je podobn C/C++ a JAV. Kompletn popis hledejte na Netscape`s
JavaScript Reference nebo Microsoft`s JScript Reference. Zde najdete seznam
podporovanch pkaz, opertor a standardnch funkc JavaScriptu. Te si vysvtlme
zklady pro zatek.
Promnn
Promnnou deklarujeme pomoc slova var. Identifiktor promnn me mt libovolnou
dlku a sestvat z jakhokoliv psmene, sla a znaku podtrtka (_), pokud nen prvn znak
slo. Jako identifiktor nememe pout klov slova - slova majc v JavaScriptu speciln
vznam. JavaScript je case-sensitive (rozliuje mal a velk psmena), identifiktory count a
Count odkazuj na dv odlin promnn!
Promnn deklarovan mimo funkci jsou globln, tzn. jsou bt dostupn odkudkoli ve
skriptu a z funkc ve skriptu. Nejastji definujeme promnou mimo funkci, tedy jako
globln. Globln promnou meme pepsat lokln promnou (definovanou uvnit funkce),
pokud bude mt identifiktor promnn stejn jmno. Tomu kme pekrvn promnnch.
Pr pklad:
var
var
var
var
var
var
text;
max_score;
cislo3 = 1;
ErrorMessage = "Spojen selhalo."
dnyPryc = 5.7;
82sester = true;
// chyba promnn zan slem!
Textov etzce
etzce jsou uzaven mezi uvozovky jednoduch (`) nebo dvojit ("). Jeden typ uvozovek
mete kombinovat s druhm bez omezen. Pouvte-li pod stejn typ uvozovek a nechcete
jej mnit, vlote ped uvozovac uvozovky zptn lomtko.
Pklad bude asi nejlep:
var text1
var text2
var text3
var text4
lomtka
var text5
var text6
=
=
=
=
"Ahoj svte.";
`Zdravm opt.`;
"Neklikej na m.";
"ekl jsem "NE"";
Opertory a vrazy
Vtina opertor (+; -; *; /; ++; --; atd.) a vraz pouvanch v C/C++ a JAV je
podporovna i v JavaScriptu.
Opt pklad:
promnn = vraz
soucet += 4;
i++;
vzkaz = "Chyba " + kodchyby;
Pkazy
A znovu, vtina pkaz pouvanch v C/C++ a JAV je podporovna i v JavaScriptu.
Klov slova jsou:
Funkce
Funkce pouijeme v ppadech, kdy potebujeme v programu na rznch mstech provdt
stejn innosti. Pouitm funkc kd programu zkrtme, zpehlednme a pjde snadnji
modifikovat.
Funkce se definuje nsledujcm zpsobem:
function jmeno_fce(arg1, arg2, ...) {
pkazy JavaScriptu ...
}
Jmno funkce mus dodrovat sejn pravidla, jako jmno promnn. K voln funkce
(sputn), pouijeme jej jmno a pidme argumenty, pokud je funkce poaduje.
var vyska = 5;
var sirka = 3;
spocti_obsah(vyska, sirka);
Pklad Vsledek
stn
2+2
odtn
5-2
nsoben
4*5
20
dlen
15/5
5/2
3
2.5
1
2
++
zven o jedniku
x=5
x++
x=6
--
snen o jedniku
x=5
x--
x=4
x+=y
x=x+y
-=
x-=y
x=x-y
*=
x*=y
x=x*y
/=
x/=y
x=x/y
%=
x%=y
x=x%y
++
x++
x=x+1
--
x--
x=x-1
Relan
Slou k porovnvn hodnot uloench v jednotlivch promnnch. Nic sloitho.
Opertor Popis
Pklad
==
je rovno
!=
nerovn se
>
je vt ne
<
je men ne
>=
<=
Logick
Opt zde dochz k porovnvn hodnot jako u relanch opertor. Zde se ovem porovnvaj
jejich logick hodnoty.
Opertor Popis
Pklad
&&
a (logick souin)
Vsledek bude true, pokud vechny porovnvan hodnoty budou
true.
x=6 y=3
(x < 10 && y > 1) vrt true
(pravda)
||
x=6 y=3
(x==5 || y==5) vrt false
(nepravda)
negace
Mn hodnotu operandu na opanou.
x=6 y=3
x != y vrt true (pravda)
Poznmka: Logick promnn mou nabvat pouze dvou hodnot a to true nebo false. True
meme nahradit slem 1 a false slem 0. Krtk pklad:
<script type="text/javascript">
<!-var x;
x=true;
if (x==1)document.write("true");
else document.write("false");
//-->
</script>
Vm, e pro zatenka bv pochopen logickch opertor sloitj a proto je zde mal
pklad, kde mete trnovat.
Poznmka: JavaScript obsahuje i dal speciln opertory. Pi psan skript se s nimi s
nejvt pravdpodobnost vbec nesetkte a proto je neuvdm.
Priorita opertor
Pi psan komplikovanjch vraz se me v jedn rovnici vyskytnout vce opertor.
Kadmu je asi jasn, e 3+5*2 je nco jinho ne (3+5)*2. Kad opertor m jinou prioritu.
Na zatek nm budou pro aritmetick opertory stait pravidla matematiky (pednost
nsoben ped stnm atd.).
Cykly
Pouvaj se tehdy pokud chceme provst njak blok kdu opakovan. V JavaScriptu k
tomuto elu meme pout nsledujc pkazy:
while - Cyklus s podmnkou na zatku. Cyklus se bude provdt tak dlouho, dokud
bude platit podmnka.
do...while - Cyklus podmnkou na konci. Stejn jako v pedchzejcm ppad, ale
podmnka se testuje a na konci.
for - Cyklus se zadanm potem opakovn.
While
while (podmnka) {
pkazy JavaScriptu
}
Do...while
do {
pkazy JavaScriptu
} while (podmnka)
Pklad:
<script type="text/javascript">
<!-for (var i=0; i<5; i++) {
alert("i = " + i);
}
alert("Konec!");
//-->
</script>
Podmnky
Pouijeme je tehdy, pokud chceme, aby se program podle njak podmnky sm rozhodl, jak
bude dl pokraovat.
Podmnkov opertory
Jde o zvltn druh opertor, kter umouj vyhodnotit njakou jednoduchou podmnku a v
zvislosti na vsledku provst danou operaci. V JavaScriptu nm k tomuto elu slou dva
opertory, kter se vdy pouvaj spolen. Jsou to znaky ? a :. Jejich pouit vypad takto:
(podmnka) ? vsledek pi splnn podmnce : vsledek pi nesplnn
podmnce;
Poznmka: Podmnkov opertory jsem mohl zaadit u do sekce "Opertory", ale zde mn to
pijde vhodnj.
Podmnn pkaz If
Pouv se tehdy pokud chceme, aby se urit pkazy v JavaScriptu provedly pouze za
uritch okolnost a dal pkazy zase za jinch okolnost. Obecn zpis vypad takto:
if (podmnka) {
pkazy, kter se provedou pi splnn podmnce; }
else {
pkazy, kter se provedou pokud nen podmnka splnna; }
Hodn autor dl na zatku chybu uvedenou ne. Popemlejte, pro skript zde uveden
neme sprvn fungovat.
<script type="text/javascript">
<!-var prodkus = 11;
if (prodkus > 10) {
alert("Zskvte bonus 5000 K!");
alert("Poet prodanch kus je snen o deset.");
prodkus = prodkus - 10; // potaj se pouze kusy pevyujc 10
}
if (prodkus == 10) {
alert("Dobr prce, ovem na bonus to nen.");
alert("Poet prodanch kus je vrcen na 0.");
prodkus = 0;
}
if (prodkus < 10) {
alert("Z platu vm srme 5000 K \n protoe jste nedoshl kvty.");
alert("Ztrtu budete muset dohnat.");
prodkus = prodkus - 10;
}
//-->
</script>
<script type="text/javascript">
//Rzn hlky podle dne v tdnu. Pamatujte,
//e Nedle=0, Pondl=1, ter=2, atd..
var d=new Date()
den=d.getDay() // nabv hodnot 0 a 6
switch (den) {
case 5:
document.write("Konen ptek.");
break;
case 6:
document.write("Super sobota!");
break;
case 0:
document.write("Pohodika je nedle.");
break;
default:
document.write("U se tm na vkend.");
break;
}
</script>
Vnoen podmnky
Stejn jako u cykl musme dt zvenou pozornost na syntaxi, jinak se snadno dopustme
chyby. Na nsledujcm pkladu si pedvedeme jak se d kd pomoc vnoench podmnek
zjednoduit.
Poznmka: Zatm jsme nemluvili o monosti zadvn hodnot uivatelem, proto do skriptu
vstupuj rovnou hodnoty. Pozdji si povme i o vstupu hodnot od uivatele z formule nebo
pomoc dialogovho okna.
Dnen dl je del ne jsem si pvodn myslel, proto zde nenajdete slben klov slova
JavaScriptu. Pesto doufm, e i tento del dl jste strvili a vydrte na pokraovn. Pt se
podrobnji podvme na provdn kdu, ekneme si nco o udlostech a snad konen zbude
msto i pro klov slova.
4. Dl Udlosti
V prvnm dlu jsme si ji vysvtlili co je to JavaScript, kter prohlee ho podporuj a kam a
jak skripty na strnce vkldat. Druh dl objasuje monosti tagu SCRIPT a zklady syntaxe
(promnn, textov etzce, opertory, pkazy a funkce). Posledn tet dl ped tmto se
zabval hloubji opertory, cykly, a podmnkami. Dnenm dlem st Zklady prce s
JavaScriptem ukonme.
Pi prvnm pokusu jet nen naten tag <BODY>, kde je definovna barva odkazu a proto je
vrcena standardn barva odkazu (modr). Jak se strnka postupn nat je nsledn naten
tag <BODY> ve kterm dojde ke zmn barvy odkazu ze standardn modr barvy na
ervenou. Ve druhm pokusu o zjitn barvy odkazu je sekce <BODY> ji natena, a proto
zskme nov definovanou hodnotu barvy odkazu (erven).
Skript definovan uvnit funkce, nen vykonn dokud nen funkce volna. Ale, jak a kdy
umme volat funkci? Dozvte se v nsledujc kapitole: Udlosti.
Udlosti
Kad internetov prohle rozpozn urit mnostv udlost, napklad kdy strnka
dokon sv natn nebo kdy uivatel pesune ukazatel myi nad odkaz i klikne na tlatko
a mnoh dal. Tyto udlosti meme rozpoznat a provst kd JavaScriptu pi jejich vskytu.
Jedna cesta, jak tyto udlosti rozpoznat je pomoc sprvce udlost (event handler). Ten um
udlost zachytit, rozpoznat a vykonat pi jejm vskytu potebn pkazy JavaScriptu. O
sprvce udlost definovan JavaScriptem je mon doplnit vtinu HTML tag (tabulka
ne). Pklady zde uveden funguj jak v IE, tak Netscapu.
Definujeme sprvce udlosti
Pokud chceme definovat sprvce udlosti, pidme jmno tto udlosti do HTML tagu s
pkazem JavaScriptu, kter se m vykonat.
Pklad:
<html>
<head>
<title>Navy</title>
<script type="text/javascript">
var navys;
navys = 0;
</script>
</head>
<body>
<a href="#" onClick="navys++;alert(navys);">navy</a>
</body>
</html>
Promnn navys bude zvena o jedniku pokad, kdy uivatel klikne na odkaz. Do
sprvce udlosti mete napsat jakkoliv kd JavaScriptu, kter je sprvn. Me to bt jeden
pkaz nebo nkolik pkaz oddlench pomoc stednku (;). Nejastj a i nejobvyklej je
volat skrze udlost njakou funkci. Nezapomete, e tyto pkazy se uzavraj do uvozovek a
je nutn zde dodrovat stejn podmnky jako u textovch etzc.
Zmna obrzku
Dal pklad ukazuje dobe znm efekt se zmnou obrzku po najet kurzoru myi.
Poznmka: tento pklad nebude chodit s Internet Explorer verze 3 nebo nim.
Tag <IMG> nem sm o sob sprvce udlosti pro pohyb myi, ale m ho hypertextov
odkaz. Toho tedy vyuijeme a obrzek uzaveme do tagu pro hypertextov odkaz <A
HREF=...></A>.
Podvme se na vlastn kd. Prvn si vytvome funkci zmenObr() pro manipulaci s obrzky.
Funkce je volna s argumenty jmeno a zdroj se ktermi se ve funkci dle pracuje.
Nyn definujeme pro kad odkaz ti sprvce udlosti, jeden kdy je kurzor myi nad
odkazem, druh kdy je kurzor myi odsunut z odkazu a posledn, kdy je my kliknuto na
tento odkaz. Pklad je uveden n:
<a href="http://www.seznam.cz"
onMouseOver="zmenObr (`obr1`, `tlacitko_on.gif`)"
onMouseOut=" zmenObr (`obr1`, `tlacitko_off.gif`)"
onClick="return false;">
<img name="obr1" border=0 src="tlacitko_off.gif">
</a>
Poznmka: Funkce alert() je standartn funkce JavaScriptu, kter zobraz dialogov okno se
zadanm obsahem. V tomto pkladu to bude hodnota document.linkColor, co je barva
odkazu definovan pro tuto strnku v tagu <BODY>.
Udlost
Kdy je volna?
<A>
onClick
Po kliknut my na odkaz.
onMouseOver
onMouseOut
onMouseOver
onMouseOut
onBlur
onFocus
onLoad
onUnload
onReset
Po vynulovn formule.
onSubmit
Pi odesln formule.
onAbort
onLoad
onError
onClick
onBlur
onChange
onFocus
onSelect
<AREA>
<BODY>
<FORM>
<IMG>
<INPUT> s TYPE="SELECT"
onBlur
onChange
onClick
onFocus
Klov slova
JavaScript si pro svoji potebu vyhradil nkolik slov, kter maj speciln vznam a nesm bt
pouita k jinmu elu (Identifiktor - nzev promnn nebo funkce, atd.). S nktermi zde
uvedenmi slovy jste se v kurzu ji setkali a s dalmi se jet seznmte.
abstract
else
instanceof
switch
boolean
enum
int
synchronized
break
export
interface
this
byte
extends
long
throw
case
false
native
throws
catch
final
new
transient
char
finally
null
true
class
float
package
try
const
for
private
typeof
continue
function
protected
var
debugger
goto
public
void
default
if
return
volatile
delete
implements
short
while
Do
import
static
with
double
in
super
5. Dl Udlosti
V minulch dlech jsme si probrali zklady prce s JavaScriptem a dnes se pustme do nov
sti objekty.
Objekty JavaScriptu
Co je to objekt?
Jak se d z jmna pedpokldat, a jak jsem se ji zmnil JavaScript je postaven na
programovacm jazyku JAVA. Oba jsou to objektov orientovan jazyky. Nepjdu do detail
objektov orientovanho programovan, ale vysvtlme si zkladn termny, pro lep
pochopen jazyka JavaScipt.
JavaScript pracuje s objekty. Kad objekt je v podstat blok dat a abychom s tmto blokem
mohli pracovat existuj vlastnosti a metody asociovan s objektem. Vlastnosti mohou bt
promnn nebo jin objekty a sad funkc spojench s objektem kme metody.
jmeno_objektu.jmeno_vlastnosti
dokument.bgcolor = "red";
jmeno_objektu.jmeno_metody
document.write("Pikaz write je metodou objektu dokument.");
Opertor new se pouv k vytvoen novch objekt. Za klovm slovem new nsleduje
konstruktor. Opertorem new se nejdve vytvo nov objekt, kter vak nem definovny
dn vlastnosti. Pak se vyvol specifikovan funkce konstruktoru, kter se mou pedat
parametry.
Nkter objekty, jako napklad Date, maj vce funkc konstruktoru ne jednu.
var rok = new Date().getYear();
novy_objekt = new konstruktor.konstruktor
Dnes jsme si ekli nco krtce o objektech. Vte co je to objektov model dokumentu, e
objekty mou obsahovat dal objekty a promnn, kterm kme vlastnosti a e objekt v
sob m zabudovanou sadu funkc, kterm kme metody. Nakonec jsme si v rychlosti
ukzali jak vytvoit nov objekt.
Tma objekt je sloitj na pochopen a proto se mu budeme vnovat i nkolik dalch dl.
Nastav promnnou dlk na 27, co je poet vech znak v tomto etzci text.
asto potebujeme mnit vlastnosti objektu pmo. Napklad pro zmnu barvy pozad strnky
meme vlastnost bgColor objektu document mnit dynamicky. Jak je pipraveno v ukzce:
<html>
<head>
<title>Zmna barvy strnky</title>
<script type="text/javascript">
<!-// Funkce, kter mn barvu pozad strnky.
function zvolBarvu(barva) {
document.bgColor = barva; //bgColor je vlastnost objektu document
}
//-->
</script>
</head>
<body alink="#808080" vlink="#666666">
<font face="Arial,Helvetica,sans-serif" size="2">
<b>Pklad zmny hodnoty u vlastnosti objektu.</b>
<p>
<!-- Nsledujc dky pouvaj sprvce udlost pro voln funkce
zvolBarvu() -->
Pro zmnu barvy pozad naje kurzorem myi nad odkaz:
<p>
<a href="#" onMouseOver="zvolBarvu(`#ff6666`)"
onMouseOut="zvolBarvu(`#ffffff`)">
erven</a><br>
<a href="#" onMouseOver="zvolBarvu(`#66ff66`)"
onMouseOut="zvolBarvu(`#ffffff`)">
Zelen</a><br>
<a href="#" onMouseOver="zvolBarvu(`#6666ff`)"
onMouseOut="zvolBarvu(`#ffffff`)">
Modr</a>
</font>
</body>
</html>
Nkter vlastnosti objekt nemohou bt zmnny pmo (barvu pozad strnky jsme mnili
pmo pomoc vlastnosti bgColor), napklad vlastnost length u etzc. Nicmn, na co
potebujeme mnit dlku etzce? Pouijeme-li metodu concat(), kter spojuje dva etzce
dohromady, hodnota vlastnosti length urujc dlku etzce se po spojen etzc zmn
automaticky. Pi jejm dalm voln obdrme ji novou hodnotu dlky etzce.
Metody objekt
Metody jsou sady funkc zabudovanch v objektu a pistupujeme k nim pomoc stejn
tekov notace jako u vlastnost. Za jmnem metody nsleduj zvorky obsahujc poadovan
argumenty:
var errorMsg = new String("");
var msgHeader = new String("Chyba: ");
var errorCode = new String("X001");
errorMsg = msgHeader.concat(errorCode); //concat je metoda
document.write(errorMsg); //write je metoda
Objekty JavaScriptu
Tato kapitola vm umon se seznmit s nktermi objekty JavaScriptu. Clem nen zahrnout
vs vekerm vtem vlastnost a metod vech objekt, ale udlat si o nich ucelenou
pedstavu a pochopit zkladn pravidla pouvn. Opt dm pednost snaze vm nco
vysvtlit a ukzat na pkladech, ped suchou teori. Podle m se na pkladech u lpe a
rychleji.
JavaScript obsahuje mnoho peddefinovanch objekt, kter jsou uvedeny pmo v jeho
definici. Nkter reprezentuj rozdln typy dat, jako etzce, sla, zatmco jin se tkaj
objekt na strnce, napklad odkaz, obrzk a dalch. Pi pouvn objekt, jejich
vlastnost a metod musme brt v vahu umstn v hierarchii objekt. Proto je nutn ped
nzvem kad vlastnosti nebo metody napsat i jmno nadazenho objektu.
Vestavn objekty
Vestavn objekty nemaj nic spolenho s web strnkami i HTML jazykem. Pedstavuj
rozen JavaScriptu o pole, zkladn matematick funkce a konstanty, dle umouj prci s
datumem i etzci. A jsou to:
Jak jsme si ji ukzali tyto objekty se vytvej za pomoci opertoru new. Ovem je dobr
vdt, e objekty typu Boolean, Number a String jsou vytveny implicitn. Tzn. nemusme je
vytvet pomoc opertoru new, sta:
var nalezeno = false;
var max = 47.9;
var jmno = "Pepa";
Jinm typem vysoce postavenho objektu, kter se vytvo po naten strnky je navigator.
Ten ale nen soust objektu window. Tento objekt v sob obsahuje informace o typu
prohlee, verzi, dostupnch pluginech a jin.
Na tyto objekty a jejich vlastnosti se odkazujeme opt pomoc teek. Napklad pokud chceme
zjistit URL strnky, pouijeme:
var url = window.location.href;
Protoe vechny zde uveden objekty vychzej z objektu window, JavaScript netrv na tom,
aby se tento objekt musel neustle uvdt. Zpis tedy meme zkrtit:
var url = location.href;
kombinace.
if(confirm("Mte m rdi?")==true)
alert("To je dobe :)");
else
alert("To se mn nelb :(");
Jak u jsme si ekli u textovch etzc, mus se dodrovat urit pravidla syntaxe. Vedle
zpisu dalch uvozovek uvnit uvozovek pomoc zptnho lomtka tu mme i dal
formtovac znaky, kter vyuijeme zejmna u dialogovch oken:
\b - smazn znaku ped kurzorem
\f - posun papru
\n - nov dka
\r - nvrat na zatek dky
\t - tabultor
\` - apostrof (neukonuje etzec)
\" - uvozovka (neukonuje etzec)
\\ - zptn lomtko
Poznmka: Metoda alert() je velmi uiten pi odlaovn kdu. Mete ho umstit do
skriptu a zobrazovat v dialogovm okn hodnoty promnnch a objekt. To me bt
neoceniteln pi snaze vystopovat chybu! (Stejn dobe se d pout i objekt document.write.)
Dal metody otevrajc, zavrajc nebo mnc vzhled okna prohlee si ukeme v sti 3.
V tto sti bude e o prci s okny a rmy.
Jin uiten metoda objektu window je setTimeout(). Metoda umouje provdt sti kdu
JavaScriptu po uritm asovm intervalu. Syntaxe kdu, kter m bt vykonn se d
stejnmi pravidly jako udlosti. Tedy pkazy nebo funkce JavaScriptu uzaven v
uvozovkch:
setTimeout("navys++; alert(`Ahoj svte!`);", 500);
Kd nahoe vyk pl vteiny (asov daj se udv v milisekundch, 1/1000 sekundy), pot
nav promnnou navys a oteve dialogov okno alert s textem "Ahoj svte!".
Metoda setTimeout() vrac uniktn slo. Toto slo meme pout u metody
clearTimeout() pro zruen pkaz, kter se maj vykonat po uplynut asovho intervalu.
setTimeout("obnovCas();", 1000);
}
//-->
</script>
</head>
<body onLoad="obnovCas();">
<font face="Arial,Helvetica,sans-serif" size="2">
<b>Pklad pouit metody setTimeout().</b>
<form name="hodiny">AS: <input type="text" name="cas" size="7">
</form>
</font>
</body>
</html>
Objekt frame
Objekt frames nle do nejvyho objektu window. Pokud strnka obsahuje rmy pak hlavn
objekt window obsahuje pole nazvan frames s vlastnm objektem window pro kad objekt
tohoto pole.
Tyto rmy mou obsahovat dal rmy. Z rmu se meme odkzat na vytvec (rodiovsk
- frameset) okno pomoc zpisu window.parent nebo pouze parent. U vce zanoench rm
se d pout zpis window.parent.parent. Zpisem window.top se odkeme na nejvy okno
z kterhokoliv rmu.
Tyto vlastnosti umouj pracovat s daty nebo spoutt funkce v rmu z jinho rmu.
st ohledn rm je o nco sloitj na pochopen a proto j bude vnovna pozornost v
samostatn st 3 - Prce s okny a rmy.
Tento zpis nm zpstupn obrzek v tvrtm <IMG> tagu na strnce (sluje se od nuly).
Pracovat s selnmi indexi je nevhodn. JavaScript natst umouje pout jmno obrzku
jako index pole, namsto sla.
var abc = document.images["jmeno_obr"];
Tento zpis vrt obrzek jeho atribut NAME v tagu <IMG> obsahuje "jmeno_obr".
Poznmka: Netscape ve verzi 3 obsahuje chybu. Pokud je obrzek umstn uvnit tabulky vrt
se stejn obrzek nkolikrt, tm pdem nememe pesn identifikovat hodnoty obrzku.
Nkdy se d pout jet zkrcenj zpis ne jsme si zatm uvedli. Pokud je prvek na strnce
uniktn tzn., dan jmno prvku se sm na strnce vyskytnout pouze jednou. Meme pout
zpis:
var abc = document.jmeno_obr;
Objekt Image
Informace o obrzcch jsou uloeny v objektu Image, tyto informace obsahuj URL obrzku,
jeho stav naten a informace o vce i ce. Pomoc pole images meme pistupovat ke
vem vlastnostem objektu Image. Ve vtin ppad pracujeme s obrzky, kter jsou v
images poli, ale nkdy potebujeme pracovat i s obrzky, kter jet na strnce nejsou.
Napklad chceme-li vytvoit efekt pro zmnu obrzku po najet kurzorem myi, je dobr
nast si pedem obrzek pro zmnu. Aby se nemohlo stt, e budeme s my nad obrzkem
ekat a ekat, ne se zmn. Proto vytvome nov objekt Image a do vlastnosti .src tohoto
novho objektu zadme cestu k obrzku:
var mujObr = new Image();
mujObr.src = "obr/obrazek2.gif";
<html>
<head>
<title>Zmna obrzku</title>
<script type="text/javascript">
<!-// Pednateme si obrzek `bigred.gif`.
var mujObr = new Image();
mujObr.src = "graphics/bigred.gif";
// Funkce na zmnu obrzku.
function zmenObr(jmeno, URL) {
document.images[jmeno].src = URL;
return true;
}
-->
</script>
</head>
<body bgcolor="#ffffff">
<font face="Arial,Helvetica" size=2>
<b>Ukzka vysvtluje, jak pednast obrzek pro odstrann pauzy u efektu
se zmnou obrzku:</b>
<p>
<!-- Zde zan efekt zmny obrzk. -->
<a href="#"
onMouseOver="zmenObr(`obrazek1`, `graphics/biggreen.gif`)"
onMouseOut="zmenObr(`obrazek1`, `graphics/bigblue.gif`)"
onClick="return false;">
<img name="obrazek1" align="right" border="0" src="graphics/bigblue.gif"
hspace="20">
</a>
<em>Bez pednaten.</em>
<p>
Pi pesunu kurzoru myi nad obrzek se zane natat obrzek pro zmnu.
<p>
<a href="#"
onMouseOver="zmenObr(`obrazek2`, `graphics/bigred.gif`)"
onMouseOut="zmenObr(`obrazek2`, `graphics/bigblue.gif`)"
onClick="return false;">
<img name="obrazek2" align="right" border="0" src="graphics/bigblue.gif"
hspace="20">
</a>
<em>S pednatenm.</em>
<p>
V tomto ppad pokud nastavte kurzor myi nad obrzek, bude zmn velmi
rychle.
<em>(Pokud byl ji naten.)</em>
<p>
</font>
</body>
</html>
Objekt Link
Objekt Link nebude s nejvt pravdpodobnost pouvat moc asto. Nejzajmavj budou
asi vlastnosti href, kter vrac URL strnky.
document.links[0].href
Poznmka: Jestlie strnka obsahuje obrzkov mapy (imagemap), objekt Link je vytvoen
pro kad tag.
Objekt Form
Form objekt nen a tak zajmav sm o sob, ale obsahuje dal objekty, kter zpstupuj
ostatn prvky formule. Jsou zde objekty pro vstupn pole text, password, textarea, skryt
pole (hidden fields), zatrtka radiobutton a checkbox, roletky a tlatka reset a submit.
Kad prvek formule m svj vlastn objekt se svmi vlastnosmi. Vechny podporuj
vlastnost value. Vlastnost vrac jakkoliv daje zadan uivatelem, napklad textov vstup
nebo hodnotu pidlenou pomoc atributu VALUE v ktomu opovdajcmu HTML tagu (nap.:
<input type="hidden" value="www.moje.cz">).
Pro pstup k jednotlivm elementm formule, musme naped zpstupnit objekt form.
Podle pklad uvedench ji dve, meme tak uinit z objektu document jednm z tchto
zpsob:
document.forms[0]
document.forms["email"]
document.email
Podobn meme pistupovat i k vstupnm objektm pouitm pole elements nebo pmo
pomoc hodnoty atributu NAME="..." v <INPUT> tagu:
document.forms[0].elements[3]
// Tet vstupn prvek v prvnm formuli na strnce.
document.forms["objednavka"].elements["adresa"]
// prvek pojmenovan "adresa" ve formuli "objednavka".
document.objednavka.adresa
// prvek pojmenovan "adresa" ve formuli "objednavka".
Nejastj pouit je pro kontrolu daj ve formuli, ped odeslnm dat na server.
Jednoduch pklad demonstruje pstup k hodnotm ve formuli a vygenerovn chybovho
hlen, pokud je njak pole formule nevyplnno.
<html>
<head>
<title>Kontrola formule</title>
<script type="text/javascript">
<!-// Funkce pro kontrolu pol formule. Vrt false pokud je pole przdn.
function kontrFormular() {
if (document.mujFormular.uzivCislo.value == "") {
document.mujFormular.uzivCislo.focus();
alert("Prosm zadejte vae uivatelsk slo.");
return false;
}
if (document.mujFormular.email.value == "") {
document.mujFormular.email.focus();
alert("Prosm zadejte emailovou adresu.");
return false;
}
if (document.mujFormular.tel.value == "") {
document.mujFormular.tel.focus();
alert("Prosm zadejte telefonn slo.");
return false;
}
return true;
}
//-->
</script>
</head>
<body bgcolor="#ffffff">
<font face="Arial,Helvetica,sans-serif" size="2">
<b>Pklad demonstruje pstup k hodnotm ve formuli, pokud
je njak pole formule nevyplnno, zobraz se chybov hlen.<br> <br>
Formul nelze odeslat pokud nejsou vechna pole vyplnna.</b>
<p>
Prosm, vyplte vechna pole:
<p>
<form name="mujFormular" onSubmit="return kontrFormular()"
action="dekuji.html" method="get">
<table border=0 cellpadding=2 cellspacing=0>
<tr>
<td><font face="Arial,Helvetica" size=3>Uivatelsk slo:</font></td>
<td><input name="uzivCislo" type="input" value="" size=30></td>
</tr>
<tr>
<td><font face="Arial,Helvetica" size=3>Emailov adresa:</font></td>
<td><input name="email" type="input" value="" size=30></td>
</tr>
<tr>
<td><font face="Arial,Helvetica" size=3>Telefon:</font></td>
<td><input name="tel" type="input" value="" size=10></td>
</tr>
</tr>
<tr>
<td align=center colspan=2><input type="submit" value="Odeslat">
<input type="reset" value="Vynulovat"></td>
</tr>
</table>
</form>
</font>
</body>
</html>
Pr poznmek k kdu:
Objekt Date
S objektem Date jste se mohli v prbhu serilu setkat ji nkolikrt, napklad v estm dlu.
Nkdy jsou s tmto objektem v zatcch spojeny urit problmy a tak si ho vysvtlme o
nco podrobnj ne ostatn.
Hodnota asu je v objektu Date uloena jako poet milisekund od potku. Tento potek
je stanoven na 1.1.1970 greenwichskho asu. Je zde pouit standard z UNIXu, kde se toto
datum asto oznauje jako epocha, protoe krtce pedtm byl systm UNIX poprv
pedstaven potaovmu svtu.
Jist jste ji vichni urit pochopili, e objekt Date slou ke zjiovn informac o datu a
ase. pln nejjednodu pouit vypad takto:
<script type="text/javascript">
<!-document.write(Date());
//-->
</script>
Informace o ase sice mme, ale pro bnou praxi nejsou moc vyuiteln. Jsou anglicky a ani
vstup nepat mezi nejpehlednj. Natst existuje cel ada metod (vlastnosti nejsou),
kter nm prci s datem a asem usnadn. Ovem pedtm, ne tyto metody meme pout je
nutn objekt Date vytvoit pomoc zpisu, kter ji dobe znme:
var datum = new Date();
<script type="text/javascript">
<!-var datum = new Date(); // vytvo objekt datum obsahujc aktuln
datum a as
var GMT = datum.toGMTString();
var mistni_cas = datum.toLocaleString();
document.write("Date():" + datum +"<BR>GMT: " + GMT +
"<BR>Mstn as: " + mistni_cas);
//-->
</script>
<script type="text/javascript">
<!-var datum = new Date();
document.write(datum.getTimezoneOffset());
//-->
</script>
Jednotliv metody get a set se v syntaxi moc neli a proto si probereme pouze get metody:
Metoda
Vznam
NN IE
ECMA
getDate()
2.0
3.0 1.0
getDay()
2.0
3.0 1.0
getMonth()
2.0
3.0 1.0
getYear()
2.0
3.0 1.0
4.0
4.0 1.0
getHours()
2.0
3.0 1.0
getMinutes()
2.0
3.0 1.0
getSeconds()
2.0
3.0 1.0
getTime()
3.0 1.0
Poznmka: Vechny metody vracej slo, ne textov etzec! Pi pouvni tchto metod je
nutn nzvy metod zapsat sprvn vetn velkch a malch psmen.
Protoe s pechodem na rok 2000 se vyskytly problmy a kad vrobce prohlee je e
trochu odlin mte zde tabulku, kde najdete nvratov hodnoty pro metody getYear() a
getFullYear().
Prohle
Netscape 2 Windows 98
100
nepodporuje
Netscape 2 Mac
100
nepodporuje
Netscape 3 Windows 98
2000
nepodporuje
Netscape 3 Mac
2000
nepodporuje
2000
nepodporuje
98
98
Netscape 3 Linux
Explorer 3 Windows
98
100
nepodporuje
Explorer 3 Mac
98
2000
2000
Opera 3 Windows
98
100
nepodporuje
Netscape 4 Windows 98
100
2000
Netscape 4 Mac
98
100
2000
Netscape 4 Linux
98
100
2000
Netscape 4 Solaris
98
100
2000
Explorer 4 Windows
98
2000
2000
Explorer 4 Mac
98
2000
2000
Opera 4 Windows
98
100
2000
Opera 4 Linux
98
100
2000
100
2000
Konqueror
Explorer 5 Windows
98
2000
2000
Explorer 5 Mac
98
2000
2000
Explorer 5 Solaris
2000
2000
Netscape 6 Windows 98
100
2000
Netscape 6 Mac
98
100
2000
Netscape 6 Linux
98
100
2000
Objekt Math
Tento objekt obsahuje adu matematickch funkc (metod a vlastnost), kter se daj pi
nkterch vpotech vyut. Nsledujc tabulka ukazuje ty nejdleitj:
Metody
Nzev
Popis
abs()
acos()
asin()
atan()
cos()
exp()
log()
sin()
sqrt()
tan()
Vlastnosti
Nzev
Popis
PI
LN2
LN10
Pklady:
document.write(Math.round(8.6));
document.write(Math.random());
document.write(Math.PI);
Hody kostkou:
<script type="text/javascript">
<!-var kostka;
kostka = Math.random();
kostka = Math.round(kostka*5)+1;
document.write(kostka);
//-->
</script>
st 3
Nevm co vce ci k tto nov kapitole. Doufm, e nzev ve vystihuje. A proto zanme!
<p>
<li>Nejvzdlenj planeta od slunce?<br>
<a href="#" onClick="return zobrOdp(`Pluto.html`);">Odpov</a>
</ol>
</font>
</font>
</body>
</html>
Pokud n slunen systm neznte tak dobe jako j :)), zde jsou odpovdi: 1. Jupiter, 2.
Merkur, 3. Pluto.
Kad odkaz na oven sprvnosti zodpovzen vol funkci zobrOdp() a ped ji URL
strnky se sprvnou odpovd. Ve volan funkci zobrOdp() je pouita metoda open() pro
vytvoen novho okna.
function zobrOdp(url) {
window.open(url, "odpoved",
"height=100,width=100,directories=no,location=no,menubar=no," +
"resizeable=no,status=no,toolbar=no");
return false;
}
Parameter
Hodnota Funkce
toolbar
yes / no
M se zobrazit toolbar?
location
yes / no
directories
yes / no
Zobrazit odkazy?
status
yes / no
Stavov dek?
menubar
yes / no
Hlavn menu?
scrollbars
yes / no
Posuvn lita?
resizable
yes / no
copyhistory yes / no
width
slo
height
slo
top
slo
left
slo
Kd nahoe nen nijak sloit a jist se d snadno pochopit, proto nebudu uvdt pklad.
Z nov vytvoenho okna se meme odkazovat na okno (pvodn), to z kterho bylo toto
nov okno vytvoeno pomoc vlastnosti opener, co je tak objekt.
Napklad:
window.opener.location = "nova_stranka.html";
Zmn obsah starho (pvodnho) okna (okna, z kterho vzniklo nov okno) na
nova_stranka.html.
Nejlpe asi bude uvst pklad. Tento krtk skript vytvo nov plovouc okno s odkazy. Po
kliknut na odkaz se plovouc okno zave a pvodn okno je pesmrovno na strnku z
odkazu.
<html>
<head>
<title>Plovouc menu</title>
<script type="text/javascript">
<!-var plovMenu;
function zobrMenu()
{
<!-- Definice odkaz pro plovouc menu -->
var menu="\
<font face=`Arial,Helvetica,sans-serif` size=`2`>\
<ul>\
<li><a href=`#`
onClick=window.opener.location=`http://www.seznam.cz/`;window.close();>Sezn
am</a>\
<li><a href=`#`
onClick=window.opener.location=`http://www.quick.cz/`;window.close();>Quick
</a>\
<li><a href=`#`
onClick=window.opener.location=`http://www.uzdroje.cz/`;window.close();>U
zdroje</a>\
<li><a href=`#`
onClick=window.opener.location=`http://www.centrum.cz/`;window.close();>Cen
trum</a>\
</ul>\
<center>\
<form>\
<input type=submit value=`Close` onClick=`window.close(); return false;`>\
</form>\
</center>\
</font>"; //toto cel je jeden dlouh etzec
<!-- Zobrazen plovoucho menu -->
plovMenu = window.open("","","width=200,height=170");
plovMenu.document.write(menu); //vykreslen odkaz v plov. menu
}
//-->
</script>
</head>
<body>
<font face="Arial,Helvetica,sans-serif" size="2">
<b>Pklad s plovoucm menu. Po kliknut na odkaz v menu se toto okno zave
a pvodn
strnka je pesmrovna na strnku vybranou.</b><br> <br>
<a href="javascript:zobrMenu();">Otevi menu</a><br>
<a href="javascript:plovMenu.close();">Zavi menu</a>
</font>
</body>
</html>
Poznmka: etzec obsahujc menu je opt dlouh a pro lep pehlednost je rozdlen na
vce dk. V tomto ppad je vdy na konec dku pidno zptn lomtko, kter skriptu
sdluje, e etzec pokrauje na dalm dku. Zde jsme nepouili opertor `+`.
Zavrn oken
Znovu se podvejte na plovouc menu z pedchozho pkladu i z pkladu se sluneni
soustavou. Okno mete zavt tradinm zpsobem nebo pomoc metody close().
<form>
<input type=submit value="Zavt" onClick="window.close(); return false;">
</form>
Po stisku tlatka je volna metoda window close(), kter zave okno, stejn jako Soubor ->
Zavt, kek v nstrojov lit nebo Alt+F4.
Poznmka: bez potvrzen meme zavt pouze okno, kter bylo vytvoeno pomoc skriptu.
Zkuste si nast odpov v kvizu na planety a zavt pomoc tlatka Close.
Prce s rmy
Jak u jsem zmnil v sti o objektech JavaScriptu, rmy representuj samostatn okna. Kad
takov okno m svoje URL, historii a vlastnosti. Zaneme tedy hned pkladem, protoe jak
doufm ty rychlmu uen napomhaj nejvce.
V pkladu vytvome soubor oken, pomoc nsledujcho HTML kdu:
<html>
<head>
<title>Kurz JavaScriptu - frameset</title>
</head>
<frameset rows="310,*">
<frame src="ram1.html" name="ram1" scrolling="No">
<frameset cols="33%,33%,33%">
<frame src="ram2.html" name="ram2" scrolling="No">
<frame src="ram3.html" name="ram3" scrolling="No">
<frame src="ram4.html" name="ram4" scrolling="No">
</frameset>
</frameset>
</html>
Tmto HTML kdem vytvome tyi rmy, jeden nahoe a ti stejn velikosti pod nm. Jak
jsme si ji ukzali v minulch dlech barva pozad strnky se mn pomoc vlastnosti
bgColor. Ovem v tomto ppad nechceme mnit barvu stvajc strnky (rmu), ale mnme
barvu strnky v jinm rmu.
Tto zmny doclme tak, e ze stvajcho rmu (okna) hledme rodie tohoto rmu ili
vlastn strnku, ve kter jsou rmy definovan (frameset). Rodiovsk okno (strnku)
nalezneme pomoc vlastnosti window.parent (meme pout i u zmnnou vlastnost top,
kter ns odke na nejvy okno z kterhokoliv rmu). Nalezenm rodie mme k dispozici
objekt s definic vech rm a pouitm vlastnosti frames nsledn obdrme pole vech
rm. K jednotlivm polm meme pistupovat, jak u jsme si dve ukzali napklad
pomoc zpisu frames[jmeno_ramu]. Po inicializaci pole mme k dispozici objekt window
vybranho rmu a meme s nm pracovat, teba zmnit barvu pozad pomoc vlastnosti
bgColor.
Schma znzoruje jak meme pomoc vloen krtkho kdu do strnky ram1.html zmnit
barvu v rmu 4:
<form>
<input type="submit" value="Zmna rmu 4 na luto"
onClick="parent.frames[`ram4`].document.bgColor=`#FFFF00`">
<!-- stejn:
window.parent.window.frames[`ram4`].window.document.bgColor=`#FFFF00` -->
</form>
Poznmka: Kd meme beze zmny vloit do jakhokoliv rmu (nejenom rmu 1) a bude
fungovat.
Jak vidte z obrzku z jednotlivch rm mohu pistupovat k ostatnm rmm pouze pes
rodiovsk objekt (frameset). Naopak z rodiovskho objektu s definic rm (frameset)
mohu pistupovat k jednotlivm rmm pmo.
Snad jste to alespo trochu pochopili. Nyn vytvome funkci zmBrvOkna(), kter po
kliknutm na tlatko v hornm okn budeme mnit barvu jednotlivch oken pod nm. Funkce
bude uloena v hornm rmu (ram1.html) a jako parametry budeme pedvat jmno okna a
barvu:
zmBrvOkna(`ram2`,`#00ff00`);"></td>
<td><input type="submit" value="Zelen" onClick="return
zmBrvOkna(`ram3`,`#00ff00`);"></td>
<td><input type="submit" value="Zelen" onClick="return
zmBrvOkna(`ram4`,`#00ff00`);"></td>
</tr>
<tr>
<td><input type="submit" value="Modr" onClick="return
zmBrvOkna(`ram2`,`#0000ff`);"></td>
<td><input type="submit" value="Modr" onClick="return
zmBrvOkna(`ram3`,`#0000ff`);"></td>
<td><input type="submit" value="Modr" onClick="return
zmBrvOkna(`ram4`,`#0000ff`);"></td>
</tr>
</table>
</form>
</font>
</body>
</html>
Nyn si ukeme, jak volat funkci zmBrvOkna() z jinho rmu. Do t spodnch strnek ve
kterch mnme barvu pidme kd pro zmnu na pvodn blou barvu.
<html>
<head>
<title>Rm 2</title>
</head>
<body bgcolor="#ffffff">
<center>
<font face="Arial,Helvetica" size="4"><b>Rm 2</b></font>
<form>
<input type="submit" value="Default" onClick="return
window.parent.frames[`ram1`].zmBrvOkna(window.name, `#ffffff`);">
</form>
</center>
</body>
</html>
window.parent.frames[`hlavni_ram`].zmBrvOkna(window.name, `#ffffff`);
Jak vidte pouv se stejn postup jako pedtm. Opt se pomoc window.parent odkazujeme
na strnku s definicemi rm a pomoc frames["ram1"] se odkazujeme na vrchn rm (Rm
1). Pipojenm funkce zmBrvOkna() na konec volme tuto funkci i s parametry
(jmno_rmu, barva).
Vlastnost name pedvme jako parametr ve voln funkce zmBrvOkna(). Vlastnost name
objektu window vrac jmno aktulnho rmu z pole frames[] (jmno rmu je definovno v
tagu <FRAME>, NAME=hodnota). Tm pedme "automaticky" funkci zmBrvOkna() jako
parametr jmno rmu z kterho je tato funkce volna.
Opt schma pro snadnj pochopen:
pln postauje:
location = "http://www.google.com"; //jak jsme si ji uvedli, objekt window
nemusme uvdt
Jako pklad me poslouit tento krtk kd, kter zmn aktuln strnku po 5 vteinch a
zobraz strnku www.google.com:
setTimeout("window.location = `http://www.google.com`;", 5000);
Okno meme tak zmnit nebo nast pomoc jedn ze dvou metod objektu location:
Pouit metody replace() zapin, e uivatel nen schopen vrtit se na pedchoz strnku
pomoc tlatka prohlee Zpt. Neznamen to, e uivatel neme pout tlatko Zpt
vbec, ale pokud ho pouije bude vrcen ped nahrazovac strnku (strnku, na kter jsme
pouili metodu replace).
Tato metoda me pi patnm pouit hodn ztit ivot uivatelm, jindy zase naopak me
bt jej pouit v nkterch situacch pmo vhodn. V nsledujcm pkladu pouijeme opt
metodu setTimeout() pro opakovan natn strnek s reklamou do rmu kad ti vteiny.
Nechte ukzku bet nkolik vtein a pot zkuste vrtit na vodn strnku pomoc tlatka
Zpt na prohlei.
<html>
<head>
<title>Reklama pomoc - location</title>
<script type="text/javascript">
<!-// Seznam reklamnch strnek.
var stranky = new Array("rkl1.html", "rkl2.html", "rkl3.html");
var n = 0;
// Funkce mnc strnky s reklamou ve spodnm rmu.
function obnReklamu() {
window.parent.frames["reklama"].location = stranky[n];
if (++n >= stranky.length)
n = 0;
setTimeout("obnReklamu()", 3000);
}
//-->
</script>
</head>
<body onLoad="obnReklamu()">
<font face="Arial,Helvetica,sans-serif" size="2">
<b>Pklad se zmnou reklamnho banneru.</b>
<p>
Pokad, kdy se banner zmn, je pidna nov URL do historie strnek v
prohlei.
Pokud by jste se chtli vrtit na pedchoz strnku pomoc tlatka zpt na
prohlei,
asi by jste se uklikali.
</font>
<p>
</body>
</html>
Museli jste nkolikrt klinout, e ano? A m dle by strnka bela, tm obtnj by bylo
vrtit se na pvodn strnku. Nyn si pedvedeme, jak tento problm vyeit pomoc metody
replace(). V pvodnm skriptu s reklamou vymte funkci obnReklamu() za tuto:
function obnReklamu() {
window.parent.frames["reklama"].location.replace(stranky[n]);
if (++n >= stranky.length)
n = 0;
setTimeout("obnReklamu()", 3000);
}
Objekt history
Dal z uitench objekt je objekt history, kter uchovv informace o URL vech
navtvench strnek. Objekt history podporuje ti metody:
Tento pkaz nate prvn strnku jej URL v historii obsahuje slovo "netscape" (je brn zetel
na velikost psmen):
history.go("netscape");
// nepodporuje IE
V uvedenm pkladu je spodn rm s pedpovd poas pro rzn svtov msta posouvn
pomalu nahoru.
<html>
<head>
<title>Rolujc pedpov poas</title>
<script type="text/javascript">
<!-// Promnn y pro poten vertikln pozici rmu.
var y = 0;
function rolujRam() {
// Roluje rm s pedpovd poas vdy o jeden pixel (0-870) a vdy po
// 50 milisekundch vol funkci znovu.
y++;
if (y > 870)
y = 0;
window.parent.frames["pocasi"].scroll(0, y);
setTimeout("rolujRam()", 50);
}
//-->
</script>
</head>
<body bgcolor="#ffffff" text="#000000" onLoad="rolujRam();">
<font face="Arial,Helvetica,sans-serif" size="2">
<b>Pklad rolujc strnky.</b>
</font>
</body>
</html>
V pkladu je strnka posouvna a do 870 pixel a pot se zane posouvat opt od zatku.
Dalm zpsobem jak pepsat obsah okna je pout metody write() a writeln() objektu
dokument. Tyto funkce umouj vypsn textovho etzce, ve kterm mohou bt i HTML
tagy pomoc prohlee na obrazovku monitoru. Nsledujc pklad vype text zadan do
formule v hornm rmu do spodnho rmu.
<html>
<head>
<title>Vypsn textu</title>
<script type="text/javascript">
<!-function prepisRam() {
// Pepe obsah spodnho rmu textem vepsanm do formule.
window.parent.frames["text"].document.writeln(document.forms[0].text.value)
;
window.parent.frames["text"].document.close();
return false;
}
//-->
</script>
</head>
<body bgcolor="#ffffff">
<font face="Arial,Helvetica" size=2>
<b>Pklad s pepsnm obsahu jin strnky.</b>
<p>
Napite njak text a stisknte "Odeslat", text bude zobrazen ve spodnm
rmu.<br>
Mete pouvat i HTML tagy, jako napkad <B></B>,<BR>:
<form onSubmit="return prepisRam();">
<textarea name="text" rows=5 cols=80></textarea><br>
Mete si vyzkouet rzn experimenty s vkldnm rznch HTML tag. Napklad mete
pout tag <BODY> s rznou barvou pozad strnky. Dal experimenty se daj provdt i se
skripty, napite si njak skript a vyzkouejte si co se stane. Pklad pro ty s men fantazi :-)
<script>
alert("Ahoj lidi!");
</script>
Prvn dek vype text zapsan do formule v hornm rmu do strnky v rmu spodnm.
Nsledn je volna metoda close(), kter prohlei sdl, e vstup je u konce a me dojt k
vyrendrovn (vygenerovn) strnky. Metoda close() by mla bt volna vdy, kdy dojde k
pepsn obsahu strnky.
Mal vylepen
Mon jste si vimli, e posledn pklad pidv kadou nov vygenerovanou strnku do
historie prohlee. S podobnm problmem jsme se u setkali na strnce s reklamou.
Problm vyeme podobn jako u reklamy, pidme jeden dek s metodou open() do funkce
prepRam().
Poznmka: Metoda open() je v tomto ppad metodou objektu document, ne window!
window.parent.frames["text"].document.open("text/html", "replace");
window.parent.frames["text"].document.writeln(document.forms[0].text.value)
;
window.parent.frames["text"].document.close();
etzec "text/html" v metod open() sdluje prohlei, e m oekvat HTML data. Dal
etzec "replace" prohlei sdl, e nem pidvat poloky do historie prohlee. Je to
stejn jako, kdy pouijeme location.replace(URL) pi zmn obsahu okna nebo rmu.
st 4
Vce o formulch
Pouit formul
V doposud uvedench pkladech jste si mon u vimli, e jsme v pedstihu pouvali
vtinou elementy formule ve spojen s kdem JavaScriptu (napklad dl sedm a jedenct),
jako funkce rznch tlatek a textov vstupy. Elementy formule dovoluj uivateli interakci
se strnkou m jsou ideln pro pouit se skriptem. Dovoluj data shromdit a nsledn
provst akci podle vstupu uivatele. V tto tvrt sti se tedy podvme na rzn elementy
formule a ukeme si jak mohou bt pouity spolu se skriptem.
Objekt form
Pedtm, ne se pustme do jednotlivch element formule, tak se podvme na samotn
objekt form. Jak u jsme uvedli v sti 2 "Objekty JavaScriptu" je objekt form vytvoen pro
kad prov tag <FORM></FORM> na strnce. Podobn je tak vytvoen vlastn objekt pro
kad element (checkbox, radio a text) v objektu form (ve formuli). Tyto jednotliv objekty
element formule jsou uloeny v poli a dostaneme se k nim za pouit vlastnosti elements
objektu form.
K elementm formule budeme pistupovat stejn jako v minulch pkladech. Prvn pklad
obsahuje dva formule na strnce:
<html>
<head>
<title>Ukzkov formul</title>
</head>
<body>
<form action="/cgi-bin/customer.cgi" method="post" name="infozakaznik">
Jmno: <input type="text" name="jmeno"><br>
Adresa: <input type="text" name="adresa"><br>
<input type="submit" value="Odeslat"><input type="reset" value="Vymazat">
</form>
<form action="/cgi-bin/order.cgi" method="post" name="dataobjednavky">
ID zbo: <input type="text" name="idzbozi"><br>
Mnostv: <input type="text" name="mnozstvi"><br>
<input type="submit" value="Odeslat"><input type="reset" value="Vymazat">
</form>
</body>
</html>
Pro pstup k elementu formule "mnozstvi" meme pout jeden z nsledujcch zpis (ale
i dal):
var
var
var
var
mn
mn
mn
mn
=
=
=
=
document.forms[1].elements[1];
document.forms["dataobjednavky"].elements[1];
document.forms.dataobjednavky.elements["mnozstvi"];
document.dataobjednavky.mnozstvi;
Pro kad typ elementu formule (checkbox, radio a text) je k dispozici jin typ objektu.
Vtina z tchto objekt nabz k pouit vlastnost value a napklad metodu focus(). Ovem
nkter vlastnosti a metody jsou pslun pouze uritmu typu elementu formule a jeho
objektu.
Poznmky: Seznam vekerch objekt formule a jejich vlastnost a metod bude uveden v
poslednm dlu tto sti jako ploha.
Pokud chcete zjistit typ objektu pro urit element formule, pouijte vlastnost type. V
uvedenm pkladu je pomoc
document.dataobjednavky.mnozstvi.type
Prv rozdl mezi ji uvedenmi tlatky Submit a Reset a obecn pouitelnm Button je ten,
e Submit a Reset maj nastavenou implicitn akci, kter se provede po stisku tlatka. Submit
odesl data na server a Reset mae jednotliv pole formule. Pro button mus bt
poadovan akce definovna za pomoci ulosti onClick.
Vykonn definovan implicitn akce element Submit a Reset mete pepsat pomoc
nvratov hodnoty false udlosti onClick. Nsledujc ukzka jednoduch kalkulaky ukazuje
jak pomoc vech t typ tlatek vykonat stejnou akci.
<html>
<head>
<title>Jednoduch kalkulaka</title>
<script>
// Funkce je volna pi stisku jakhokoliv ze t tlatek.
function secti() {
document.forms[0].soucet.value = parseInt(document.forms[0].prvni.value,
10) +
parseInt(document.forms[0].druhy.value,
10);
}
</script>
</head>
<body bgcolor="#ffffff">
<font face="Arial,Helvetica,sans-serif" size="2">
<!-- Jednoduch kalkulaka -->
<b>Pklad pouit rozdlnch typ tlatek:</b>
<p>
Vlote dv sla a stisknte jakkoliv ze t tlatek pro souet:
<p>
<form>
<input name="prvni" type="text" value="" size=4> + <input name="druhy"
type="text" value="" size=4> =
<input name="soucet" type="text" value="" size=4>
<p>
<input type="submit" value="Seti - Submit" onClick="secti(); return
false;">
<input type="reset" value="Seti - Reset" onClick="secti(); return
false;">
<input type="button" value="Seti - Button" onClick="secti();">
</form>
</font>
</body>
</html>
Asi jste zaregistrovali, e jsme v pkladu pouili novou metodu (funkci) parseInt(). Funkce
pevd textov etzec na slo v zadan soustav. Funkce parseInt() je vestavn funkce
JavaScriptu. Tato metoda proto nen asociovan s dnm objektem, ale je soust jazyka
samotnho.
parseInt(etzec ,[soustava])
Pokud bysme tuto funkci nepouili a vstupn etzec nepevedli na slo obdrme jako
vsledek pi pokusu sest "2" a "2" opt etzec "22" a ne slo 4.
Tlatko Reset po stisku vymae (nastav) veker pole formule na jejich implicitn hodnoty,
specifikovan pomoc atributu VALUE=. Toto se nm nkdy nehod, a to tehdy pokud
potebujeme vymazat pole formule pln a ne vrtit na hodnotu v atributu VALUE. Jak
doclit toho, aby se elementy formule vymazaly pln si ukeme v nsledujcm pkladu,
kdy pepeme implicitn hodnoty VALUE na null.
<html>
<head>
<title>Mazn</title>
<script type="text/javascript">
<!-// Funkce pro vymazan implicitnch hodnot (value) formule jet ped
vykonnm zabudovan funkce tlatka Reset.
function clearFields(f) {
f.vyrobce.defaultValue = "";
f.os.defaultValue = "";
return true;
}
//-->
</script>
</head>
<body bgcolor="#ffffff">
<font face="Arial,Helvetica,sans-serif" size="2">
<b>Nadefinovn vlastn akce tlatku <i>Reset</i>:</b>
<p>
Prosm vyplte nsledujc informace:
<p>
<form onReset="return clearFields(this);">
<table border="0" cellspacing="0" cellpadding="4">
<tr>
<td><font face="Arial,Helvatica" size=3>Vrobce potae:</font></td>
<td><input type="text" name="vyrobce" value="Compaq" size="30"></td>
<td><font face="Arial,Helvatica" size=3>Model:</font></td>
<td><input type="text" name="model" size="30"></td>
</tr>
<tr>
<td><font face="Arial,Helvatica" size=3>Operan systm:</font></td>
<td><input type="text" name="os" value="Windows 95" size="30"></td>
<td><font face="Arial,Helvatica" size=3>Verze:</font></td>
<td><input type="text" name="version" size="30"></td>
</tr>
<tr>
<td colspan="4"><input type="reset" value="Reset"></td>
</tr>
</table>
</form>
</font>
</body>
</html>
Poznmka: Skryt pole se pouvaj pro penos informac na a ze serveru. Pestoe nejsou na
strnce zobrazena lze se k nim dostat pes zdrojov kd strnky. Proto pokud tmto zpsobem
chcete pedvat citliv informace je dobr tyto data njak zaifrovat, aby je mohl zptn
deifrovat pouze k tomu uren server.
Elementy text a textarea poskytuj udlost onChange, kter umouje provst akci pi zmn
pole formule. Vyuit tto udlosti demonstruje dal pklad. Vimnte si, e udlost
OnChange je volna pouze pokud uivatel vstupn pole zmn a pot opust (pomoc klvesy
TAB, myi nebo stiskem klvesy ENTER).
<html>
<head>
<title>onChange</title>
<script type="text/javascript">
<!-// Potadlo pro poet voln funkce aktualInfo().
var pocet = 0;
// Funkce pro sumarizaci vstupnch daj.
function aktualInfo() {
pocet++;
document.forms[0].all.value = "Poet voln: " + pocet + "\n\n" +
document.forms[0].jmeno.value + " " +
document.forms[0].prijmeni.value + "\n" +
document.forms[0].adresa.value + "\n" +
document.forms[0].psc.value + " " +
document.forms[0].mesto.value + "\n";
}
//-->
</script>
</head>
<body bgcolor="#ffffff">
<font face="Arial,Helvetica,sans-serif" size="2">
Poznmka: Stisk klvesy ENTER v nkterch prohlech nevyvol udlost onChange (IE 5.5
a vy Opera 5.0 a vy).
Mon jste si zjistili, e hodnota ve vstupnm poli mus bt skuten zmnna, aby dolo k
voln udlosti. Pokud uivatel vstup smae nevystoup z pole a nsledn znovu vepe stejn
text udlost onChange volna nebude. Ovit si to mete pozorovnm hodnoty "Poet
voln" v textov oblasti uvedenho pkladu.
Objekt Checkbox
Elementy formule checkbox a radio se pouvaj k vbru z vce monost. Element
checkbox je vhodn pout v ppad, e vm sta pouze jednoduch odpov typu "ano"
nebo "ne". Element radio je vhodn pout tam, kde chceme vybrat pouze jednu z nabzench
monost.
Objekt checkbox je nastaven s hodnotou atributu VALUE v HTML tagu. Tato hodnota je na
server odeslna pouze v ppad, e polko formule je zakrtnuto. Vlastnost checked uruje
stav elementu, true pokud je polko zakrtnuto a false pokud ne.
name="vek"
name="vek"
name="vek"
name="vek"
name="vek"
name="vek"
type="radio"
type="radio"
type="radio"
type="radio"
type="radio"
type="radio"
value="pod 18">pod
value="18 - 25">18
value="25 - 35">25
value="35 - 45">35
value="45 - 55">45
value="nad 55">nad
18<br>
- 25<br>
- 35<br>
- 45<br>
- 55<br>
55
Vimnte si, e vechna tlatka (radiobutton) maj stejn jmno, vek. Radio tlatka se
shlukuj do skupin, kde jednu skupinu vdy tvo stejn pojmenovan tlatka. K tomu, aby
prohle poznal, kter tlatko pat k jedn skupin je nutn, aby vechny tlatka v tto
skupin mla stejnou hodnotu atributu NAME. Mme-li takovou skupinu tlatek, pjde ve
skupin stisknou pouze jedno. Pokud stisknete jin tlatko, je pvodn zatren automaticky
smazno. Pi odesln formule na server je hodnota zatrenho tlatka odeslna jako
vsledek cel skupiny.
Kad tlatko ve skupin je reprezentovno svm objektem radio. Stejn jako checkbox m
kad takovto objekt vlastnost value, kter odpovd hodnot atributu VALUE= pslunho
tlatka v HTML a stejn tak i vlastnost checked. Rozdl je prv v tom, e jak ozname
jedno tlatko na strnce nebo pomoc kdu, je oznaen pedelho automaticky zrueno.
Nyn ji slym otzku: Jak mu pistoupit k jednotlivm tlatkm, kdy maj vechny
stejn jmno? Odpov je jednoduch, objekt radio je vlastn pole, kde jsou zvl uloeny
jednotliv parametry pro kad tlatko ve skupin. Pouitm nsledujcho krtkho kdu
meme pistoupit postupn ke kadmu tlatku ve skupin.
var rbutt;
for (i = 0; i < document.forms["mujformular"].vek.length; i++) {
rbutt = document.forms["mujformular"].vek[i];
if (rbutt.checked) {
... njak dal kd
}
}
<html>
<head>
<title>Zobrazen stisknutch tlatek.</title>
<script type="text/javascript">
<!-// Funkce pro zobraz vybran hodnoty pro kad stisknut tlatko.
function zobrVyber () {
var str = "";
var i;
// Najde vk.
for (i = 0; i < document.forms[0].vek.length; i++)
if (document.forms[0].vek[i].checked)
str = str + "Vkov skupina: " + document.forms[0].vek[i].value +
"\n";
// Najde vdlek.
for (i = 0; i < document.forms[0].vydelek.length; i++)
if (document.forms[0].vydelek[i].checked)
str = str + "ist vdlek: " + document.forms[0].vydelek[i].value +
"\n";
// Najde stav (svobodn/enat).
for (i = 0; i < document.forms[0].stav.length; i++)
if (document.forms[0].stav[i].checked)
str = str + "Stav: " + document.forms[0].stav[i].value + "\n";
alert(str);
}
//-->
</script>
</head>
<body>
<font face="Arial,Helvetica,sans-serif" size="2">
<!- Seznam jednotlivch monost. -->
<b>Pklad pouit radio tlatek:</b>
<p>
Prosm vyplte poadujc daje:
<p>
<form>
<table border="0" cellspacing="0" cellpadding="8">
<tr valign=top>
<td><font size="-1">
<strong>Vae vkov skupina:</strong>
<p>
<input name="vek" type="radio" value="pod 18">pod 18<br>
<input name="vek" type="radio" value="18 - 25">18 - 25<br>
<input name="vek" type="radio" value="25 - 35">25 - 35<br>
<input name="vek" type="radio" value="35 - 45">35 - 45<br>
<input name="vek" type="radio" value="45 - 55">45 - 55<br>
<input name="vek" type="radio" value="nad 55">nad 55</font>
</td>
<td><font size="-1">
<strong>Rozmez vaeho istho vdlku:</strong>
<p>
<input name="vydelek" type="radio" value="pod 5 000 K">pod 5 000 K<br>
<input name="vydelek" type="radio" value="5 000 - 10 000 K">5 000 - 10 000
K<br>
<input name="vydelek" type="radio" value="10 000 - 15 000 K">10 000 - 15
000 K<br>
<input name="vydelek" type="radio" value="15 000 - 20 000 K">15 000 - 20
000 K<br>
Mon jste si vzpomnli na minul dl, kdy jsme pomoc skriptu oznaovali i odznaovali
vechna zatrtka. Jak to vyeit v ppad, e zatrtek je moc a kd by se tm znan
prothnul? Stejn jako v pedchzejcm ppad. Vem zatrtkm dme stejn jmno a
oznaujeme nebo odznaujeme je pomoc skriptu:
function nastavZatr(zatr) {
for (i = 0; i < document.forms[0].jmno.length; i++)
document.forms[0].jmno[i].checked = zatr;
}
<option value="Zlnsk">Zlnsk</option>
</select>
</form>
Uveden pklad funguje dobe pouze pokud je vybrna jedna poloka ze seznamu.
Pouijeme-li v tagu <SELECT> atribut MULTIPLE me uivatel vybrat vce poloek ze
seznamu souasn (pidrenm klvesy Ctrl nebo Shift, podle standardu Windows). V tomto
ppad by nm vlastnost selectedIndex vrtila pouze prvn oznaenou poloku!
Pro prci s vcero oznaenmi polokami nm JavaScript nabz vlastnost selected. Pomoc
tto vlastnosti meme otestovat vechny v objektu option. Nsledujc pklad ukazuje jak
opakovat dotaz pro zjitn vech oznaench poloek uivatelem a jejich nsledn vpis.
<html>
<head>
<title>Vcensobn vbr</title>
<script type="text/javascript">
<!-// Funkce pro zobrazen vech vybranch poloek seznamu.
function zobrVyber() {
var i;
var str = "";
for (i = 0; i < document.forms[0].seznam.length; i++)
if (document.forms[0].seznam[i].selected)
str = str + document.forms[0].seznam[i].value + "\n";
alert(str);
}
//-->
</script>
</head>
<body>
<font face="Arial,Helvetica,sans-serif" size="2">
<!-- Vcensobn vbr ze seznamu. -->
<b>Pklad s vcensobnm vbrem ze seznamu:</b>
<p>Prosm vyberte jednu nebo vce kategori:
<form>
<select name="seznam" size="9" multiple>
<option value="Novinky">Novinky</option>
<option value="Sport">Sport</option>
<option value="Poas">Poas</option>
<option value="Zbava">Zbava</option>
<option value="Spolenost">Spolenost</option>
<option value="Udlosti">Udlosti</option>
<option value="Ekonomie">Ekonomie</option>
<option value="Zahrada">Zahrada</option>
<option value="Nemovitosti">Nemovitosti</option>
</select>
<p>
<input type="button" value="Uka oznaen" onClick="zobrVyber();">
<input type="reset" value="Odzna">
</form>
</font>
</body>
</html>
Nakonec je zde slben seznam vech objekt formule a jejich monch vlastnost a metod.
Snad vm bude uiten.
Objekt
Vlastnosti
Metody
Udlosti
Button
onBlur="kdJavaScriptu",
onClick="kdJavaScriptu",
onFocus="kdJavaScriptu",
onMouseDown="kdJavaScriptu",
onMouseUp="kdJavaScriptu"
Checkbox
onBlur="kdJavaScriptu",
onClick="kdJavaScriptu",
onFocus="kdJavaScriptu"
Form
onReset="kdJavaScriptu",
onSubmit="kdJavaScriptu"
Hidden
Option new
defaultSelected, selected, dd metody objektu Object (watch,
Option(text,
text, value
unwatch - pouze NN)
value,
defaultSelected,
selected)
Password
Radio
onBlur="kdJavaScriptu",
onClick="kdJavaScriptu",
onFocus="kdJavaScriptu"
Reset
onBlur="kdJavaScriptu",
onClick="kdJavaScriptu",
onFocus="kdJavaScriptu"
Select
blur(), focus( ),
handleEvent(udlost)
onBlur="kdJavaScriptu",
onChange="kdJavaScriptu",
onFocus="kdJavaScriptu"
Submit
onBlur="kdJavaScriptu",
onClick="kdJavaScriptu",
onFocus="kdJavaScriptu"
Text
defaultValue[ =
blur(), focus( ),
"novDefaultnHodnota"], handleEvent(udlost), select()
form, name, type, value
onBlur="kdJavaScriptu",
onChange="kdJavaScriptu",
onFocus="kdJavaScriptu",
onSelect=" JavaScript"
Textarea
defaultValue[ =
blur(), focus( ),
"novDefaultnHodnota"], handleEvent(udlost), select()
form, name, type, value
onBlur="kdJavaScriptu",
onChange="kdJavaScriptu",
onFocus="kdJavaScriptu",
onKeyDown="JavaScript",
onKeyPress="JavaScript",
onKeyUp="JavaScript",
onSelect=" JavaScript"
st 5
Jmna parametr ve funkci Produkt a jmna vlastnost naeho novho objektu se pro snaz
orientaci ve vtin ppad shoduj, ale nen to povinnost. U novho objektu mohou bt
poten hodnoty jednotlivch vlastnost nastaveny pi jeho vzniku nebo a pozdji. Pokud
bychom potebovali mt hodnotu urit vlastnosti nastavenu konstantn, definujeme ji ve
funkci Produkt. Napklad do funkce Produkt pidme dek:
this.prodejna = "Praha 6";
Nov jsme pouili klov slovo this, kter odkazuje na objekt, ke ktermu se konkrtn
vlastnost i metoda vztahuje. V tomto pklad tedy odkazuje na objekt Produkt. Pokud
chceme vytvoit instanci objektu Produkt, meme toho doclit takto:
var polozka1 = new Produkt("mixer", "9003-2", 2523, 150, 2);
var polozka2 = new Produkt("mycka", "9117-1", 7688, 300, 1);
Nov objekt meme vytvoit i bez potench hodnot a ty zadat a pozdji. Hodnoty
stvajcch objekt jde tak mnit:
var polozka3 = new Produkt();
polozka3.jmeno = "robot";
polozka1.cena = 2223;
15. Dl Cookies
Minule jsme si pedvedli jak si vytvoit vlastn objekt a protoe do konce vuky u moc dl
nezbv budou tyto posledn dly o nco krat ne bylo zvykem na zatku. Kad ze
zvrench dl pojednv o urit oblasti a podle m nem cenu kombinovat dv rzn
oblasti v jednom dlu. To by jako vysvtlen na vod mohlo stait a nyn k dnenmu dlu.
Ukeme si pouit cookies na strnce s jednoduchm formulem a rozebereme si jednotliv
parametry cookies.
st 6
Prce s cookies
jmeno=hodnota - Tento etzec reprezentuje jmno cookie a veker data pod tmto
jmnem uloen.
Expires - Datum, po kterm je informace v cookie star a ji nepotebn. Pokud
souasn datum pekro toto datum, cookie se automaticky smae. Nezad-li se dn
datum vypren platnosti, je cookie smazna okamit po zaven strnky.
Path - Parametry Path a Domain jsou pouity z bezpenostnch dvod. Normln je
cookie pstupn pouze strnkm, kter jsou ve stejnm adresi jako strnka, kter
cookie vytvoila. Pokud chceme cookie zpstupnit i pro ostatn strnky, musme to
uvst v tomto parametru.
Domain - Obdoba parametru Path. Parametr zpstupn cookies i strnkm z jinch
domn.
Secure - Pokud je tento parametr nastaven na true, mohou bt cookie zaslny pouze
pomoc zabezpeenho kanlu, SSL.
V nejvt vtin ppad vystame s parametry name a expires. Pro vytvoen sprvnho
data vypren platnosti cookie meme vyut objektu Date, m mme zaruen i sprvn
formt. Nsledujc kd ukazuje, jak jednodue nastavit datum pro vypren cookie na urit
poet dn od souasnho data. Pouhou zmnou hodnoty promnn dny si meme libovoln
zvolit poet dn od souasnho data, kdy platnost cookie vypr:
var dny = 7;
var denExp = new Date();
denExp.setTime (denExp.getTime() + (86400 * 1000 * dny));
Na disku budou vytvoeny dva soubory s cookies. Pokud napklad promnn jmeno1 existuje
je v souboru nahrazena stvajc a pokud ne, pid se nov jmno promnn a jej hodnota na
konec souboru.
Asi jste si vimli metody toGMTString, tato metoda nm zajiuje pevod datumu na formt,
ktermu cookie bude rozumt. Doba platnosti mus bt toti zadna v tomto formtu: Wdy,
DD-Mon-YY HH:MM:SS GMT, kde maj jednotliv znaky tento vznam:
Wdy: jmno dne v tdnu anglicky (3 znaky),
DD: den v msci (2 znaky),
Mon: msc anglicky (3 znaky),
YY: rok (2 znaky),
HH: hodina,
MM: minuta,
SS: sekundy,
GMT: udv, e se jedn o as na hvzdrn Greenwitch.
Obecn pouiteln funkce na cookies
Pedvedeme si funkce, kter nm usnadn prci s cookies. Tyto ti funkce um uloit, nast a
smazat jakoukoliv cookie podle jmna:
function ulozCookie (jmeno, hodnota, vyprsi) {
document.cookie = jmeno + "=" + escape(hodnota) + "; expires=" +
vyprsi.toGMTString() + "; path=/";
}
function nactiCookie(jmeno) {
var najdi;
function smazCookie(jmeno) {
var denExp = new Date();
denExp.setTime(denExp.getTime() - (86400 * 1000 * 1));
ulozCookie(jmeno, "", denExp);
}
escape() a unescape() jsou vestavn funkce JavaScriptu, kter konvertuj speciln znaky do
estnctkovho systmu. To proto, e pr jmno=hodnota nesm obsahovat mezery, rky,
stednky, dvojteky nebo dal znaky. Pouitm funkce escape() meme v hodnot cookie
pouvat jakkoliv znaky. Pokud chceme tuto hodnotu zptn nast, pevedem ji do itelnho
tvaru pomoc funkce unescape().
K dobrm zpsobm pat vymazat cookie, o kter vme, e ji nebudeme potebovat. Pestoe
jsou cookie uloeny v malch souborech existuj urit omezen. Maximln poet cookie na
jeden prohle (Netscape) je 300 a na disk lze umstit maximln 20 cookies z jedn domny.
Funkce smazCookie(jmeno) posune den platnosti cookie o jeden den ped aktuln den. Tm
se prohlei sdl, e me tuto cookie vymazat. Vzpomete si na metody pro prci s datem z
osmho dlu. Datum vypren platnosti nastavme pomoc metody setTime jej hodnota mus
bt zadna v milisekundch.
st 7
Zachytvn udlost
Po celou dobu vuky jsme pracovali s rznmi udlostmi a na jejich oeten jsme pouvali
sprvce udlosti (pro jistotu pipomenu, mouseover je udlost, zatmco onmouseover je
sprvce udlosti). Internet Explorer nabz monost pout sprvce udlosti skoro v kadm
HTML tagu. Netscape pouv lehce odlin pstup. Pestoe podporuje tak sprvce udlost
pro mnoho HTML tag nkter udlosti mus bt zachyceny odlinm zpsobem ne jsme
zatm zvykl. Napklad objekt window implicitn mezachytv udlost pro pohyb myi
mousemove, a proto si ukeme jak ho to nait.
Zachytvn udlost v Netscapu
V prohlei Netscape 4+ meme zachytvat udlosti objekt window, layer (NN6
nepodporuje) nebo document. Abychom toho doclili musme pout metodu captureEvent() s
definovnm udlosti kterou chceme zachytvat a nsledn specifikovat funkci, kter bude na
udlost reagovat. Zde je ukzka pro zachycen stisku tlatka myi u objektu window:
window.captureEvents(Event.CLICK);
window.document.onClick = klikMysi;
function klikMysi(udalost) {
...
}
Pro Mozillu se jednotliv konstanty lehce li a mete je najt na Gecko DOM Reference.
Pokud chceme zachytvat vce udlost u jednoho objektu je nutn jednotliv udlosti oddlit
logickm opertorem OR (samozejm, e se daj pot i jin logick opertory, ale jejich
vyuit nevidm reln). V pkladu zachytvme vechny stisky tlatka myi a klvesy:
window.captureEvents(Event.MOUSEDOWN | Event.KEYDOWN);
window.document.onMouseDown = mysDole;
window.document.onKeyDown = klavesaDole;
else if (document.all) {
else {
Pokud objekt neexistuje, je jeho hodnota null a na podmnku if je vrcena logick hodnota
false. Pomoc njakho sloitjho kdu tak meme odliit vechny typy prohle. Pklad
ukazuje, jak zobrazovat aktuln souadnice kurzoru myi pro v Intenet Exploreru, Netscapu a
Mozille:
<html>
<head>
<title>Pohyb myi</title>
<script type="text/javascript">
<!-// Funkce konstruktoru pro zjitn prohlee.
function zj_prohlizec(){
this.ver=navigator.appVersion;
this.dom=document.getElementById ? 1:0;
}
//-->
</script>
</head>
<body>
<font face="Arial,Helvetica,sans-serif">Pokud budete pohybovat my, budou
se souadnice kurzoru zobrazovat dole ve stavov lit
prohlee.<p>Funguje v IE, NN a Mozille.</font>
</body>
</html>
st 8
Regulrn vrazy
Regulrn vrazy meme pout v JavaScriptu od verze 1.2 a slou ke zpracovn textovch
etzc. Za pomoci regulrnch vraz si nastavme masku a pot zjiujeme, zda dan
textov etzec nmi definovan masce vyhovuje. Pokud m etzec vyhovt mus obsahovat
stejn znaky jako maska definovan v regulrnm vrazu. Napklad regulrnmu vrazu
"ahoj" vyhov etzec "ahoj" nebo "zdar a ahoj" a spousta dalch.
Maska regulrnho vrazu se v JavaScriptu uzavr mezi zptn lomtka /maska/. Napklad:
/abc/
Takto definovan regulrn vraz spluj napklad nsledujc etzce:
"abcdef"
"defabc"
"_-_-abc-_-_"
"fedcabvc"
"ab c"
"JavaScript"
Pi definici masky regulrnch vraz se pouvaj speciln znaky tzv. metaznaky, kter
nevyhledvaj sami sebe, ale maj speciln vznam. Napklad metaznak "^" oznauje
zatek etzce a "$" naopak konec etzce. V tomto ppad regulrnmu vrazu "^abc"
vyhov pouze etzce zanajc danm textem, nap. "abc" nebo "abcdef". Narozdl
regulrnmu vrazu "abc$" (metaznak "$" se zapisuje na konec vrazu) vyhov pouze etzce
konc na zadan text, nap. "abc" nebo "xxxabc". Mezi dal metaznaky pat:
metaznak koment
$
Hledan vraz se me opakovat kolikrt chce, avak nemus bt ptomn vbec. Nap. regulrnmu
vrazu ".*" vyhov jakkoli etzec, i przdn, protoe metaznak "." zastupuje libovoln znak, kter
se me opakovat kolikrt chce, co nm vyjaduje metaznak "*". Pokud chcete vyhledvat znak *
muste pout \*.
Hledan text nebo znak se vyskytuje alespo jednou, dv se za znak i vraz. Regulrnmu vrazu
"xa+b" proto vyhov etzce "xab", kde "a" se me mezi "x" a "b" vyskytovat kolikrt chce,
nejmn vak jednou. A opt, pokud chcete vyhledvat znak + muste pout \+.
Nahrazuje jeden libovoln znak mimo znaku novho dku. Take regulrnmu vrazu "a.a"
vyhovuj nap. etzce obsahujc "aaa", "axa", ale i "a a". Pokud chcete vyhledat znak . pouijte opt
\. Dle to u uvdt nebudu, ale toto pravidlo plat pro i pro vechny ostatn metaznaky.
Oznauje zatek specilnch zvorkovch vraz. Napklad [abc] zna, e v etzci se mus
nachzet znak a,b nebo c. Samozejm tam mou bt i vechny. [a-zA-Z] je vet
znak pedstavujc vechna psmena. A napklad masce "[12345]0" nebo "[1-5]0" vyhov pouze
etzce obsahujc 10, 20, 30, 40, 50.
Vraz ped tmto metaznakem se me opakovat nejve jednou. Regulrnmu vrazu "xa?b" vyhov
pouze etzce obsahujc "xab" nebo "xb", napklad "axbs", protoe mezi znaky "x" a "b" se me
objevit nejve jeden znak "a".
Potebujeme-li pout metaznak v jeho pvodnm vznamu, vlome ped nj zptn lomtko "\".
Napklad chceme-li vyhledat etzec "+.?}[" musme pout "\+\.\?\}\[".
Pomoc sloench zvorek meme pesnji urit, kolikrt se m dan vraz opakovat kvantifiktor.
V podstat logick opertor OR. etzec vyhovuje vrazu v ppad, e obsahuje alespo jeden
podvraz. Regulrnmu vrazu "aa|bb|cc" vyhov pouze etzce obsahujc "aa", "bb" nebo "cc".
Nap. "dfsaagh", "asbbwe", ale i "aabbcc".
()
Vytvoen podvrazu. Napklad regulrnmu vrazu "5(ab)+6" vyhov etzce obsahujc nap.
"5ab6" nebo "5ababab6". Mezi znaky "5" a "6" se mus vyskytovat nenulov poet znak "ab".
Naopak regulrnmu vrazu "5(ab)?6" vyhov pouze etzce obsahujc "56" nebo "5ab6".
Kvantifiktor Koment
{m,n}
Vraz se vyskytuje minimln m krt, ale ne vce ne n krt. Nap. regulrnmu vrazu
"x{5,10}" vyhov etzce obsahujc pt a deset znak "x" zapsanch za sebou.
{n,}
Vraz se vyskytuje minimln n krt. Vrazu "x{5,}" vyhov etzce, kde se znak "x" opakuje
minimln 5 krt za sebou.
{n}
*, + a ?
\r
\t
\v
\f
\d
\D
\w
\W
\s
\S
Netscape a IE maj troku odlinou implementaci regulrnch vraz, ale nsledujc zpis
funguje v obou:
var mujRV = /maska/modifiktor;
Metoda test() porovnv vloen textov etzec s maskou regulrnho vrazu a vrac true
pokud podmnce vyhovuje. Nsledujc pklad testuje e-mailovou adresu zadanou
uivatelem:
<html>
<head>
<title>Zkontroluj e-mail</title>
<script type="text/javascript">
<!-// Funkce pro kontrolu e-mailov adresy.
function zkontrEmail(email) {
var re = /^[_a-zA-Z0-9\.\-]+@[_a-zA-Z0-9\.\-]+\.[a-zA-Z]{2,4}$/;
if (re.test(email))
alert("Vyhovuje.");
else
alert("Nevyhovuje.");
}
//-->
</script>
</head>
<body bgcolor="#ffffff">
<font face="Arial,Helvetica" size=2>
Toto je pouze zklad regulrnch vraz, a pokud se chcete dozvdt vce navtivte strnky
Microsoftu nebo Netscapu.
18. Dl DHTML
Minule jsme si ukzali nco z regulrnch vraz. Doufm, e nastnn toho co to jsou
regulrn vrazy s ukzkou pouit vm jasn ukzalo jejich monosti. Musm podotknout, e
tyto monosti jsou daleko vt ne se do lnku velo. Dnes vuku zavrm strunm
vodem do DHTML. pln posledn dl akort pinese utdn seznam rznch zdroj na
internetu tkajc se problematiky, o kter jsme tu dva msce hovoili.
st 9
DHTML
Je dobr si uvdomit, e DHTML je pouze zkratka pro vraz "Dynamic HTML". Tato zkratka
se tak ustlila, e se nyn pro dynamick strnky bn pouv, ale DHTML jinak neexistuje.
Nen to dn "vc" ani standard definovan konsorciem World Wide Web Consortium
(W3C). DHTML nen definovno nikde.
Dynamick HTML je ve skutenosti kombinace CSS (cascading style sheets), DOM
(document object model), skriptovacch jazyk (Javascript nebo VBscript) a HTML. DHTML
tedy nen dn nov jazyk, je to smsice vech ve jmenovanch technologi. m vce
budete umt tyto technologie, tm budete lep v DHTML.
Tak, co to tedy je? Dynamick HTML je jednodue standardn HTML, kter se me mnit
pot co je ji strnka natena v prohlei. Jednoduch dynamick prvky na strnce jsem si v
prbhu serilu u vytvoili, napklad zmna obrzku nebo textu po najet kurzorem myi.
Mezi jin efekty, kter jste ji jist taky vidli napklad pat pohyb njakho prvku za
kurzorem myi nebo posun obrzku po obrazovce a mnoho dalch. Ve co v HTML na
strnce vytvome meme nsledn pomoc DHTML mnit.
Mon jste se s touto zkratkou ji setkali. Pokud, ale nevte co znamen, pokusm se ve
strunosti vysvtlit.
Nezkrcen to je Cascading Style Sheets. CSS bylo uvedeno na konci roku 1996 a dalo by se
ci, e jeho uveden znamenalo prlom v dosavadnm pojet HTML. V pvodn verzi HTML
se toti veker text formtoval na strnce pomoc HTML tag jako H1, FONT, B, I a
ostatnch bez monosti peddefinovn. S uvedenm styl se tato situace zmnila. Za pomoci
CSS si definujeme nkolik styl s jejich parametry v vodu webov strnky nebo v externm
souboru a pak se na n pouze odkazujeme. Vhod z toho plynoucch je mnoho. Pkladn,
potebujeme zmnit veker nadpisy lnk, kter mme definovny napklad takto:
<font face="Verdana,Geneva,Arial,Helvetica,sans-serif" size="5"
color="#0000FF"><B>NADPIS</B></font>
Prochzet vechny soubory, kter tvo nae strnky a hledat tyto tagy by zabralo hodn asu.
U CSS zmnme pouze jeden extern soubor a je vystarno. V souboru s definic CSS se
zmn hodnoty stylu definujc nadpis lnku:
.nadpis { font-family : Verdana, Geneva, Arial, Helvetica, sans-serif;
font-weight : bold; color : Blue; font-size : 16pt; }
Tato zmna se projev okamit na vech strnkch. Z toho dvodu je daleko lep vyuvat
pro definici CSS extern soubor, definovn v vodu kad strnky ztrc na efektivnosti.
CSS tedy slou k modifikaci styl, kter v HTML ji existuj (nap. H1, P, CODE, atd.) a k
vytven zcela novch styl s novmi parametry. Formtovac monosti CSS jsou velice
bohat, co usnaduje nvrh strnek pesn podle naich pedstav.
Styly jako prvn uvedla firma Microsoft a implementovala do Internet Exploreru 3.0.
Prohlee uveden na trh od roku 1997 styly ve verzi Level 1 v naprost vtin podporuj.
Souasn modern prohlee zahrnuj i podporu CSS2.
Te si jist kte, co znamen ono Level 1. V souasnosti existuj dv specifikace styl,
star CSS1 (level 1) z 16.prosince 1996 a novj CSS2 (level 2) z 12.kvtna 1998. Rzn
verze prohle tyto specifikace jet dopluj o sv vlastn definice. Troku zmatek, bohuel
ucelen seril, kter by ve objasnil na iv doposud nevyel. Teba to nkdy napravm :)
DOM
V souasn dob vychz o DOM na iv seril, take pouze ve strunosti. Document Object
Model je v podstat vazba mezi pouitm skriptovacm jazykem a prvky na strnce. DOM je
vlastn hierarchie element na strnce, kter jsou reprezentovny prohleem. S pomoc
DOM meme snadno pistupovat k jednotlivm elementm na strnce, mnit je nebo
pidvat nov. Pro prci s DOM bylo pidno urit rozen i do JavaScriptu. Bohuel, jak
u jsem psal o kompatibilit mezi jednotlivmi prohlei a skripty, zde se s tmto problmem
opt urit setkte.
Napklad pokud vytvome na strnce element s pesnm urenm pozice:
<div id="divID" style="position:absolute; left:50; top:100; backgroundcolor: ThreedLightShadow;">Text uzaven v tagu DIV.</div>
V IE (IE4):
mujDIV = document.all["divID"];
Pokud prohle podporuje standard W3C, nejlep zpsob je (IE 5+, NN6+):
mujDIV = document.getElementById("divID");
Pokud chceme tento element ovlivovat, tak zle na verzi prohlee. Chceme-li napklad
njak element skrt:
V Netscapu (NN4+):
document.layers["divID"].visibility = "hide";
// mujDIV.visibility = "hide";
Dal rozdl nastane pi pouit NN6, kde se ji "hide" a "show" nepouv a namsto toho
muste pout "hidden" a "visible".
V IE (IE4):
document.all["divID"].style.visibility = "hidden";
// mujDIV.visibility = " hidden ";
O tom snad nemusm nic pst, o jeho vysvtlen se snam ji osmnct dl. Snad jen to, e v
DHTML nemuste pouvat pouze JavaScript, ale mete pout i VBScript. Zde ovem
budete omezeni pouze na IE, jeliko ostatn prohlee VBScript nepodporuj.
HTML
Pokud jste doetli a sem asi vm HyperText Markup Language (HTML) jeho
prostednictvm mete vytvet webov strnky nemusm pedstavovat. Znovu si jen
dovolm pipomenout, e na iv ji vyel ptadvacetidln seril o tomto jazyku.
Krtk pklad na rozlouenou, kter mn pozici elementu DIV na strnce ve tyech
smrech (testovno na prohlech IE 5.5 a 6.0, NN 4.51 a 6.1, Mozilla 0.9.4 a Opera 5.12):
<html>
<head>
<title>Zmna pozice elementu</title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1250">
</head>
<body>
<div id="blok1" style="position:absolute; left:10; top:300; backgroundcolor: Silver;">Text uzaven v tagu DIV.</div>
<script type="text/javascript">
<!-// Funkce pro pohyb elementu DIV po strnce.
function posunBlok(x, y) {
Tm je vuka JavaScriptu skonena. Snad jste si nco odnesli a budete se k tomuto serilu rdi
vracet. Pokud najdete njak nesrovnalosti nebo vm nebude nco jasn napite. Nkter dl
mu pepracovat (internet nen kniha) nebo vydat rozenou st. Posledn dl ji nebude
vnovn vuce, ale zajmavm zdrojm na internetu, kde si mete sv obzory nadle
roziovat.
Zahranin zdroje:
Archivy skript:
Dynamic Drive
JavaScript Source
ScriptSearch
WebFX
Nvody a lnky vnovan JavaScriptu:
Standard jazyka podle ECMA-262, ECMAScript Language Specification.