CATEGORII DOCUMENTE |
Bulgara | Ceha slovaca | Croata | Engleza | Estona | Finlandeza | Franceza |
Germana | Italiana | Letona | Lituaniana | Maghiara | Olandeza | Poloneza |
Sarba | Slovena | Spaniola | Suedeza | Turca | Ucraineana |
DOCUMENTE SIMILARE |
|
TERMENI importanti pentru acest document |
|
Co je JavaScript?
JavaScript je skriptovací jazyk založený na programovacím jazyku JAVA. JavaScript mùže být spuštìn na stranì klienta (client-side) nebo serveru (server-side). V èláncích naleznete informace pouze o tvorbì JavaScriptu na stranì klienta (client-side), kdy se kód nachází v HTML dokumentu a je realizován v internetovém prohlížeèi, tj. kód se pøenese spolu s HTML dokumentem z webové stránky a váš prohlížeè ho spustí a vykoná.
Poznámka: JavaScript NENÍ to stejné co JAVA!
Skriptovací jazyk umožòuje pøistupovat k rùzným prvkùm webových stránek jako jsou obrázky, formuláøe, odkazy a jiné. Tyto prvky mùžeme s pomocí JavaScriptu rùznì mìnit a ovlivòovat. JavaScript také dovoluje reagovat na rùzné události, napøíklad kliknutí myši, stisk klávesy a další, což dovoluje spouštìt rùzné akce podle chování uživatele.
V JavaScriptu se dá napsat napøíklad skript reagující na události vyvolané myší (pohyb myši, stisk tlaèítka, …), kontrolu formuláøe i animace. Jak to ho dosáhnout se dozvíte v sérii èlánkù.
JavaScript má i nìkolik omezení, ovšem logických. Napøíklad se nedají èíst ani zapisovat soubory na uživatelský poèítaè (ten, kdo si prohlíží vaše stránky). Toto omezení je jasné, pokud si nìkdo spustí program na svém poèítaèi (client-side skripty jsou vykonávány na stranì klienta) musí si být jist, že program (skript) neohrozí bezpeènost poèítaèe.
Které prohlížeèe podporují JavaScript?
Netscape jako první zavedl podporu JavaScriptu ve svém prohlížeèi Netscape Navigator 2. Microsoft ho následoval a implementoval podporu JavaScriptu do Internet Exploreru 3. Další prohlížeèe reagovaly podobnì a podporu pro JavaScript implementovaly také. V souèasnosti znamená pøíchod každé nové verze prohlížeèe aktualizaci a doplnìní stávající verze JavaScriptu.
Kompatibilita mezi rùznými druhy prohlížeèù a jejich verzí mùže zpùsobovat pøi návrhu skriptu problémy, proto se zezaèátku zamìøíme na všeobecné vlastnosti. Pozdìji si ukážeme tyto rozdíly a jak si s nimi poradit.
Poznámka: JavaScript není doménou pouze prohlížeèù Netscape Navigator a Internet Explorer. Velmi kvalitní podpora JavaScriptu je i v prohlížeèích Mozilla a Opera.
Verze JavaScriptu
JavaScript prošel urèitým vývojem a to nám pøineslo nìkolik verzí:
JavaScript 1.0 - Netscape Navigator 2.0
JavaScript 1.1 - Netscape Navigator 3.0; Internet Explorer 3.0 (ovšem podpora JavaScriptu V IE nestála za nic)
JavaScript 1.2 - Netscape Navigator 4.0-4.05; první verze Internet Exploreru 4.0
JavaScript 1.3 - Netscape Navigator 4.06-4.5; pozdìjší verze Internet Exploreru 4.0 plus Internet Explorer 5.0
JavaScript 1.5 - Netscape Navigator 6.0 a vyšší; Internet Explorer 5.5 a vyšší
Microsoft souèasnì s podporou JavaScriptu pøedstavil i vlastní implementaci jazyka JavaScript (od IE 3). Tato implementace je známá pod jménem JScript. Aby bylo možné dosáhnout urèité kompatibility, Evropská asociace výrobcù poèítaèù ECMA stanovila normu. Této normì by mìli jednotlivé specifikace JavaScriptu odpovídat. Více na stránkách ECMA - Standardizing Information and Communication Systems.
Poznámka: Všechny skripty uvedené v sérii èlánkù pracují s Netscape Navigatorem nebo Microsoft Internet Explorerem verze 3 a vyšší. Pokud není uvedeno jinak!
Èást 1 |
Základy práce s JavaScriptem |
Zápis skriptu
<script language='JavaScript' type='text/javascript'>Tímto tagem prohlížeèi sdìlíme, že skript, který bude následovat, je napsán v JavaScriptu, a že MIME-type je 'text/javascript'. Pokud vynecháte definici TYPE nic se nestane, kód se provede stejnì, ale není to podle standardu W3C.
<SCRIPT LANGUAGE='JavaScript' TYPE='text/javascript'>Nyní skryjeme obsah skriptu pøed staršími prohlížeèi pomocí triku s komentáøi.
<!--Pøed ukonèení HTML komentáøe pøidáme dvì lomítka. Prohlížeèe, které znají JavaScript, se nìkdy pokoušely interpretovat konec HTML komentáøe za èást skriptu. Konec skriptu nás vrátí do normálního HTML.
</SCRIPT>Vložení skriptu do stránky
Abyste mohli používat skripty na svých stránkách, musíte vìdìt jak je do stránky vložit. Skript se vkládá mezi tagy <SCRIPT> a </SCRIPT>. V HTML stránce to potom mùže vypadat tøeba takto:
<script language='JavaScript' type='text/javascript'>Skripty mùžete ke stránce pøipojit i pomocí externího souboru. V tomto pøípadì použijete parametr SRC s definicí URL skriptu. Takto pøipojené skripty mají obvykle koncovku .js:
<script language='JavaScript' src='mujsckript.js' type='text/javascript'></script>Párový tag <SCRIPT> mùžete na stránce použít kolikrát chcete. Nejlepší a nejsnadnìjší je však umístit celý skript na jedno místo a v jednotlivých èástech stránky volat pouze funkce ve skriptu definované. (V nìkterých vyjímeèných pøípadech budete muset skript rozdìlit, abyste zajistili správné provedení skriptu.)
Pøi vkládání skriptu preferujte vložení pomocí externího souboru, což pøináší znaèné výhody. Všeobecnì se skript vkládá mezi tagy <HEAD> a </HEAD>. To zajišuje, že skript bude pøipraven k použití ihned po naètení stránky. Sem je dobré vložit všechny funkce nebo skripty, které mají být funkèní ještì pøed vlastním zobrazením stránky.
Jindy je tøeba vložit skript mezi tagy <BODY> a </BODY>. Tento zpùsob vložení se používá, když skript generuje vlastní HTML obsah stránky.
Tag Script
V tagu <SCRIPT> mùže specifikovat, která verze JavaScriptu je použita. A to pomocí parametru LANGUAGE = hodnota. Mùže zde být 'JavaScript', 'JavaScript1.1', 'JavaScript1.2', 'JavaScript1.3' nebo 'JavaScript1.5' a speciálnì pro IE 'JScript'. Vìtšina prohlížeèù si zjistí verzi z parametru LANGUAGE a pokud tuto verzi nepodporuje, skript se ignoruje.
Poznámka: O tom, že Microsoft od IE 3 pøedstavil i vlastní implementaci JavaScriptu jsem se zmínil již v prvním dílu. Pro zopakování, Microsoftí implementace je pojmenována právì JScript.
Zpátky k parametru LANGUAGE. Pomocí tohoto parametru mùžeme definovat odlišné skripty pro rùzné verze prohlížeèù. Jednoduchý seznam rùzných verzí prohlížeèù a podporované verze JavaScriptu byl taky v prvním dílu.
Napøíklad prohlížeè Netscape 2.0 ignoruje skript definovaný tagem <SCRIPT LANGUAGE='JavaScript1.2'>, ale Netscape 4.0 tento kód vykoná. Tak mùžeme odlišit rùzné verze skriptù na jedné stránce. Každá verze skriptu musí být uzavøena v samostatném tagu SCRIPT.
Pøíklad, jak si zjistit podporovanou verzi JavaScriptu:
<html>Doufám, že není co vysvìtlovat.
Poznámka: Pokud se v pøíkladu výše uvede definice TYPE (viz první díl) nemusí skript vždy fungovat správnì. To jsou paradoxy.
<script language='JavaScript' type='text/javascript'>Tady si už skript vysvìtlíme. Prohlížeè Netscape 2.0 použije definici funkce f1 uzavøenou v prvním párovém tagu <SCRIPT>, ale definici uzavøenou v druhém tagu <SCRIPT> ignoruje. Prohlížeè Netscape 4.0 použije také první definici, avšak pokud má druhá funkce (f1=f1) stejné jméno pøepíše první definici.
Základy syntaxe
Ještì než zaèneme psát vlastní skripty, musíme znát minimálnì základy syntaxe a struktury JavaScriptu. Co mùžem používat, kam co a jak umístit, 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 podporovaných pøíkazù, operátorù a standardních funkcí JavaScriptu. Teï si vysvìtlíme základy pro zaèátek.
Promìnné
Promìnnou deklarujeme pomocí slova var. Identifikátor promìnné mùže mít libovolnou délku a sestávat z jakéhokoliv písmene, èísla a znaku podtržítka (_), pokud není první znak èíslo. Jako identifikátor nemùžeme použít klíèová slova - slova mající v JavaScriptu speciální význam. JavaScript je case-sensitive (rozlišuje malá a velká písmena), identifikátory count a Count odkazují na dvì odlišné promìnné!
Promìnné deklarované mimo funkci jsou globální, tzn. jsou být dostupné odkudkoli ve skriptu a z funkcí ve skriptu. Nejèastìji definujeme promìnou mimo funkci, tedy jako globální. Globální promìnou mùžeme pøepsat lokální promìnou (definovanou uvnitø funkce), pokud bude mít identifikátor promìnné stejné jméno. Tomu øíkáme pøekrývání promìnných.
Pár pøíkladù:
var text;Textové øetìzce
Øetìzce jsou uzavøené mezi uvozovky jednoduché (`) nebo dvojité ('). Jeden typ uvozovek mùžete kombinovat s druhým bez omezení. Používáte-li poøád stejný typ uvozovek a nechcete jej mìnit, vložte pøed uvozovací uvozovky zpìtné lomítko.
Pøíklad bude asi nejlepší:
var text1 = 'Ahoj svìte.';Operátory a výrazy
Vìtšina operátorù (+; -; *; /; ++; --; atd.) a výrazù používaných v C/C++ a JAVÌ je podporována i v JavaScriptu.
Opìt pøíklad:
promìnná = výraz
soucet += 4;Pøíkazy
A znovu, vìtšina pøíkazù používaných v C/C++ a JAVÌ je podporována i v JavaScriptu. Klíèová slova jsou:
komentáøe - // pro jeden øádek, /* a */ pro více øádkù
cykly - for, do, while a další
podmínìné pøíkazy - if, then, else; switch, case
objekty - new, this, with a další
Funkce
Funkce použijeme v pøípadech, kdy potøebujeme v programu na rùzných místech provádìt stejné èinnosti. Použitím funkcí kód programu zkrátíme, zpøehledníme a pùjde snadnìji modifikovat.
Funkce se definuje následujícím zpùsobem:
function jmeno_fce(arg1, arg2, )Jméno funkce musí dodržovat sejná pravidla, jako jméno promìnné. K volání funkce (spuštìní), použijeme její jméno a pøidáme argumenty, pokud je funkce požaduje.
var vyska = 5;Poznámka: Samozøejmì, že funkce mùže být i bez argumentù.
Jak už jsem zmínil, funkce se nejèastìji vkládají do hlavièky dokumentu, mezi tagy <HEAD> a </HEAD>. Což nám zajistí, že funkce bude naètena a k dispozici ještì než bude volána.
Funkce mùže vracet i hodnoty. Tìmto funkcím se øíká funkce s návratovou hodnotou a docílíme toho tak, že na konec funkce pøidáme pøíkaz return.
Pøíklad funkce s návratovou hodnotou:
function secti(x, y)Dnes se blížeji podíváme na operátory a pøíkazy if, switch, for a while. Slíbený bonus v podobì seznamu klíèových slov JavaScriptu se do dnešního dílu bohužel již nevešel.
Pøedchozí díly seriálu:
èást první: úvod do Javascriptu
èást druhá: nìco více o tagu script a syntaxi JavaScriptu
Aritmetické
Operátor |
Popis |
Pøíklad |
Výsledek |
sèítání | |||
odèítání | |||
násobení | |||
dìlení | |||
Modulo dìlení, zbytek po celoèíselném dìlení. Pøíklad
1: | |||
zvýšení o jednièku |
x=5 |
x=6 |
|
snížení o jednièku |
x=5 |
x=4 |
Možný je i zkrácený zápis, pokud ho nìkde uvidíte, nelekejte se.
Operátor |
Pøíklad |
Stejné jako zápis |
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 |
Relaèní
Slouží k porovnávání hodnot uložených v jednotlivých promìnných. Nic složitého.
Operátor |
Popis |
Pøíklad |
je rovno |
5==8 vrátí false (nepravda) |
|
nerovná se |
5!=8 vrátí true (pravda) |
|
> |
je vìtší než |
5>8 vrátí false (nepravda) |
< |
je menší než |
5<8 vrátí true (pravda) |
>= |
je vìtší nebo rovno |
5>=8 vrátí false (nepravda) |
<= |
je menší nebo rovno |
5<=8 vrátí true (pravda) |
Logické
Opìt zde dochází k porovnávání hodnot jako u relaèních operátorù. Zde se ovšem porovnávají jejich logické hodnoty.
Operátor |
Popis |
Pøíklad |
&& |
a (logický souèin) Výsledek bude true, pokud všechny porovnávané hodnoty budou true. |
x=6 y=3 (x < 10 && y > 1) vrátí true (pravda) |
nebo (logický souèet) Výsledek bude true, pokud aspoò jedna z porovnávaných hodnot bude true. |
x=6 y=3 (x==5 || y==5) vrátí false (nepravda) |
|
negace Mìní hodnotu operandu na opaènou. |
x=6 y=3 x != y vrátí true (pravda) |
Poznámka: Logické promìnné mùžou nabývat pouze dvou hodnot a to true nebo false. True mùžeme nahradit èíslem 1 a false èíslem 0. Krátký pøíklad:
<script type='text/javascript'>Vím, že pro zaèáteèníka bývá pochopení logických operátorù složitìjší a proto je zde malý pøíklad, kde mùžete trénovat.
Poznámka: JavaScript obsahuje i další speciální operátory. Pøi psaní skriptù se s nimi s nejvìtší pravdìpodobností vùbec nesetkáte a proto je neuvádím.
Priorita operátorù
Pøi psaní komplikovanìjších výrazù se mùže v jedné rovnici vyskytnout více operátorù. Každému je asi jasné, že 3+5*2 je nìco jiného než (3+5)*2. Každý operátor má jinou prioritu. Na zaèátek nám budou pro aritmetické operátory staèit pravidla matematiky (pøednost násobení pøed sèítáním atd.).
Cykly
Používají se tehdy pokud chceme provést nìjaký blok kódu opakovanì. V JavaScriptu k tomuto úèelu mùžeme použít následující pøíkazy:
while - Cyklus s podmínkou na zaèátku. Cyklus se bude provádìt tak dlouho, dokud bude platit podmínka.
dowhile - Cyklus podmínkou na konci. Stejné jako v pøedcházejícím pøípadì, ale podmínka se testuje až na konci.
for - Cyklus se zadaným poètem opakování.
While
while (podmínka)Pøíklad na vysvìtlení snad bude staèit:
<script type='text/javascript'>Dowhile
do while (podmínka)Opìt snad bude staèit pouze pøíklad:
<script type='text/javascript'>Poznámka: Na rozdíl od pøedcházejícího pøíkladu probìhne cyklus minimálnì jednou bez ohledu na poèáteèní stav ukonèovací podmínky. Zkuste zmìnit poèáteèní hodnotu i napøíklad na 10 a uvidíte.
For
for (poèáteèní inicializace; podmínka; úprava øídící promìnné)Pøíklad:
<script type='text/javascript'>Podmínky
Použijeme je tehdy, pokud chceme, aby se program podle nìjaké podmínky sám rozhodl, jak bude dál pokraèovat.
Podmínkové operátory
Jde o zvláštní druh operátorù, které umožòují vyhodnotit nìjakou jednoduchou podmínku a v závislosti na výsledku provést danou operaci. V JavaScriptu nám k tomuto úèelu slouží dva operátory, které se vždy používají spoleènì. Jsou to znaky ? a :. Jejich použití vypadá takto:
(podmínka) ? výsledek pøi splnìné podmínce : výsledek pøi nesplnìné podmínce;Krátký pøíklad se vždy hodí:
<script language='JavaScript' type='text/javascript'>Poznámka: Podmínkové operátory jsem mohl zaøadit už do sekce 'Operátory', ale zde mnì to pøijde vhodnìjší.
Podmínìný pøíkaz If
Používá se tehdy pokud chceme, aby se urèité pøíkazy v JavaScriptu provedly pouze za urèitých okolností a další pøíkazy zase za jiných okolností. Obecný zápis vypadá takto:
if (podmínka)Pøi vícenásobném vìtvení programu by obecný zápis vypadal takto:
if (podmínka1)Poznámka: Pokud by vyhovovala podmínka1 i podmínka2, provede se kód pouze v bloku podmínka1. Podmínka1 vyhovuje, je tedy proveden její kód a skript skonèí v hledání dalších vyhovujících podmínek!
V následujícím pøíkladì se pokusíme vytvoøit kód, který vyhodnotí a ocení obchodníky. Obchodník, který prodá více než 10 kusù výrobku obdrží bonus a jako další základ platu se mu poèítají prodané kusy nad 10. Naopak obchodník, který prodá ménì než 10 kusù výrobku, bude krácen na platì. Jestliže obchodník prodá právì 10 kusù výrobku, nestane se nic.
<script type='text/javascript'>Hodnì autorù dìlá na zaèátku chybu uvedenou níže. Popøemýšlejte, proè skript zde uvedený nemùže správnì fungovat.
<script type='text/javascript'>Øešení: Obchodník prodá napøíklad 11 kusù výrobku a je mu pøiznán bonus. Následnì je mu poèet prodaných kusù snížen o deset, nyní tedy má pouze 1 prodaný kus. Další podmínka nevyhoví, ale poslední ano. Tím je dobrému obchodníku strženo z platu 5000 Kè a s prodanými kusy se dostane do mínusu. To by se asi divil! Správný zápis (nad tímto) skonèí po splnìní první podmínky a další vyhovující podmínky nehledá.
Switch (pøepínaè)
Pokud je zápis pomocí if, else if a else dlouhý a nepøehledný napøíklad, když máme vybrat mezi více hodnotami (tøeba 10 podmínek). V tomto pøípadì pužijeme pøíkaz switch (pøepínaè), který umožòuje rozdìlit program jednoduše a pøehlednì na nìkolik vìtví.
Struktura zápisu pøíkazu switch vypadá takto:
switch (promìnná)Pøíklad s hlášekami na rùzné dny pomocí pøíkazu switch:
<script type='text/javascript'>Vnoøené podmínky a cykly
Nìkdy je vhodné pro zjednodušení skriptu vložit více podmínek nebo cyklù do sebe. V tomto pøípadì je nutné peèlivì sledovat syntaxi, správný poèet závorek, bloky se nesmí pøekrývat atd.
Vnoøené cykly
Uvnitø jednoho cyklu probíhá další cyklus.
Pøíklad na malou násobilku:
<script type='text/javascript'>Vnoøené podmínky
Stejnì jako u cyklù musíme dát zvýšenou pozornost na syntaxi, jinak se snadno dopustíme chyby. Na následujícím pøíkladu si pøedvedeme jak se dá kód pomocí vnoøených podmínek zjednodušit.
Pøíklad na vyhledání maxima ze tøí èísel:
<script type='text/javascript'>Poznámka: Zatím jsme nemluvili o možnosti zadávání hodnot uživatelem, proto do skriptu vstupují rovnou hodnoty. Pozdìji si povíme i o vstupu hodnot od uživatele z formuláøe nebo pomocí dialogového okna.
Provedení našeho kódu
Internetový prohlížeè postupnì naèítá stránku a každý skript je vykonán tak brzo, jak je naèten. Vhodným umístìním na stránce mùže být skript proveden, ještì než jsou naèteny obrázky, zvuky nebo než je zobrazen celý obsah stránky.
Oèividnì nám tato vlastnost mùže zpùsobit i problémy. V následujícím pøíkladu se pokusíme najít nastavenou barvu hypertextového odkazu stránky, která se nachází v objektu document.linkColor. První pokus je uèinìn v párovém tagu HEAD, druhý až v sekci BODY.
Zdrojový kód pøíkladu:
<html>Jako výsledek našeho snažení se na stránce objeví:
Barva odkazu poprvé: #0000ffPøi prvním pokusu ještì není naèten tag <BODY>, kde je definována barva odkazu a proto je vrácena standardní barva odkazu (modrá). Jak se stránka postupnì naèítá je následnì naèten tag <BODY> ve kterém dojde ke zmìnì barvy odkazu ze standardní modré barvy na èervenou. Ve druhém pokusu o zjištìní barvy odkazu je sekce <BODY> již naètena, a proto získáme novì definovanou hodnotu barvy odkazu (èervená).
Skript definovaný uvnitø funkce, není vykonán dokud není funkce volána. Ale, jak a kdy umíme volat funkci? Dozvíte se v následující kapitole: Události.
Události
Každý internetový prohlížeè rozpozná urèité množství událostí, napøíklad když stránka dokonèí své naèítání nebo když uživatel pøesune ukazatel myši nad odkaz èi klikne na tlaèítko a mnohé další. Tyto události mùžeme rozpoznat a provést kód JavaScriptu pøi jejich výskytu.
Jedna cesta, jak tyto události rozpoznat je pomocí správce událostí (event handler). Ten umí událost zachytit, rozpoznat a vykonat pøi jejím výskytu potøebné pøíkazy JavaScriptu. O správce událostí definované JavaScriptem je možné doplnit vìtšinu HTML tagù (tabulka níže). Pøíklady zde uvedené fungují jak v IE, tak Netscapu.
Definujeme správce události
Pokud chceme definovat správce události, pøidáme jméno této události do HTML tagu s pøíkazem JavaScriptu, který se má vykonat.
Pøíklad:
<html>Promìnná navys bude zvýšena o jednièku pokaždé, když uživatel klikne na odkaz. Do správce události mùžete napsat jakýkoliv kód JavaScriptu, který je správný. Mùže to být jeden pøíkaz nebo nìkolik pøíkazù oddìlených pomocí støedníku (;). Nejèastìjší a i nejobvyklejší je volat skrze událost nìjakou funkci. Nezapomeòte, že tyto pøíkazy se uzavírají do uvozovek a je nutné zde dodržovat stejné podmínky jako u textových øetìzcù.
Zmìna obrázku
Další pøíklad ukazuje dobøe známý efekt se zmìnou obrázku po najetí kurzoru myši.
Poznámka: tento pøíklad nebude chodit s Internet Explorer verze 3 nebo nižším.
Tag <IMG> nemá sám o sobì správce události pro pohyb myši, ale má ho hypertextový odkaz. Toho tedy využijeme a obrázek uzavøeme do tagu pro hypertextový odkaz <A HREF=></A>.
Podíváme se na vlastní kód. Prvnì si vytvoøíme funkci zmenObr() pro manipulaci s obrázky. Funkce je volána s argumenty jmeno a zdroj se kterými se ve funkci dále pracuje.
function zmenObr(jmeno, zdroj)Nyní definujeme pro každý odkaz tøi správce události, jeden když je kurzor myši nad odkazem, druhý když je kurzor myši odsunut z odkazu a poslední, když je myší kliknuto na tento odkaz. Pøíklad je uveden níž:
<a href='https://www.seznam.cz'Obì události onMouseOver i onMouseOut volají funkci zmenObr(), s argumenty pro jméno obrázku, které se má zmìnit (v tagu IMG specifikováno pomocí NAME= hodnota) `obr1` a URL obrázku ve který se má zmìnit `tlacitko_on.gif` (objekty, jejich vlastnosti a metody použité ve funkci zmenObr si podrobnì vysvìtlíme v dalších èástech kurzu).
Popis k události onClick. Pøíkaz vrací hodnotu false pomocí pøíkazu return false èímž prohlížeèi sdìluje, aby potlaèil svoje normální chování pro tuto událost. Normálnì by prohlížeè po kliknutí na odkaz sledoval a naèetl novou stránku. Vrácením hodnoty false sdìlíme prohlížeèi, že nemá pøejít na novou stránku. Pokud ovšem chcete, aby prohlížeè pøešel na novou stránku zmìníte vrácenou hodnotu na return true nebo správce události onClick vynecháte úplnì.
Jiný pøíklad
Dalším èasto používaný správce události je onLoad, napøíklad použitý v tagu <BODY>. V jednom z pøedcházejících pøíkladù jsme si ukázali, co se mùže stát pokud vykonáme pøíkaz JavaScriptu ještì pøed kompletním naètením stránky. Událost onLoad je spuštìna, až po kompletním naètení stránky prohlížeèem.
Takže pøedchozí pøíklad pøepíšeme tøeba takto:
<html>Poznámka: Funkce alert() je standartní funkce JavaScriptu, která zobrazí dialogové okno se zadaným obsahem. V tomto pøíkladu to bude hodnota document.linkColor, což je barva odkazu definovaná pro tuto stránku v tagu <BODY>.
Seznam správcù událostí
Toto je pouze èásteèný seznam HTML a tagù a jim pøíslušných správcù událostí. Kompletní popis hledejte na Netscape HTML Reference a Microsoft IE DHTML Events.
Tag |
Správce události |
Kdy je volána? |
<A> |
onClick |
Po kliknutí myší na odkaz. |
onMouseOver |
Pøi pøesunutí myši nad odkaz. |
|
onMouseOut |
Po odsunutí myši z odkazu. |
|
<AREA> |
onMouseOver |
Pøi pøesunutí myši nad oblast klikací mapy. |
onMouseOut |
Po odsunutí myši z oblasti klikací mapy. |
|
<BODY> |
onBlur |
Když rám nebo okno pøestává být aktivní. |
onFocus |
Když je rám nebo okno je aktivován myší nebo pomocí tabulátoru. |
|
onLoad |
Po natažení okna nebo rámu do okna prohlížeèe. |
|
onUnload |
Po odstranìní okna nebo rámu z okna prohlížeèe. |
|
<FORM> |
onReset |
Po vynulování formuláøe. |
onSubmit |
Pøi odesílání formuláøe. |
|
<IMG> |
onAbort |
Když je naèítaní obrázku zastaveno uživatelem, stisk tlaèítka STOP. |
onLoad |
Až je celý obrázek naèten do okna prohlížeèe. |
|
onError |
Pøi výskytu chyby pøi naèítání obrázku. |
|
<INPUT> s TYPE='BUTTON' nebo 'CHECKBOX' nebo 'RADIO' nebo 'RESET' |
onClick |
Po kliknutí myší na prvek formuláøe. |
<INPUT> s TYPE='TEXT' nebo <TEXTAREA> |
onBlur |
Když prvek formuláøe pøestává být aktivní. |
onChange |
Když je text ve formuláøi zmìnìn. |
|
onFocus |
Když je textová oblast fomuláøe aktivována myší nebo pomocí tabulátoru. |
|
onSelect |
Když uživatel oznaèí celý nebo jen èást textu v textové oblasti formuláøe. |
|
<INPUT> s TYPE='SELECT' |
onBlur |
Když vybraný prvek ze seznamu pøestává být aktivní. |
onChange |
Když je zmìnìn prvek seznamu. |
|
onClick |
Když uživatel klikne na prvek v seznamu. |
|
onFocus |
Když je urèitý prvek v seznamu aktivován. |
Klíèová slova
JavaScript si pro svoji potøebu vyhradil nìkolik slov, která mají speciální význam a nesmí být použita k jinému úèelu (Identifikátor - název promìnné nebo funkce, atd.). S nìkterými zde uvedenými slovy jste se v kurzu již setkali a s dalšími se ještì seznámíte.
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 |
V minulých dílech jsme si probrali základy práce s JavaScriptem a dnes se pustíme do nové èásti objekty.
Èást 2 |
Objekty JavaScriptu |
Co je to objekt?
Jak se dá z jména pøedpokládat, a jak jsem se již zmínil JavaScript je postaven na programovacím jazyku JAVA. Oba jsou to objektovì orientované jazyky. Nepùjdu do detailù objektovì orientovaného programovaní, ale vysvìtlíme si základní termíny, pro lepší pochopení jazyka JavaScipt.
JavaScript pracuje s objekty. Každý objekt je v podstatì blok dat a abychom s tímto blokem mohli pracovat existují vlastnosti a metody asociované s objektem. Vlastnosti mohou být promìnné nebo jiné objekty a sadì funkcí spojených s objektem øíkáme metody.
jmeno_objektu.jmeno_vlastnostiVšechny objekty JavaScriptu jsou uspoøádány do struktury, kterou znázoròuje následující obrázek:
Tato struktura má svoje jméno, øíká se jí objektový model dokumentu, zkrácenì DOM (Document Object Model).
Na objekt mùžete myslet jako na typ dat, tøeba celé èíslo nebo øetìzec. Pøi definici promìnné vytváøíte instanci objektu. Pokud byste tak chtìli èinit všeobecnì slouží k tomuto úèelu operátor new:
var text = new String('Toto je mùj text.'); // String = konstruktorOperátor new se používá k vytvoøení nových objektù. Za klíèovým slovem new následuje konstruktor. Operátorem new se nejdøíve vytvoøí nový objekt, který však nemá definovány žádné vlastnosti. Pak se vyvolá specifikovaná funkce konstruktoru, které se mùžou pøedat parametry.
Nìkteré objekty, jako napøíklad Date, mají více funkcí konstruktoru než jednu.
var rok = new Date().getYear();Poznámka: Pokud konstruktor neobsahuje žádné parametry, je možno vynechat závorky.
Konstruktor je závislý na parametrech, které jsou mu pøedány pøi volání. Objekt Date bude bez parametrù nastaven na aktuální datum a èas. Pøíklad vytvoøení nového objektu voláním funkce (konstruktoru) s parametry:
<script
type='text/javascript'>
<!--
var Xmas = new Date('December 24, 2001');
document.write('Den: ' + Xmas.getDate() +
'<br>' + 'Mìsíc: ' +(Xmas.getMonth()+1) +
'<br>' + 'Rok: ' + Xmas.getYear());
//-->
</script>
Dnes jsme si øekli nìco krátce o objektech. Víte co je to objektový model dokumentu, že objekty mùžou obsahovat další objekty a promìnné, kterým øíkáme vlastnosti a že objekt v sobì má zabudovanou sadu funkcí, kterým øíkáme metody. Nakonec jsme si v rychlosti ukázali jak vytvoøit nový objekt.
Vlastnosti objektù
Jak jsme si minule vysvìtlili vlastnosti jsou objekty a promìnné, nadøazených objektù. K vlastnostem urèitého objektu se pøistupuje pomocí 'teèkové' notace:
var text = new String('Kdysi dávno, žila, byla ');Nastaví promìnnou dlk na 27, což je poèet všech znakù v tomto øetìzci text.
Èasto potøebujeme mìnit vlastnosti objektu pøímo. Napøíklad pro zmìnu barvy pozadí stránky mùžeme vlastnost bgColor objektu document mìnit dynamicky. Jak je pøipraveno v ukázce:
<html>Nìkteré vlastnosti objektù nemohou být zmìnìny pøímo (barvu pozadí stránky jsme mìnili pøímo pomocí vlastnosti bgColor), napøíklad vlastnost length u øetìzcù. Nicménì, na co potøebujeme mìnit délku øetìzce? Použijeme-li metodu concat(), která spojuje dva øetìzce dohromady, hodnota vlastnosti length urèující délku øetìzce se po spojení øetìzcù zmìní automaticky. Pøi jejím dalším volání obdržíme již novou hodnotu délky øetìzce.
Metody objektù
Metody jsou sady funkcí zabudovaných v objektu a pøistupujeme k nim pomocí stejné teèkové notace jako u vlastností. Za jménem metody následují závorky obsahující požadované argumenty:
var errorMsg = new String('');Výsledná hodnota objektu errorMsg je 'Chyba: X001'.
Objekty JavaScriptu
Tato kapitola vám umožní se seznámit s nìkterými objekty JavaScriptu. Cílem není zahrnout vás veškerým výètem vlastností a metod všech objektù, ale udìlat si o nich ucelenou pøedstavu a pochopit základní pravidla používání. Opìt dám pøednost snaze vám nìco vysvìtlit a ukázat na pøíkladech, pøed suchou teorií. Podle mì se na pøíkladech uèí lépe a rychleji.
JavaScript obsahuje mnoho pøeddefinovaných objektù, které jsou uvedeny pøímo v jeho definici. Nìkteré reprezentují rozdílné typy dat, jako øetìzce, èísla, zatímco jiné se týkají objektù na stránce, napøíklad odkazù, obrázkù a dalších. Pøi používání objektù, jejich vlastností a metod musíme brát v úvahu umístìní v hierarchii objektù. Proto je nutné pøed názvem každé vlastnosti nebo metody napsat i jméno nadøazeného objektu.
Vestavìné objekty
Vestavìné objekty nemají nic spoleèného s web stránkami èi HTML jazykem. Pøedstavují rozšíøení JavaScriptu o pole, základní matematické funkce a konstanty, dále umožòují práci s datumem èi øetìzci. A jsou to:
Array - pole promìnných.
Boolean - logická promìnná, mùže nabývat pouze dvou hodnot true nebo false.
Date - objekt reprezentující datum.
Number - numerická hodnota, buï celé èíslo nebo desetinné èíslo.
String - øetìzec znakù uzavøený v jednoduchých nebo dvojitých uvozovkách.
Math - obsahuje metody pro matematické konstanty a funkce.
Jak jsme si již ukázali tyto objekty se vytváøejí za pomoci operátoru new. Ovšem je dobré vìdìt, že objekty typu Boolean, Number a String jsou vytváøeny implicitnì. Tzn. nemusíme je vytváøet pomocí operátoru new, staèí:
var nalezeno = false;Objektový model dokumentu (DOM)
Po naètení stránky, prohlížeè vytvoøí nìkolik objektù reprezentujících informace stránce a jejím obsahu. Tyto objekty jsou seøazeny podle hierarchie od nejvyšších až k nejnižším. Nejvýše postavený je objekt window a má následující vlastnosti:
history - obsahuje seznam všech již døíve navštívených URL.
location - informace o aktuálním URL.
frames - pokud stránka používá rámy, jsou zde uloženy informace o pozici rámu a také obsahuje objekt window pro každý rám.
document - informace o obsahu stránky.
screen - informace o velikosti okna a barvách (pouze Netscape 4).
Jiným typem vysoce postaveného objektu, který se vytvoøí po naètení stránky je navigator. Ten ale není souèástí objektu window. Tento objekt v sobì obsahuje informace o typu prohlížeèe, verzi, dostupných pluginech a jiné.
Na tyto objekty a jejich vlastnosti se odkazujeme opìt pomocí teèek. Napøíklad pokud chceme zjistit URL stránky, použijeme:
var url = window.location.href;Protože všechny zde uvedené objekty vycházejí z objektu window, JavaScript netrvá na tom, aby se tento objekt musel neustále uvádìt. Zápis tedy mùžeme zkrátit:
var url = location.href;Dále si popíšeme také pár základních metod objektu window.
Metody objektu window
Objekt window poskytuje taktéž pár užiteèných metod, mezi tyto metody patøí i zobrazování dialogových oken:
alert() zobrazí dialogové okno s
vámi zadaným obsahem.
alert(promenna
+ 'textový øetìzec'); alert(promenna); nebo další
kombinace.
confirm() zobrazí dialogové okno s tlaèítky 'OK' a 'Storno'. Po kliknutí na 'OK' vrací true po kliknutí na 'Storno' false.
if(confirm('Máte mì rádi?')==true)prompt() zobrazí dialogové okno se vstupem pro uživatele.
var jmeno;Následující pøíklad ukazuje práci se všemi výše uvedenými druhy dialogových oken.
<html>Jak už jsme si øekli u textových øetìzcù, musí se dodržovat urèitá pravidla syntaxe. Vedle zápisu dalších uvozovek uvnitø uvozovek pomocí zpìtného lomítka tu máme i další formátovací znaky, které využijeme zejména u dialogových oken:
b - smazání znaku pøed kurzorem
f - posun papíru
n - nová øádka
r - návrat na zaèátek øádky
t - tabulátor
` - apostrof (neukonèuje øetìzec)
' - uvozovka (neukonèuje øetìzec)
- zpìtné lomítko
Poznámka: Metoda alert() je velmi užiteèná pøi odlaïování kódu. Mùžete ho umístit do skriptu a zobrazovat v dialogovém oknì hodnoty promìnných a objektù. To mùže být neocenitelné pøi snaze vystopovat chybu! (Stejnì dobøe se dá použít i objekt document.write.)
Další metody otevírající, zavírající nebo mìnící vzhled okna prohlížeèe si ukážeme v èásti 3. V této èásti bude øeè o práci s okny a rámy.
Jiná užiteèná metoda objektu window je setTimeout(). Metoda umožòuje provádìt èásti kódu JavaScriptu po urèitém èasovém intervalu. Syntaxe kódu, který má být vykonán se øídí stejnými pravidly jako události. Tedy pøíkazy nebo funkce JavaScriptu uzavøené v uvozovkách:
setTimeout('navys++; alert(`Ahoj svìte!`);', 500);Kód nahoøe vyèká pùl vteøiny (èasový údaj se udává v milisekundách, 1/1000 sekundy), poté navýší promìnnou navys a otevøe dialogové okno alert s textem 'Ahoj svìte!'.
Metoda setTimeout() vrací unikátní èíslo. Toto èíslo mùžeme použít u metody clearTimeout() pro zrušení pøíkazù, které se mají vykonat po uplynutí èasového intervalu.
var id = setTimeout('nejakaFce(arg1, arg2);', 3000);Konkrétní pøíklad bude asi nejlepší (clearTimeout):
<html>Upozoròuji, že setTimeout() metoda nezastavuje prohlížeè, žádná pauza! Následující kód je vykonán okamžitì. Pøíkazy nebo funkce uvedené v metodì setTimeout() se vykonají pouze jednou. V Netscapu 4.0 je metoda setInterval(), která vykonává pøíkazy opakovanì po zadaném èasovém intervalu. Metoda, která naopak ruší vykonávání tìchto pøíkazù je clearInterval().
Ukázka demonstruje užití metody setTimeout() pro opakované volání funkce zobrazující èas na stránce.
<html>Objekt frame
Objekt frames náleží do nejvyššího objektu window. Pokud stránka obsahuje rámy pak hlavní objekt window obsahuje pole nazvané frames s vlastním objektem window pro každý objekt tohoto pole.
Tyto rámy mùžou obsahovat další rámy. Z rámu se mùžeme odkázat na vytváøecí (rodièovské - frameset) okno pomocí zápisu window.parent nebo pouze parent. U více zanoøených rámù se dá použít zápis window.parent.parent. Zápisem window.top se odkážeme na nejvyšší okno z kteréhokoliv rámu.
Tyto vlastnosti umožòují pracovat s daty nebo spouštìt funkce v rámu z jiného rámu.
Èást ohlednì rámù je o nìco složitìjší na pochopení a proto jí bude vìnována pozornost v samostatná èást 3 - Práce s okny a rámy.
Objekt document (objekty HTML)
Objekt document je jeden z nejpoužívanìjších. Obsahuje nìkolik vlastností, pomocí kterých mùžeme zjistit rùzné informace o stránce. Zde jsou:
bgColor - barva pozadí stránky.
fgColor - barva písma.
linkColor - barva odkazu.
vlinkColor - barva navštíveného odkazu.
location - vrací URL aktivní stránky.
reffer - vrací stránku, ze které uživatel pøišel.
Title - obsahuje titulek stránky, který je mezi HTML tagy <TITLE> a </TITLE>
anchors - vrací poèet ukotvení na stránce.
lastModified - vrací datum a èas poslední úpravy HTML souboru.
images - vrací seznam obrázkù na stránce.
forms - vrací seznam formuláøù na stránce.
links - vrací seznam odkazù na stránce.
Cookie - vrací textový soubor s uživatelskými cookies.
Vlastnosti nejèastìji odpovídají hodnotám atributù v HTML tagu. Napøíkad bgColor odpovídá hodnotì BGCOLOR= uvedené v tagu <BODY>. Na dalších objekektech jako obrázky a odkazy je to taky názornì vidìt.
Nezapomeòte, že vlastnosti images, forms a links jsou vráceny jako seznam. Tento seznam je vlastnì pole, vždy jedno pole pro každý element na stránce (obrázek, formuláø a odkaz)!!! Pokud tedy chceme pracovat napøíklad s obrázkem:
var abc = document.images[3];Tento zápis nám zpøístupní obrázek v ètvrtém <IMG> tagu na stránce (èísluje se od nuly). Pracovat s èíselnými indexi je nevýhodné. JavaScript naštìstí umožòuje použít jméno obrázku jako index pole, namísto èísla.
var abc = document.images['jmeno_obr'];Tento zápis vrátí obrázek jehož atribut NAME v tagu <IMG> obsahuje 'jmeno_obr'.
Poznámka: Netscape ve verzi 3 obsahuje chybu. Pokud je obrázek umístìn uvnitø tabulky vrátí se stejný obrázek nìkolikrát, tím pádem nemùžeme pøesnì identifikovat hodnoty obrázku.
Nìkdy se dá použít ještì zkrácenìjší zápis než jsme si zatím uvedli. Pokud je prvek na stránce unikátní tzn., dané jméno prvku se smí na stránce vyskytnout pouze jednou. Mùžeme použít zápis:
var abc = document.jmeno_obr;Objekt Image
Informace o obrázcích jsou uloženy v objektu Image, tyto informace obsahují URL obrázku, jeho stav naètení a informace o výšce èi šíøce. Pomocí pole images mùžeme pøistupovat ke všem vlastnostem objektu Image. Ve vìtšinì pøípadù pracujeme s obrázky, které jsou v images poli, ale nìkdy potøebujeme pracovat i s obrázky, které ještì na stránce nejsou.
Napøíklad chceme-li vytvoøit efekt pro zmìnu obrázku po najetí kurzorem myši, je dobré naèíst si pøedem obrázek pro zmìnu. Aby se nemohlo stát, že budeme s myší nad obrázkem èekat a èekat, než se zmìní. Proto vytvoøíme nový objekt Image a do vlastnosti .src tohoto nového objektu zadáme cestu k obrázku:
var mujObr = new Image();S naètením stránky je i náš dosud neviditelný obrázek uložen ve vyrovnávací pamìti prohlížeèe (pokud ji nemáme vypnutou). Pokud teï kurzor myši najede nad obrázek, naète se nový obrázek okamžitì.
Poznámka: Pøíklad se zmìnou obrázku jsme si uvedli už v tøetím dílu, ovšem bez pøednaètení obrázku pro zmìnu.
V následujícím pøíkladu jsou uvedeny oba dva zmiòované pøípady. V prvním se obrázek nezaène naèítat dokud se nad nìj nepøesune kurzor myši a ve druhém je obrázek pøednaèten.
Poznámka, pøíklad nechodí s Internet Explorer 3.0 nebo nižším.
<html>Objekt Link
Objekt Link nebude s nejvìtší pravdìpodobností používat moc èasto. Nejzajímavìjší budou asi vlastnosti href, která vrací URL stránky.
document.links[0].hrefPoznámka: Jestliže stránka obsahuje obrázkové mapy (imagemap), objekt Link je vytvoøen pro každý tag.
Objekt Form
Form objekt není až tak zajímavý sám o sobì, ale obsahuje další objekty, které zpøístupòují ostatní prvky formuláøe. Jsou zde objekty pro vstupní pole text, password, textarea, skrytá pole (hidden fields), zatržítka radiobutton a checkbox, roletky a tlaèítka reset a submit.
Každý prvek formuláøe má svùj vlastní objekt se svými vlastnosmi. Všechny podporují vlastnost value. Vlastnost vrací jakékoliv údaje zadané uživatelem, napøíklad textový vstup nebo hodnotu pøidìlenou pomocí atributu VALUE v ktomu opovídajícímu HTML tagu (napø.: <input type='hidden' value='www.moje.cz'>
Pro pøístup k jednotlivým elementùm formuláøe, musíme napøed zpøístupnit objekt form. Podle pøíkladù uvedených již døíve, mùžeme tak uèinit z objektu document jedním z tìchto zpùsobù:
document.forms[0] // první formuláø na stránce.Podobnì mùžeme pøistupovat i k vstupním objektùm použitím pole elements nebo pøímo pomocí hodnoty atributu NAME='' v <INPUT> tagu:
document.forms[0].elements[3]Nejèastìjší použití je pro kontrolu údajù ve formuláøi, pøed odesláním dat na server. Jednoduchý pøíklad demonstruje pøístup k hodnotám ve formuláøi a vygenerování chybového hlášení, pokud je nìjaké pole formuláøe nevyplnìno.
<html>Pár poznámek k kódu:
Tag FORM používá událost onSubmit k volání funkce kontrFormular() pøi stisku tlaèítka Odeslat.
Kdykoli funkce kontrFormular() najde prázdné vstupní pole, zobrazí se chybové hlášení a metoda focus() nastaví kurzor na toto prázné pole.
Rovnìž, když je vstupní pole prázdné, funkce vrátí false. To zamezí vykonání akce a odeslání dat formuláøe.
Objekt Date
S objektem Date jste se mohli v prùbìhu seriálu setkat již nìkolikrát, napøíklad v šestém dílu. Nìkdy jsou s tímto objektem v zaèátcích spojeny urèité problémy a tak si ho vysvìtlíme o nìco podrobnìj než ostatní.
Hodnota èasu je v objektu Date uložena jako poèet milisekund od poèátku. Tento poèátek je stanoven na 1.1.1970 greenwichského èasu. Je zde použit standard z UNIXu, kde se toto datum èasto oznaèuje jako epocha, protože krátce pøedtím byl systém UNIX poprvé pøedstaven poèítaèovému svìtu.
Jistì jste již všichni urèitì pochopili, že objekt Date slouží ke zjišování informací o datu a èase. Úplnì nejjednodušší použití vypadá takto:
<script type='text/javascript'>Jako informace se vám v prohlížeèi zobrazí:
Mon Jan 28 18:16:12 2002Další možný zápis, kdy objektu pøedáváme urèité datum:
var datum=new Date('October 12, 1988 13:14:00') //Vynecháte-li hodiny, minutyInformace o èase sice máme, ale pro bìžnou praxi nejsou moc využitelné. Jsou anglicky a ani výstup nepatøí mezi nejpøehlednìjší. Naštìstí existuje celá øada metod (vlastnosti nejsou), které nám práci s datem a èasem usnadní. Ovšem pøedtím, než tyto metody mùžeme použít je nutné objekt Date vytvoøit pomocí zápisu, který již dobøe známe:
var datum = new Date();Metody, které nyní již na objekt mùžeme použít jsou:
getNìco() - zobrazí napøíklad den v mìsíci, minuty, rok.
setNìco() - nastavíme napøíklad den v mìsíci, minuty, rok.
UTC() - metoda vrací poèet milisekund uplynulých od poèátku, který se vždy chápe jako greenwichský èas.
Date.UTC(rok,mìsíc,datum,hodiny,minuty,vteøiny);parse() - metoda vrací poèet milisekund uplynulých od poèátku do místního èasu.
Date.parse('mìsíc_ENG, den_v_mìsíci, Rok Hod:Min:Sec');toGMTString() a toLocaleString() - Konvertuje datum na øetìzec zachovávající Internet GMT konvence nebo lokální konvence pro zobrazení datumu a èasu.
<script type='text/javascript'>getTimetzoneOffset() - vrací èasový posun lokálního (místního) èasového pásma v minutách.
<script type='text/javascript'>Jednotlivé metody get a set se v syntaxi moc neliší a proto si probereme pouze get metody:
Metoda |
Význam |
NN |
IE |
ECMA |
getDate() |
Vrací den v mìsíci (1-31). | |||
getDay() |
Vrací den v týdnu (0-6, kde 0=nedìle). | |||
getMonth() |
Vrací mìsíc (0-11). | |||
getYear() |
Vrací rok. Více v tabulce níže. | |||
getFullYear() |
Vrací letopoèet v kompletní ètyømístné podobì. | |||
getHours() |
Vrací hodiny (0-23). | |||
getMinutes() |
Vrací minuty (0-59). | |||
getSeconds() |
Vrací sekundy (0-59). | |||
getTime() |
Vrací poèet milisekund, které ubìhly od 1.ledna 1970 (poèátku). |
Poznámka: Všechny metody vracejí èíslo, ne textový øetìzec! Pøi používáni tìchto metod je nutné názvy metod zapsat správnì vèetnì velkých a malých písmen.
Protože s pøechodem na rok 2000 se vyskytly problémy a každý výrobce prohlížeèe je øeší trochu odlišnì máte zde tabulku, kde najdete návratové hodnoty pro metody getYear() a getFullYear().
Prohlížeè |
getYear() 1998 |
getYear() 2000 |
getFullYear() |
Netscape 2 Windows |
nepodporuje |
||
Netscape 2 Mac |
nepodporuje |
||
Netscape 3 Windows |
nepodporuje |
||
Netscape 3 Mac |
|
nepodporuje |
|
Netscape 3 Linux |
nepodporuje |
||
Explorer 3 Windows |
nepodporuje |
||
Explorer 3 Mac | |||
Opera 3 Windows |
nepodporuje |
||
Netscape 4 Windows | |||
Netscape 4 Mac | |||
Netscape 4 Linux | |||
Netscape 4 Solaris | |||
Explorer 4 Windows | |||
Explorer 4 Mac | |||
Opera 4 Windows | |||
Opera 4 Linux | |||
Konqueror | |||
Explorer 5 Windows | |||
Explorer 5 Mac | |||
Explorer 5 Solaris | |||
Netscape 6 Windows | |||
Netscape 6 Mac | |||
Netscape 6 Linux |
Objekt Math
Tento objekt obsahuje øadu matematických funkcí (metod a vlastností), které se dají pøi nìkterých výpoètech využít. Následující tabulka ukazuje ty nejdùležitìjší:
Metody |
|
Název |
Popis |
abs() |
Vrací absolutní hodnotu zadaného èísla. |
acos() |
Vrací arcus kosinus zadaného èísla v radiánech. |
asin() |
Vrací arcus sinus zadaného èísla v radiánech. |
atan() |
Vrací arcus tangens zadaného èísla v radiánech. |
cos() |
Vrací kosinus zadaného úhlu. |
exp() |
Vrací hodnotu ex, kde x je zadané èíslo. |
log() |
Vrací pøirozený logaritmus zadaného èísla. |
max(x,y) |
Vrací vìtší ze dvou zadaných èísel. |
min(x,y) |
Vrací menší ze dvou zadaných èísel. |
pow(x,y) |
Vrací mocninu xy, kde x a y jsou zadaná èísla. |
random() |
Vrací náhodné èíslo v rozsahu 0 až 1. |
round() |
Vrací zaokrouhlenou hodnotu zadaného èísla. |
sin() |
Vrací sinus zadaného úhlu. |
sqrt() |
Vrací odmocninu zadaného èísla. |
tan() |
Vrací tangens zadaného èísla. |
Vlastnosti |
|
Název |
Popis |
E |
Eulerovo èíslo (2,718281828459045). |
PI |
Ludolfovo èíslo (3,141592653589793). |
LN2 |
Pøirozený logaritmus èísla 2 (0,6931471805599453). |
LN10 |
Pøirozený logaritmus èísla 10 (2.302585092994046). |
SQRT1_2 |
Odmocnina z 0,5 (0,7071067811865476). |
SQRT2 |
Odmocnina ze dvou (1,4142135623730951). |
Pøíklady:
document.write(Math.round(8.6));Hody kostkou:
<script type='text/javascript'>Po ètyøech lekcích vìnovaných objektùm si snad pamatujete výraz objektový model dokumentu. Dále, že objekty mùžou obsahovat další objekty a promìnné, kterým øíkáme vlastnosti a že objekt v sobì má zabudovanou sadu funkcí, kterým øíkáme metody. Umíte vytvoøit nový objekt a pokud nìkde uvidíte teèku, øeknete si 'teèková' notace tu znám a umím s ní pracovat.
Èást 3 |
Práce s okny a rámy |
Nevím co více øíci k této nové kapitole. Doufám, že název vše vystihuje. A proto zaènìme!
Vytvoøení nového okna
V nìkterých pøípadech je vhodné otevøít nové okno prohlížeèe, napøíklad pro zobrazení krátké textové zprávy, banneru nebo pøi tvorbì plovoucího menu. Ne všichni uživatelé jsou nadšeni vyskakujícími okny, ale s rozvahou a ohleduplností mùžete zatraktivnit vzhled svých stránek.
Krátký kviz s pop-up okny
Jako pøíklad je uveden krátký kviz se tøemi otázkami o sluneèní soustavì. Odpovìdi jsou zobrazeny po kliknutí na odkaz v malém novém oknì.
<html>Stránka s odpovìdí mùže vypadat napøíklad takto:
<html>Pokud náš sluneèní systém neznáte tak dobøe jako já :)), zde jsou odpovìdi: 1. Jupiter, 2. Merkur, 3. Pluto.
Každý odkaz na ovìøení správnosti zodpovìzení volá funkci zobrOdp() a pøedá ji URL stránky se správnou odpovìdí. Ve volané funkci zobrOdp() je použita metoda open() pro vytvoøení nového okna.
function zobrOdp(url)Poznámka: V pøíkladu s kvizem je øetìzec obsahující seznam parametrù definující vzhled nového okna moc dlouhý. Proto je rozdìlen na dva øádky a spojen pomocí operátoru `+`. Výsledkem je jeden nerozdìlený øetìzec.
Metoda open() má tøi argumenty: URL stránky, jméno nové stránky a øetìzec obsahující seznam parametrù definujících vzhled nového okna.
window.open('URL','jméno_okna','parametry_okna');URL udává umístìní zdrojového souboru, který se má zobrazit v novém oknì. Jméno_okna udává název okna do kterého se má stránka nahrát, pokud okno s takovým názvem neexistuje, otevøe se nové okno se zadaným jménem. Parametry_okna vzhled nového okna definují (napø. toolbar=no, directories=no, menubar=no), zadávají se vedle sebe a oddìlují se èárkou.
Parameter |
Hodnota |
Funkce |
toolbar |
yes / no |
Má se zobrazit toolbar? |
location |
yes / no |
Øádek s adresou dokumentu? |
directories |
yes / no |
Zobrazit odkazy? |
status |
yes / no |
Stavový øádek? |
menubar |
yes / no |
Hlavní menu? |
scrollbars |
yes / no |
Posuvná lišta? |
resizable |
yes / no |
Schopnost mìnit velikost okna? |
copyhistory |
yes / no |
Má se pøenést historie stránek? |
width |
èíslo |
Šírka nového okna v pixelech. |
height |
èíslo |
Výška nového okna v pixelech. |
top |
èíslo |
x-ová souøadnice nového okna (od levého horního rohu) |
left |
èíslo |
y-ová souøadnice nového okna (od levého horního rohu) |
Poznámka: místo yes/no mùžete psát 1/0.
Odkazy na okna
Vytvoøíme-li nové okno a budeme chtít pozdìji zmìnit jeho obsah (okno musí být otevøené), uložíme výslednou hodnotu pøíkazu open() do promìnné. Tøeba vytvoøíme nové okno a pozdìji na nìjaký podnìt od uživatele mùžeme pomocí vlastnosti location zmìnit obsah tohoto okna:
mojeOkno = window.open('nejaka_stranka.html', '', 'height=100,width=');Kód nahoøe není nijak složitý a jistì se dá snadno pochopit, proto nebudu uvádìt pøíklad.
Z novì vytvoøeného okna se mùžeme odkazovat na okno (pùvodní), to z kterého bylo toto nové okno vytvoøeno pomocí vlastnosti opener, což je také objekt.
Napøíklad:
window.opener.location = 'nova_stranka.html';Zmìní obsah starého (pùvodního) okna (okna, z kterého vzniklo nové okno) na nova_stranka.html.
Nejlépe asi bude uvést pøíklad. Tento krátký skript vytvoøí nové plovoucí okno s odkazy. Po kliknutí na odkaz se plovoucí okno zavøe a pùvodní okno je pøesmìrováno na stránku z odkazu.
<html>
<head>
<title>Plovoucí menu</title>
<script type='text/javascript'>
<!--
var plovMenu;
function zobrMenu()
//-->
</script>
</head>
<body>
<font face='Arial,Helvetica,sans-serif'
size='2'>
<b>Pøíklad s plovoucím menu. Po kliknutí na
odkaz v menu se toto okno zavøe a pùvodní
stránka je pøesmìrována na stránku
vybranou.</b><br> <br>
<a
href='javascript:zobrMenu();'>Otevøi menu</a><br>
<a href='javascript:plovMenu.close();'>Zavøi
menu</a>
</font>
</body>
</html>
Poznámka: Øetìzec obsahující menu je opìt dlouhý a pro lepší pøehlednost je rozdìlen na více øádkù. V tomto pøípadì je vždy na konec øádku pøidáno zpìtné lomítko, které skriptu sdìluje, že øetìzec pokraèuje na dalším øádku. Zde jsme nepoužili operátor `+`.
Zavírání oken
Znovu se podívejte na plovoucí menu z pøedchozího pøíkladu èi z pøíkladu se sluneèni soustavou. Okno mùžete zavøít tradièním zpùsobem nebo pomocí metody close().
<form>Po stisku tlaèítka je volána metoda window close(), která zavøe okno, stejnì jako Soubor -> Zavøít, køížek v nástrojové lištì nebo Alt+F4.
Poznámka: bez potvrzení mùžeme zavøít pouze okno, které bylo vytvoøeno pomocí skriptu. Zkuste si naèíst odpovìï v kvizu na planety a zavøít pomocí tlaèítka Close.
Práce s rámy
Jak už jsem zmínil v èásti o objektech JavaScriptu, rámy representují samostatná okna. Každé takové okno má svoje URL, historii a vlastnosti. Zaèneme tedy hned pøíkladem, protože jak doufám ty rychlému uèení napomáhají nejvíce.
V pøíkladu vytvoøíme soubor oken, pomocí následujícího HTML kódu:
<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>
Poèítám, že stránky ram1.html až ram4.html si dokážete
vytvoøit sami.
Pro jistotu:
<html>
<head>
<title>Rám 1</title>
</head>
<body bgcolor='#ffffff'>
<center>
<font face='Arial,Helvetica,sans-serif'
size='4'><b>Rám 1</b></font>
</center>
</body>
</html>
Tímto HTML kódem vytvoøíme ètyøi rámy, jeden nahoøe a tøi stejné velikosti pod ním. Jak jsme si již ukázali v minulých dílech barva pozadí stránky se mìní pomocí vlastnosti bgColor. Ovšem v tomto pøípadì nechceme mìnit barvu stávající stránky (rámu), ale mìníme barvu stránky v jiném rámu.
Této zmìny docílíme tak, že ze stávajícího rámu (okna) hledáme rodièe tohoto rámu èili vlastnì stránku, ve které jsou rámy definované (frameset). Rodièovské okno (stránku) nalezneme pomocí vlastnosti window.parent (mùžeme použít i už zmínìnou vlastnost top, která nás odkáže na nejvyšší okno z kteréhokoliv rámu). Nalezením rodièe máme k dispozici objekt s definicí všech rámù a použitím vlastnosti frames následnì obdržíme pole všech rámù. K jednotlivým polím mùžeme pøistupovat, jak už jsme si døíve ukázali napøíklad pomocí zápisu frames[jmeno_ramu . Po inicializaci pole máme k dispozici objekt window vybraného rámu a mùžeme s ním pracovat, tøeba zmìnit barvu pozadí pomocí vlastnosti bgColor.
Schéma znázoròuje jak mùžeme pomocí vložení krátkého kódu do stránky ram1.html zmìnit barvu v rámu 4:
<form>
<input type='submit' value='Zmìna
rámu 4 na žluto'
onClick='parent.frames[`ram4`].document.bgColor=`#FFFF00`'>
<!-- stejné:
window.parent.window.frames[`ram4`].window.document.bgColor=`#FFFF00` -->
</form>
Poznámka: Kód mùžeme beze zmìny vložit do jakéhokoliv rámu (nejenom rámu 1) a bude fungovat.
Jak vidíte z obrázku z jednotlivých rámù mohu pøistupovat k ostatním rámùm pouze pøes rodièovský objekt (frameset). Naopak z rodièovského objektu s definicí rámù (frameset) mohu pøistupovat k jednotlivým rámùm pøímo.
Snad jste to alespoò trochu pochopili. Nyní vytvoøíme funkci zmBrvOkna(), která po kliknutím na tlaèítko v horním oknì budeme mìnit barvu jednotlivých oken pod ním. Funkce bude uložena v horním rámu (ram1.html) a jako parametry budeme pøedávat jméno okna a barvu:
function zmBrvOkna(jmeno_ramu, barva)
Pro úplnost, zde je upravený kód stránky rám 1 (ram1.html):
<html>
<head>
<title>Rám 1</title>
<script type='text/javascript'>
<!--
// Funkce mìnící barvu pozadí v jiném rámu.
function zmBrvOkna(jmeno_ramu, barva)
//-->
</script>
</head>
<body>
<font face='Arial,Helvetica' size=2>
<!-- Tlaèítka pro zmìnu barvy pozadí u jiného
rámu z tohoto okna. -->
<font size=4><b>Rám 1</b></font>
<p>
<b>Odkaz na ostatní rámy:</b>
<p>
Použij tlaèítko pro zmìnu barvy pozadí rámu:
<p>
<form>
<table width='100%' border='0'
cellspacing='1' cellpadding='4'
bgcolor='#C0C0C0'>
<tr bgcolor='#000000'>
<th><font color='#ffffff'
face='Arial,Helvetica' size=3>Rám 2</font></th>
<th><font color='#ffffff'
face='Arial,Helvetica' size=3>Rám 3</font></th>
<th><font color='#ffffff'
face='Arial,Helvetica' size=3>Rám 4</font></th>
</tr>
<tr>
<td><input type='submit'
value='Èervená' onClick='return
zmBrvOkna(`ram2`,`#ff0000`);'></td>
<td><input type='submit'
value='Èervená' onClick='return
zmBrvOkna(`ram3`,`#ff0000`);'></td>
<td><input type='submit'
value='Èervená' onClick='return
zmBrvOkna(`ram4`,`#ff0000`);'></td>
</tr>
<tr>
<td><input type='submit'
value='Zelená' onClick='return
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>
Odkazy na promìnné a funkce
Nemusíme se odkazovat pouze na document a ostatní window objekty dalších rámù, ale mùžeme používat jakékoliv globální promìnné nebo funkce definované v ostatních rámech.
Pøíklad, jak si nechat vypsat promìnnou definovanou v jiném rámu:
document.write(window.parent.frames[`ram1`].mojeProm + '<BR>');
Nyní si ukážeme, jak volat funkci zmBrvOkna() z jiného rámu. Do tøí spodních stránek ve kterých mìníme barvu pøidáme kód pro zmìnu na pùvodní bílou barvu.
<html>
<head>
<title>Rám 2</title>
</head>
<body bgcolor='#ffffff'>
<center>
<font face='Arial,Helvetica'
size='4'><b>Rám 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 vidíte používá se stejný postup jako pøedtím. Opìt se pomocí window.parent odkazujeme na stránku s definicemi rámù a pomocí frames['ram1' se odkazujeme na vrchní rám (Rám 1). Pøipojením funkce zmBrvOkna() na konec voláme tuto funkci i s parametry (jméno_rámu, barva).
Vlastnost name pøedáváme jako parametr ve volání funkce zmBrvOkna(). Vlastnost name objektu window vrací jméno aktuálního rámu z pole frames[] (jméno rámu je definováno v tagu <FRAME>, NAME=hodnota). Tím pøedáme 'automaticky' funkci zmBrvOkna() jako parametr jméno rámu z kterého je tato funkce volána.
Opìt schéma pro snadnìjší pochopení:
Jak už jsme si øekli, stejným zpùsobem mùžeme pøistupovat i ke globálním promìnným z jiných rámù. Stejnì jako u funkce pouze pøipojíme jméno promìnné na konec odkazu a ovšem závorky vynecháme. Zde je ukázka rùzných možností pro nastudování.
Objekty window: Location a History
Objekt location
Objekt location obsahuje informace o URL aktuálnì naètené stránky. URL stránky tak mùžeme zmìnit pøímo na novou adresu:
window.location = 'https://www.google.com';
Úplnì postaèuje:
location = 'https://www.google.com'; //jak jsme si již uvedli, objekt window nemusíme uvádìt
Jako pøíklad mùže posloužit tento krátký kód, který zmìní aktuální stránku po 5 vteøinách a zobrazí stránku www.google.com:
setTimeout('window.location = `https://www.google.com`;', 5000);
Okno mùžeme také zmìnit nebo naèíst pomocí jedné ze dvou metod objektu location:
reload() - zpùsobí znovunaètení stránky. Používá se pokud potøebujeme obnovit obsah stránky.
replace(URL - naète stránku danou URL v oknì nebo rámu prohlížeèe. Staré umístìní stránky je v historii stránek pøepsáno souèasnou stránkou. (Pokud napøíklad navštívíme stránku www.neco.cz/prvni.html, poté www.neco.cz/replace.html, která nás pomocí metody replace pøesmìruje na stránku www.neco.cz/druha.html. I když jsme navštívili celkovì tøi stránky v historii prohlížeèe jsou pouze dvì, www.neco.cz/prvni.html a www.neco.cz/druha.html.)
Použití metody replace() zapøíèiní, že uživatel není schopen vrátit se na pøedchozí stránku pomocí tlaèítka prohlížeèe Zpìt. Neznamená to, že uživatel nemùže použít tlaèítko Zpìt vùbec, ale pokud ho použije bude vrácen pøed nahrazovací stránku (stránku, na které jsme použili metodu replace).
Tato metoda mùže pøi špatném použití hodnì ztížit život uživatelùm, jindy zase naopak mùže být její použití v nìkterých situacích pøímo vhodné. V následujícím pøíkladu použijeme opìt metodu setTimeout() pro opakované naèítání stránek s reklamou do rámu každé tøi vteøiny. Nechte ukázku bìžet nìkolik vteøin a poté zkuste vrátit na úvodní stránku pomocí tlaèítka Zpìt na prohlížeèi.
<html>
<head>
<title>Reklama pomocí - location</title>
<script type='text/javascript'>
<!--
// Seznam reklamních stránek.
var stranky = new Array('rkl1.html', 'rkl2.html',
'rkl3.html');
var n = 0;
// Funkce mìnící stránky s reklamou ve spodním rámu.
function obnReklamu()
//-->
</script>
</head>
<body onLoad='obnReklamu()'>
<font face='Arial,Helvetica,sans-serif'
size='2'>
<b>Pøíklad se zmìnou reklamního
banneru.</b>
<p>
Pokaždé, když se banner zmìní, je pøidána nová
URL do historie stránek v prohlížeèi.
Pokud by jste se chtìli vrátit na pøedchozí
stránku pomocí tlaèítka zpìt na prohlížeèi,
asi by jste se uklikali.
</font>
<p>
</body>
</html>
Museli jste nìkolikrát klinout, že ano? A èím déle by stránka bìžela, tím obtížnìjší by bylo vrátit se na pùvodní stránku. Nyní si pøedvedeme, jak tento problém vyøešit pomocí metody replace(). V pùvodním skriptu s reklamou vymìòte funkci obnReklamu() za tuto:
function obnReklamu()
Objekt history
Další z užiteèných objektù je objekt history, který uchovává informace o URL všech navštívených stránek. Objekt history podporuje tøi metody:
forward() - naète URL stránky, která následuje v historii za souèasnou stránkou.
back() - naète URL pøedcházející stránky z historie.
go() také naèítá URL stránek z historie prohlížeèe. U této metody mùžete definovat o kolik pozic v historii se má prohlížeè pøesunout ze souèasné pozice. Mùžeme napøíklad zapsat, že se prohlížeè má vrátit o dvì pozice nebo na stránku obsahující v URL urèitý textový øetìzec. Pokud metodì go zadáme jako argument textový øetìzec, najde první stránku v historii, jejíž URL obsahuje zadaný textový øetìzec.
Tyto dvì metody jsou si ekvivalentní:
history.go(-1); //pøi 0
se nahraje aktuální stránka
history.back();
Tento pøíkaz naète první stránku jejíž URL v historii obsahuje slovo 'netscape' (je brán zøetel na velikost písmen):
history.go('netscape'); // nepodporuje IE
Poznámka: Pokud pøíkaz nemùže vyhovìt, neprojeví se žádná zmìna a to u všech tøí metod. Obsah okna se nezmìní a není vygenerováno chybové hlášení.
Pøedpokládejme, že máte stránku, na kterou vedou odkazy z ostatních vašich stránek. Chcete-li na tuto stránku vložit odkaz pro návrat na pøedcházející stránku, nastává problém. Nevíte, z které stránky byla souèasná stránka naètena. Proto nemùžeme specifikovat atribut HREF=, ale využijeme objekt history:
<a href='#' onClick='history.back(); return false;'>Zpìt</a>
Zmìna obsahu stránky
Metoda scroll() umožòuje posouvat (rolovat) obsah webové stánky nebo rámu. Stránka mùže být posouvána jak horizontálnì, tak vertikálnì.
window.scroll(x,y); // Posune obsah okna nebo rámu na pozici udanou parametry x a y, což jsou souøadnice. Levý horní roh HTML dokumentu odpovídá souøadnicím [0,0].
V uvedeném pøíkladu je spodní rám s pøedpovìdí poèasí pro rùzná svìtová mìsta posouván pomalu nahoru.
<html>
<head>
<title>Rolující pøedpovìï
poèasí</title>
<script type='text/javascript'>
<!--
// Promìnná y pro poèáteèní vertikální
pozici rámu.
var y = 0;
function rolujRam()
//-->
</script>
</head>
<body bgcolor='#ffffff'
text='#000000' onLoad='rolujRam();'>
<font face='Arial,Helvetica,sans-serif'
size='2'>
<b>Pøíklad rolující stránky.</b>
</font>
</body>
</html>
V pøíkladu je stránka posouvána až do 870 pixelù a poté se zaène posouvat opìt od zaèátku.
Dalším zpùsobem jak pøepsat obsah okna je použít metody write() a writeln() objektu dokument. Tyto funkce umožòují vypsání textového øetìzce, ve kterém mohou být i HTML tagy pomocí prohlížeèe na obrazovku monitoru. Následující pøíklad vypíše text zadaný do formuláøe v horním rámu do spodního rámu.
<html>
<head>
<title>Vypsání textu</title>
<script type='text/javascript'>
<!--
function prepisRam()
//-->
</script>
</head>
<body bgcolor='#ffffff'>
<font face='Arial,Helvetica' size=2>
<b>Pøíklad s pøepsáním obsahu jiné
stránky.</b>
<p>
Napište nìjaký text a stisknìte
'Odeslat', text bude zobrazen ve spodním rámu.<br>
Mùžete používat i HTML tagy, jako napøíkad
<B></B>,<BR>:
<form onSubmit='return prepisRam();'>
<textarea name='text' rows=5
cols=80></textarea><br>
<input type='submit' value='Odeslat'>
<input type='reset'
value='Vymazat'>
</form>
</font>
<p>
</body>
</html>
Mùžete si vyzkoušet rùzné experimenty s vkládáním rùzných HTML tagù. Napøíklad mùžete použít tag <BODY> s rùznou barvou pozadí stránky. Další experimenty se dají provádìt i se skripty, napište si nìjaký skript a vyzkoušejte si co se stane. Pøíklad pro ty s menší fantazií :-)
<script>
alert('Ahoj lidi!');
</script>
Prohlédnìte si zdrojový kód spodního rámu (pravé tlaèítko myši a následnì 'Zobrazit zdrojový kód') a uvidíte, jak se projevil váš vstup ve spodním rámu.
Ve funkci prepRam() jsou nejdùležitìjší tyto dva øádky:
window.parent.frames['text'].document.writeln(document.forms[0].text.value);
window.parent.frames['text'].document.close();
První øádek vypíše text zapsaný do formuláøe v horním rámu do stránky v rámu spodním. Následnì je volána metoda close(), která prohlížeèi sdìlí, že vstup je u konce a mùže dojít k vyrendrování (vygenerování) stránky. Metoda close() by mìla být volána vždy, když dojde k pøepsání obsahu stránky.
Malé vylepšení
Možná jste si všimli, že poslední pøíklad pøidává každou novì vygenerovanou stránku do historie prohlížeèe. S podobným problémem jsme se už setkali na stránce s reklamou. Problém vyøešíme podobnì jako u reklamy, pøidáme jeden øádek s metodou open() do funkce prepRam().
Poznámka: Metoda open() je v tomto pøípadì 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();
Øetìzec 'text/html' v metodì open() sdìluje prohlížeèi, že má oèekávat HTML data. Další øetìzec 'replace' prohlížeèi sdìlí, že nemá pøidávat položky do historie prohlížeèe. Je to stejné jako, když použijeme location.replace(URL) pøi zmìnì obsahu okna nebo rámu.
Ostatní možné MIME-typy pro metodu open jsou:
'text/html' - implicitní HTML formát
'text/plain' - prostý text, znaèky HTML se neinterpretují
'image/gif' - obrázek ve formátu GIF
'image/jpeg' - obrázek ve formátu JPEG
'image/x-bitmap' - obrázek ve formátu x-bitmap
Dalšími MIME-typy jsou identifikace formátù pro instalovaná rozšíøení plug-in, která se pak starají o jejich interpretaci sama.
Jednoduchá zmìna pøedcházejícího pøíkladu snad vše objasní. Zmìnìná funkce prepRam() po pøidání jednoho øádku nyní vypadá takto:
function prepisRam()
Poznámka: V IE 6 nefunguje správnì (proè, to nevim).
Èást 4 |
Více o formuláøích |
Použití formuláøù
V doposud uvedených pøíkladech jste si možná už všimli, že jsme v pøedstihu používali vìtšinou elementy formuláøe ve spojení s kódem JavaScriptu (napøíklad díl sedm a jedenáct), jako funkce rùzných tlaèítek a textové vstupy. Elementy formuláøe dovolují uživateli interakci se stránkou èímž jsou ideální pro použití se skriptem. Dovolují data shromáždit a následnì provést akci podle vstupu uživatele. V této ètvrté èásti se tedy podíváme na rùzné elementy formuláøe a ukážeme si jak mohou být použity spolu se skriptem.
Objekt form
Pøedtím, než se pustíme do jednotlivých elementù formuláøe, tak se podíváme na samotný objekt form. Jak už jsme uvedli v Èásti 2 'Objekty JavaScriptu' je objekt form vytvoøen pro každý párový tag <FORM></FORM> na stránce. Podobnì je také vytvoøen vlastní objekt pro každý element (checkbox, radio a text) v objektu form (ve formuláøi). Tyto jednotlivé objekty elementù formuláøe jsou uloženy v poli a dostaneme se k nim za použití vlastnosti elements objektu form.
K elementùm formuláøe budeme pøistupovat stejnì jako v minulých pøíkladech. První pøíklad obsahuje dva formuláøe na stránce:
<html>
<head>
<title>Ukázkový formuláø</title>
</head>
<body>
<form action='/cgi-bin/customer.cgi'
method='post' name='infozakaznik'>
Jméno: <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>
Množství: <input type='text'
name='mnozstvi'><br>
<input type='submit'
value='Odeslat'><input type='reset'
value='Vymazat'>
</form>
</body>
</html>
Pro pøístup k elementu formuláøe 'mnozstvi' mùžeme použít jeden z následujících zápisù (ale i další):
var mn = document.forms[1].elements[1];
var mn = document.forms['dataobjednavky'].elements[1];
var mn =
document.forms.dataobjednavky.elements['mnozstvi'];
var mn = document.dataobjednavky.mnozstvi;
Pro každý typ elementu formuláøe (checkbox, radio a text) je k dispozici jiný typ objektu. Vìtšina z tìchto objektù nabízí k použití vlastnost value a napøíklad metodu focus(). Ovšem nìkteré vlastnosti a metody jsou pøíslušné pouze urèitému typu elementu formuláøe a jeho objektu.
Poznámky: Seznam veškerých objektù formuláøe a jejich vlastností a metod bude uveden v posledním dílu této èásti jako pøíloha.
Pokud chcete zjistit typ objektu pro urèitý element formuláøe, použijte vlastnost type. V uvedeném pøíkladu je pomocí
document.dataobjednavky.mnozstvi.type
jako výsledek vrácen øetìzec 'text'.
Zpracování formuláøù (Form)
Normálnì obsahuje tag <FORM> atribut ACTION, který specifikuje URL programu nebo skriptu pro zpracování na serveru. Jak už jsme uvedli v seznamu správcù událostí událost onSubmit mùžeme použít ke kontrole vstupu nebo jiné manipulaci s daty pomocí JavaScriptu ještì pøedtím, než jsou data odeslána na server ke zpracování. Pomocí návratových hodnot true nebo false tak mùžeme ovlivnit odeslání dat. (Pokud bude napøíklad nìkteré pole formuláøe vyplnìno chybnì èi vùbec je vygenerována chybová hláška a vrácena hodnota false èímž nedojde k odeslání formuláøe. Odeslat pùjde až budou všechny údaje korektnì vyplnìny.)
Pokud chceme používat elementy formuláøe pouze pro ovlivnìní nìjakého kódu JavaScriptu a nepožadujeme zpracování na serveru, mùžeme vynechat atributy ACTION= a METHOD= (pøípadnì ENCTYPE=) v tagu <FORM>.
Typy elementù formuláøe
Objekt Button
K dispozici máme tøi typy tlaèítek. Tlaèítka Submit a Reset, která jste již urèitì vidìli u mnoha formuláøù mají svùj specifický typ objektu (submit a reset). Každé z tìchto dvou tlaèítek obsahuje svojí vestavìnou funkci. Ukázka HTML kódu se všemi tøemi tlaèítky:
<input type='submit'
value='Submit'>
<input type='reset'
value='Reset'>
<input type='button'
value='Button'>
Právì rozdíl mezi již uvedenými tlaèítky Submit a Reset a obecnì použitelným Button je ten, že Submit a Reset mají nastavenou implicitní akci, která se provede po stisku tlaèítka. Submit odesílá data na server a Reset maže jednotlivá pole formuláøe. Pro button musí být požadovaná akce definována za pomoci uálosti onClick.
Vykonání definované implicitní akce elementù Submit a Reset mùžete pøepsat pomocí návratové hodnoty false události onClick. Následující ukázka jednoduché kalkulaèky ukazuje jak pomocí všech tøí typù tlaèítek vykonat stejnou akci.
<html>
<head>
<title>Jednoduchá kalkulaèka</title>
<script>
// Funkce je volána pøi stisku jakéhokoliv ze tøí
tlaèítek.
function secti()
</script>
</head>
<body bgcolor='#ffffff'>
<font face='Arial,Helvetica,sans-serif'
size='2'>
<!-- Jednoduchá kalkulaèka -->
<b>Pøíklad použití rozdílných typù
tlaèítek:</b>
<p>
Vložte dvì èísla a stisknìte jakékoliv ze
tøí tlaèítek pro souèet:
<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='Seèti -
Submit' onClick='secti(); return false;'>
<input type='reset'
value='Seèti - Reset' onClick='secti(); return
false;'>
<input type='button' value='Seèti -
Button' onClick='secti();'>
</form>
</font>
</body>
</html>
Asi jste zaregistrovali, že jsme v pøíkladu použili novou metodu (funkci) parseInt(). Funkce pøevádí textový øetìzec na èíslo v zadané soustavì. Funkce parseInt() je vestavìná funkce JavaScriptu. Tato metoda proto není asociovaná s žádným objektem, ale je souèástí jazyka samotného.
parseInt(øetìzec ,[soustava])
Pokud neuvedete žádnou soustavu, JavaScript ji pøiøadí automaticky:
Zaèíná-li øetìzec '0x', je zvolena soustava hexadecimální (16).
Zaèíná-li øetìzec '0', je zvolena soustava oktalová (8).
Je-li øetìzec zapoèat jinou hodnotou, je zvolena soustava decimální (10).
Pokud bysme tuto funkci nepoužili a vstupní øetìzec nepøevedli na èíslo obdržíme jako výsledek pøi pokusu seèíst '2' a '2' opìt øetìzec '22' a ne èíslo 4.
Tlaèítko Reset po stisku vymaže (nastaví) veškerá pole formuláøe na jejich implicitní hodnoty, specifikované pomocí atributu VALUE=. Toto se nám nìkdy nehodí, a to tehdy pokud potøebujeme vymazat pole formuláøe úplnì a ne vrátit na hodnotu v atributu VALUE. Jak docílit toho, aby se elementy formuláøe vymazaly úplnì si ukážeme v následujícím pøíkladu, kdy pøepíšeme implicitní hodnoty VALUE na null.
<html>
<head>
<title>Mazání</title>
<script type='text/javascript'>
<!--
// Funkce pro vymazaání implicitních hodnot (value) formuláøe
ještì pøed vykonáním zabudované funkce tlaèítka Reset.
function clearFields(f)
//-->
</script>
</head>
<body bgcolor='#ffffff'>
<font face='Arial,Helvetica,sans-serif' size='2'>
<b>Nadefinování vlastní akce tlaèítku
<i>Reset</i>:</b>
<p>
Prosím vyplòte následující informace:
<p>
<form onReset='return clearFields(this);'>
<table border='0' cellspacing='0'
cellpadding='4'>
<tr>
<td><font face='Arial,Helvatica'
size=3>Výrobce poèítaèe:</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>Operaèní systém:</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>
Objekty Text, Password, Hidden a Textarea
Tyto objekty jsou si navzájem velmi podobné, u všech je vstupem textový øetìzec. Rozdíl je zejména v zobrazení na obrazovce:
Text - jedna øádka s textem, mùže být jakékoliv délky.
Password - stejnì jako v pøedtím jedna øádka s textem. Ovšem veškeré napsané znaky v tomto poli jsou nahrazeny za '*', aby se pøedešlo možnému spatøení citlivých dat na obrazovce.
Hidden - také jedna øádka s textem, ale text zde uvedený se nezobrazuje na stránce a nemùže být mìnìn uživatelem pøímo. Hodnotu VALUE elementu mùžete mìnit v kódu.
Textarea - víceøádkový text. Zadaný text je reprezentován jako jeden textový øetìzec. V místech, kde jsme zadali Enter je vložen znak pro zaèátek nového øádku.
Poznámka: Skrytá pole se používají pro pøenos informací na a ze serveru. Pøestože nejsou na stránce zobrazena lze se k nim dostat pøes zdrojový kód stránky. Proto pokud tímto zpùsobem chcete pøedávat citlivé informace je dobré tyto data nìjak zašifrovat, aby je mohl zpìtnì dešifrovat pouze k tomu urèený server.
Elementy text a textarea poskytují událost onChange, která umožòuje provést akci pøi zmìnì pole formuláøe. Využití této události demonstruje další pøíklad. Všimnìte si, že událost OnChange je volána pouze pokud uživatel vstupní pole zmìní a poté opustí (pomocí klávesy TAB, myši nebo stiskem klávesy ENTER).
<html>
<head>
<title>onChange</title>
<script type='text/javascript'>
<!--
// Poèítadlo pro poèet volání funkce
aktualInfo().
var pocet = 0;
// Funkce pro sumarizaci vstupních údajù.
function aktualInfo()
//-->
</script>
</head>
<body bgcolor='#ffffff'>
<font face='Arial,Helvetica,sans-serif'
size='2'>
<!-- Jednoduchý informaèní formuláø -->
<b>Pøíklad se zachytáváním zmìny vstupního
textu:</b>
<p>
Prosím vyplòte následující informace:
<p>
<form>
<table border=0 cellpadding=4 cellspacing=0>
<tr>
<td><font face='Arial,Helvatica'
size=2>Jméno:</font></td>
<td><input name='jmeno'
type='text' value='' size=20
onChange='aktualInfo()';></td>
</tr>
<tr>
<td><font face='Arial,Helvatica'
size=2>Pøíjmení:</font></td>
<td><input name='prijmeni'
type='text' value='' size=20
onChange='aktualInfo()';></td>
</tr>
<tr>
<td><font face='Arial,Helvatica'
size=2>Adresa:</font></td>
<td><input name='adresa'
type='text' value='' size=40
onChange='aktualInfo()';></td>
</tr>
<tr>
<td colspan=2>
<font face='Arial,Helvatica'
size=2>Mìsto:</font> <input name='mesto'
type='text' value='' size=20
onChange='aktualInfo()';>
<font face='Arial,Helvatica'
size=2>PSÈ:</font> <input name='psc'
type='text' value='' size=5 onChange='aktualInfo()';>
</td>
</tr>
<tr><td> </td></tr>
<!-- Toto pole formuláøe je aktualizováno v
pøípadì, že dojde ke zmìnì jiného pole. -->
<tr><td colspan=2><textarea
name='all' rows=4 cols=60></textarea></td></tr>
</table>
<p>
</form>
</font>
</body>
</html>
Poznámka: Stisk klávesy ENTER v nìkterých prohlížeèích nevyvolá událost onChange (IE 5.5 a vyšší Opera 5.0 a vyšší).
Možná jste si zjistili, že hodnota ve vstupním poli musí být skuteènì zmìnìna, aby došlo k volání události. Pokud uživatel vstup smaže nevystoupí z pole a následnì znovu vepíše stejný text událost onChange volána nebude. Ovìøit si to mùžete pozorováním hodnoty 'Poèet volání' v textové oblasti uvedeného pøíkladu.
Objekt Checkbox
Elementy formuláøe checkbox a radio se používají k výbìru z více možností. Element checkbox je vhodné použít v pøípadì, že vám staèí pouze jednoduchá odpovìï typu 'ano' nebo 'ne'. Element radio je vhodný použít tam, kde chceme vybrat pouze jednu z nabízených možností.
Objekt checkbox je nastaven s hodnotou atributu VALUE v HTML tagu. Tato hodnota je na server odeslána pouze v pøípadì, že políèko formuláøe je zaškrtnuto. Vlastnost checked urèuje stav elementu, true pokud je políèko zaškrtnuto a false pokud ne.
Stav elementu (zaškrtnut/nezaškrtnut) mùžete zjišovat a ovlivòovat pomocí JavaScriptu. V pøíkladu si uživatel mùže vybrat se seznamu jednotlivý typ zboží nebo zaškrtnout èi odškrtnout všechna pole najednou pomocí jednoho stisku tlaèítka.
<html>
<head>
<title>Zaškrtnout/odškrtnout všechny
checkboxy</title>
<script type='text/javascript'>
<!--
// Funkce pro zaškrtbutí/odškrtnutí všech políèek
najednou.
function nastavZatr(zatr)
//-->
</script>
</head>
<body bgcolor='#ffffff'>
<font face='Arial,Helvetica,sans-serif'
size='2'>
<!-- Seznam voleb. -->
<b>Pøíklad s použítím checkboxù:</b>
<p>
Prosím zaškrtnìte typ zboží k dodání:
<p>
<form>
<input type='checkbox'
name='option1' value='X-plod WWW server'>X-plod WWW
server<br>
<input type='checkbox'
name='option2' value='90d podpora'>90 denní
podpora<br>
<input type='checkbox'
name='option3' value='Extended pack'>Extended
pack<br>
<input type='checkbox'
name='option4' value='Tištìná
pøíruèka'>Tištìná pøíruèka<br>
<p>
<!-- Zaškrtnout èi odškrtnout všechna políèeka
najednou. -->
<input type='button' value='Select
All' onClick=' nastavZatr(true);'>
<input type='button' value='UnSelect
All' onClick=' nastavZatr(false);'>
</form>
</font>
</body>
</html>
Objekt Radio
Element 'radiobutton' se odlišuje od checkboxu tím, že umožòuje volit z více alternativ než dvì. Napøíklad chceme na stránce zjistit vìkové rozložení návštìvníkù. Prùzkum si na stránku mùžeme pøidat následovnì:
<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
Všimnìte si, že všechna tlaèítka (radiobutton) mají stejné jméno, vek. Radio tlaèítka se shlukují do skupin, kde jednu skupinu vždy tvoøí stejnì pojmenovaná tlaèítka. K tomu, aby prohlížeè poznal, které tlaèítko patøí k jedné skupinì je nutné, aby všechny tlaèítka v této skupinì mìla stejnou hodnotu atributu NAME. Máme-li takovou skupinu tlaèítek, pùjde ve skupinì stisknou pouze jedno. Pokud stisknete jiné tlaèítko, je pùvodní zatržení automaticky smazáno. Pøi odeslání formuláøe na server je hodnota zatrženého tlaèítka odeslána jako výsledek celé skupiny.
Každé tlaèítko ve skupinì je reprezentováno svým objektem radio. Stejnì jako checkbox má každý takovýto objekt vlastnost value, která odpovídá hodnotì atributu VALUE= pøíslušného tlaèítka v HTML a stejnì tak i vlastnost checked. Rozdíl je právì v tom, že jak oznaèíme jedno tlaèítko na stránce nebo pomocí kódu, je oznaèení pøedešlého automaticky zrušeno.
Nyní již slyším otázku: Jak mùžu pøistoupit k jednotlivým tlaèítkùm, když mají všechny stejné jméno? Odpovìï je jednoduchá, objekt radio je vlastnì pole, kde jsou zvláš uloženy jednotlivé parametry pro každé tlaèítko ve skupinì. Použitím následujícího krátkého kódu mùžeme pøistoupit postupnì ke každému tlaèítku ve skupinì.
var rbutt;
for (i = 0; i <
document.forms['mujformular'].vek.length; i++)
Opìt pøipomínám, že z celé skupiny mùže být zatrhnuto pouze jedno tlaèítko. To znamená, že pouze jedno tlaèítko mùže vrátit true pøi použití vlastnosti checked. Následující pøíklad demonstruje jak najít zvolené hodnoty tlaèítek ve vícero skupinách.
<html>
<head>
<title>Zobrazení stisknutých
tlaèítek.</title>
<script type='text/javascript'>
<!--
// Funkce pro zobrazí vybrané hodnoty pro každé stisknuté
tlaèítko.
function zobrVyber ()
//-->
</script>
</head>
<body>
<font face='Arial,Helvetica,sans-serif'
size='2'>
<!- Seznam jednotlivých možností. -->
<b>Pøíklad použití radio
tlaèítek:</b>
<p>
Prosím vyplòte požadující údaje:
<p>
<form>
<table border='0' cellspacing='0'
cellpadding='8'>
<tr valign=top>
<td><font size='-1'>
<strong>Vaše vìková 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í vašeho èistého
výdìlku:</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>
<input name='vydelek' type='radio'
value='nad 20 000 Kè'>nad 20 000 Kè</font>
</td>
<td><font size='-1'>
<strong>Status:</strong>
<p>
<input name='stav' type='radio'
value='Ženatý/á'>Ženatý/á<br>
<input name='stav' type='radio'
value='Rozvedený/á'>Rozvedený/á<br>
<input name='stav' type='radio'
value='Svodný/á'>Svodný/á<br></font>
</td>
</tr>
</table>
<p>
<!- Zobrazí vybrané hodnoty pro každé stisknuté
tlaèítko. -->
<input type='button' value='Zobraz
vybrané' onClick='zobrVyber();'>
</form>
</font>
</body>
</html>
Možná jste si vzpomnìli na minulý díl, kdy jsme pomocí skriptu oznaèovali èi odznaèovali všechna zatržítka. Jak to vyøešit v pøípadì, že zatržítek je moc a kód by se tím znaènì protáhnul? Stejnì jako v pøedcházejícím pøípadì. Všem zatržítkùm déme stejné jméno a oznaèujeme nebo odznaèujeme je pomocí skriptu:
function nastavZatr(zatr)
Poznámka: Vždy je dùležité zvážit, který zpùsob je vhodnìjší, kratší a efektivnìjší. Zjednodušenì se dá øíct, že èím kratší kód, tím lepší.
Objekt Select a Option
Roletka s výbìrem ze seznamu je další cestou jak nabídnout uživateli volbu z více možností. Základní formát pro pøidání roletky se seznam vypadá následovnì:
<form name='mujF'>
<select name='kraje' size='1'>
<option
value='Jihoèeský'>Jihoèeský</option>
<option
value='Jihomoravský'>Jihomoravský </option>
<option
value='Karlovarský'>Karlovarský</option>
<option
value='Královehradecký'>Královehradecký</option>
<option
value='Liberecký'>Liberecký</option>
<option
value='Moravskoslezský'>Moravskoslezský</option>
<option
value='Zlínský'>Zlínský</option>
</select>
</form>
Objekt select je vytvoøen pro každý párový tag <SELECT></SELECT> nacházející se na stránce. A již tradiènì takto vzniklý objekt Option obsahuje pole se seznamem všech vlastností, jedna položka pole vždy pøedstavuje jeden <OPTION></OPTION> tag z HTML stránky. K jednotlivým položkám pole pøistupuje pomocí vlastnosti options.
Poznámka: IE 3.0 nepodporuje objekty Select a Option.
Další dvì vlastnosti objektu Select, které byste mìli znát, protože je budete èasto používat jsou length, která vrátí poèet položek option v poli options. Druhou užiteènou vlastností je selectedIndex, která vrací èíslo vybraného prvku z roletky uživatelem. Mìjte prosím na pamìti, že toto èíslo patøí poli a proto první položka pole je oznaèena èíslem 0 (Jihoèeský).
Nejlépe bude si tyto nové vlastnosti vyzkoušet na pøíkladu a vše bude hned jasné. Do tagu <SELECT> se seznamem krajù pøidejte správce události onChange='zobrVyb();' a na stránku vložte následující skipt:
<script
type='text/javascript'>
<!--
function zobrVyb()
//-->
</script>
Uvedený pøíklad funguje dobøe pouze pokud je vybrána jedna položka ze seznamu. Použijeme-li v tagu <SELECT> atribut MULTIPLE mùže uživatel vybrat více položek ze seznamu souèasnì (pøidržením klávesy Ctrl nebo Shift, podle standardu Windows). V tomto pøípadì by nám vlastnost selectedIndex vrátila pouze první oznaèenou položku!
Pro práci s vícero oznaèenými položkami nám JavaScript nabízí vlastnost selected. Pomocí této vlastnosti mùžeme otestovat všechny v objektu option. Následující pøíklad ukazuje jak opakovat dotaz pro zjištìní všech oznaèených položek uživatelem a jejich následný výpis.
<html>
<head>
<title>Vícenásobný výbìr</title>
<script type='text/javascript'>
<!--
// Funkce pro zobrazení všech vybraných položek seznamu.
function zobrVyber()
//-->
</script>
</head>
<body>
<font face='Arial,Helvetica,sans-serif'
size='2'>
<!-- Vícenásobný výbìr ze seznamu. -->
<b>Pøíklad s vícenásobným výbìrem ze
seznamu:</b>
<p>Prosím vyberte jednu nebo více kategorií:
<form>
<select name='seznam' size='9'
multiple>
<option
value='Novinky'>Novinky</option>
<option
value='Sport'>Sport</option>
<option
value='Poèasí'>Poèasí</option>
<option
value='Zábava'>Zábava</option>
<option value='Spoleènost'>Spoleènost</option>
<option
value='Události'>Události</option>
<option
value='Ekonomie'>Ekonomie</option>
<option
value='Zahrada'>Zahrada</option>
<option
value='Nemovitosti'>Nemovitosti</option>
</select>
<p>
<input type='button' value='Ukaž
oznaèené' onClick='zobrVyber();'>
<input type='reset'
value='Odznaè'>
</form>
</font>
</body>
</html>
Nakonec je zde slíbený seznam všech objektù formuláøe a jejich možných vlastností a metod. Snad vám bude užiteèný.
Objekt |
Vlastnosti |
Metody |
Události |
Button |
form, name, type, value |
blur(), click (), focus(), handleEvent(událost) |
onBlur='kódJavaScriptu', onClick='kódJavaScriptu', onFocus='kódJavaScriptu', onMouseDown='kódJavaScriptu', onMouseUp='kódJavaScriptu' |
Checkbox |
checked, defaultChecked, form, name, type, value |
blur(), click(), focus( ), handleEvent(událost) |
onBlur='kódJavaScriptu', onClick='kódJavaScriptu', onFocus='kódJavaScriptu' |
Form |
action = URL, elements, encoding, length, method, name, target |
handleEvent(událost), reset(),submit() |
onReset='kódJavaScriptu', onSubmit='kódJavaScriptu' |
Hidden |
form, name, type, value |
dìdí metody objektu Object (watch, unwatch - pouze NN) | |
Option new Option(text, value, defaultSelected, selected) |
defaultSelected, selected, text, value |
dìdí metody objektu Object (watch, unwatch - pouze NN) | |
Password |
defaultValue, form, name, type, value |
blur(),focus(),handleEvent(událost), select() |
onBlur='kódJavaScriptu', onFocus='kódJavaScriptu' |
Radio |
checked, defaultChecked, form, name, type, value |
blur(), click(), focus( ), handleEvent(událost) |
onBlur='kódJavaScriptu', onClick='kódJavaScriptu', onFocus='kódJavaScriptu' |
Reset |
form, name, type, value |
blur(), click (), focus(), handleEvent(událost) |
onBlur='kódJavaScriptu', onClick='kódJavaScriptu', onFocus='kódJavaScriptu' |
Select |
form, length, name, options, selectedIndex, type |
blur(), focus( ), handleEvent(událost) |
onBlur='kódJavaScriptu', onChange='kódJavaScriptu', onFocus='kódJavaScriptu' |
Submit |
form, name, type, value |
blur(), click(), focus( ), handleEvent(událost) |
onBlur='kódJavaScriptu', onClick='kódJavaScriptu', onFocus='kódJavaScriptu' |
Text |
defaultValue[ = 'nováDefaultníHodnota'], form, name, type, value |
blur(), focus( ), handleEvent(událost), select() |
onBlur='kódJavaScriptu', onChange='kódJavaScriptu', onFocus='kódJavaScriptu', onSelect=' JavaScript' |
Textarea |
defaultValue[ = 'nováDefaultníHodnota'], form, name, type, value |
blur(), focus( ), handleEvent(událost), select() |
onBlur='kódJavaScriptu', onChange='kódJavaScriptu', onFocus='kódJavaScriptu', onKeyDown='JavaScript', onKeyPress='JavaScript', onKeyUp='JavaScript', onSelect=' JavaScript' |
Dnes jsme pravdìpodobnì zakonèili èást týkající se formuláøù.
Èást 5 |
Tvorba vlastních objektù |
V Javascriptu máme již standardnì zabudovanou sadu nìkolika objektù týkajících se jak obsahu vlastní stránky, tak napøíklad datových typù a další. Ovšem nejste omezeni pouze na používání tìchto zabudovaných objektù, mùžete si vytvoøit objekty vlastní i s jejich vlastnostmi a metodami! Urèitì se vám to bude hodit napøíklad pøi práci s obsáhlými datovými strukturami nebo pro zjednodušení kódu.
Pro vytvoøení nového objektu musíte nejdøíve vytvoøit konstruktor. To je funkce, která definuje vlastnosti vašeho objektu a v nìkterých pøípadech nastaví i jejich poèáteèní hodnoty. Následnì, poté co máme definovány vlastnosti nového objektu mùžeme vytvoøit metody, které mohou s objektem pracovat.
Funkce konstruktoru
Každý objekt potøebuje funkci konstruktoru. Tato funkce je volána pokaždé, když vytvoøíme novou instanci objektu za použití operátoru new. Pomocí konstruktoru jsou definovány vlastnosti objektu s jejich poèáteèními hodnotami. Ve funkci konstruktoru mùžeme také deklarovat metody našeho nového objektu.
Pøíklad ukazuje konstruktor pro nový objekt nazvaný Produkt, ve kterém jsou uloženy údaje - vlastnosti o rùzných katalogových výrobcích.
function Produkt(jmeno, idcislo, cena, doprava, mnozstvi)
Jména parametrù ve funkci Produkt a jména vlastností našeho nového objektu se pro snazší orientaci ve vìtšinì pøípadù shodují, ale není to povinnost. U nového objektu mohou být poèáteèní hodnoty jednotlivých vlastností nastaveny pøi jeho vzniku nebo až pozdìji. Pokud bychom potøebovali mít hodnotu urèité vlastnosti nastavenu konstantnì, definujeme ji ve funkci Produkt. Napøíklad do funkce Produkt pøidáme øádek:
this.prodejna = 'Praha 6';
Ale ani hodnota vlastnosti prodejna není nastavena 'napevno' a dá se mìnit.
Novì jsme použili klíèové slovo this, které odkazuje na objekt, ke kterému se konkrétní vlastnost èi metoda vztahuje. V tomto pøíkladì tedy odkazuje na objekt Produkt. Pokud chceme vytvoøit instanci objektu Produkt, mùžeme toho docílit takto:
var polozka1 = new
Produkt('mixer', '9003-2', 2523, 150, 2);
var polozka2 = new Produkt('mycka',
'9117-1', 7688, 300, 1);
Nový objekt mùžeme vytvoøit i bez poèáteèních hodnot a ty zadat až pozdìji. Hodnoty stávajících objektù jde také mìnit:
var polozka3 = new Produkt();
polozka3.jmeno = 'robot';
polozka1.cena = 2223;
Asi už jste zaregistrovali, že k tìmto novým vlastnostem se dostáváme stejnì jako k jakýmkoliv jiným vlastnostem. Pomocí teèkové notace:
var celkem = (polozka1.cena + polozka1.doprava) * polozka1.mnozstvi;
Definice nových metod
Øádek kódu nahoøe nám ukazuje jednu cestu jak spoèítat celkovou sumu za výrobek, která je složena z ceny výrobku, dopravy a balného a vynásobena poètem kusù. Pokud budeme tento výpoèet potøebovat èastìji, možná by se nám na to mohla hodit nìjaká metoda. Abychom tak mohli uèinit musíme pøepsat funkci konstruktoru, kde definujeme metodu nazvanou celkem. Pro tuto novou metodu také zhotovíme funkci.
function Produkt(jmeno, idcislo, cena,
doprava, mnozstvi)
function celkem()
Formát v konstruktoru pro definování nové metody je this.jmenoMetody = jmenoFunkce. Není nutné, aby se jméno metody a funkce shodovalo, ovšem pro jasnost a srozumitelnost zápisu jsem použil stejné jméno. Nyní již mùžeme použít:
var prodCelkem= polozka1.celkem (); //metoda celkem nám spoète celkovou sumu za jeden prodaný výrobek
Èást 6 |
Práce s cookies |
Hned na úvod si dovolím poznamenat, že pøehnaný strach z cookies nemá opodstatnìní. Cookies se sice na disk ukládají bez vašeho vìdomí (mùžete si zapnout potvrzování), ale ukládají se do urèeného adresáøe a obsah takto uložené cookie si mùže zpìt vytáhnout jenom stránka, která ji stvoøila. O tom, že by cookies vykonaly nìjaký kód èi odesílaly informace z vašeho poèítaèe nemùže být ani øeè.
Teï, když jsem zahnal chmury mùžeme pokraèovat. Cookies jsou tedy cesta jak uložit urèité informace na uživatelovì poèítaèi, které mohou být získány zpìt nìkdy pozdìji. Toho mùžeme využít pro uložení vyplnìného formuláøe (jméno, pøíjmení nebo adresa), aby uživatel nemusel tyto informace vyplòovat nanovo, pøihlašovacích údajù (jméno, ID) nebo pøi individuálním nastavení stránky (napøíklad na Mobilmanii je pomocí cookies uložen váš kabátek).
Cookies se vytváøejí s použitím následujících informací:
jmeno=hodnota - Tento øetìzec reprezentuje jméno cookie a veškerá data pod tímto jménem uložená.
Expires - Datum, po kterém je informace v cookie stará a již nepotøebná. Pokud souèasné datum pøekroèí toto datum, cookie se automaticky smaže. Nezadá-li se žádná datum vypršení platnosti, je cookie smazána okamžitì po zavøení stránky.
Path - Parametry Path a Domain jsou použity z bezpeènostních dùvodù. Normálnì je cookie pøístupná pouze stránkám, které jsou ve stejném adresáøi jako stránka, která cookie vytvoøila. Pokud chceme cookie zpøístupnit i pro ostatní stránky, musíme to uvést v tomto parametru.
Domain - Obdoba parametru Path. Parametr zpøístupní cookies i stránkám z jiných domén.
Secure - Pokud je tento parametr nastaven na true, mohou být cookie zaslány pouze pomocí zabezpeèeného kanálu, SSL.
V nejvìtší vìtšinì pøípadù vystaèíme s parametry name a expires. Pro vytvoøení správného data vypršení platnosti cookie mùžeme využít objektu Date, èímž máme zaruèen i správný formát. Následující kód ukazuje, jak jednoduše nastavit datum pro vypršení cookie na urèitý poèet dní od souèasného data. Pouhou zmìnou hodnoty promìnné dny si mùžeme libovolnì zvolit poèet dní od souèasného data, kdy platnost cookie vyprší:
var dny = 7;
var denExp = new Date();
denExp.setTime (denExp.getTime() + (86400 * 1000 * dny));
Data cookie mùžeme ukládat a zpìtnì èíst pomocí vlastnosti document.cookie. Všechny cookie se shodnými hodnotami domain a path jsou na uživatelském disku ukládány do jednoho souboru a jsou uloženy v øetìzci vždy jako dvojice jméno=hodnota. Jednotlivé cookies jsou v tomto øetìzci oddìlena støedníkem a mezerou: jméno1=hodnota1; jméno2=hodnota2. Vyzkoušejte si ke kódu výše pøidat:
document.cookie = 'jmeno1 =
hodnota1; expires=' + denExp.toGMTString() + '; path=/';
document.cookie = 'jmeno2 = hodnota2; expires=' +
denExp.toGMTString() + '; path=/aaaa';
Na disku budou vytvoøeny dva soubory s cookies. Pokud napøíklad promìnná jmeno1 existuje je v souboru nahrazena stávající a pokud ne, pøidá se nové jméno promìnné a její hodnota na konec souboru.
Asi jste si všimli metody toGMTString, tato metoda nám zajišuje pøevod datumu na formát, kterému cookie bude rozumìt. Doba platnosti musí být totiž zadána v tomto formátu: Wdy, DD-Mon-YY HH:MM:SS GMT, kde mají jednotlivé znaky tento význam:
Wdy: jméno dne v týdnu anglicky (3 znaky),
DD: den v mìsíci (2 znaky),
Mon: mìsíc anglicky (3 znaky),
YY: rok (2 znaky),
HH: hodina,
MM: minuta,
SS: sekundy,
GMT: udává, že se jedná o èas na hvìzdárnì Greenwitch.
Obecnì použitelné funkce na cookies
Pøedvedeme si funkce, které nám usnadní práci s cookies. Tyto tøi funkce umí uložit, naèíst a smazat jakoukoliv cookie podle jména:
function ulozCookie (jmeno,
hodnota, vyprsi)
function nactiCookie(jmeno)
else
return '';
function smazCookie(jmeno)
escape() a unescape() jsou vestavìné funkce JavaScriptu, které konvertují speciální znaky do šestnáctkového systému. To proto, že pár jméno=hodnota nesmí obsahovat mezery, èárky, støedníky, dvojteèky nebo další znaky. Použitím funkce escape() mùžeme v hodnotì cookie používat jakékoliv znaky. Pokud chceme tuto hodnotu zpìtnì naèíst, pøevedem ji do èitelného tvaru pomocí funkce unescape().
K dobrým zpùsobùm patøí vymazat cookie, o které víme, že ji nebudeme potøebovat. Pøestože jsou cookie uloženy v malých souborech existují urèitá omezení. Maximální poèet cookie na jeden prohlížeè (Netscape) je 300 a na disk lze umístit maximálnì 20 cookies z jedné domény. Funkce smazCookie(jmeno) posune den platnosti cookie o jeden den pøed aktuální den. Tím se prohlížeèi sdìlí, že mùže tuto cookie vymazat. Vzpomeòte si na metody pro práci s datem z osmého dílu. Datum vypršení platnosti nastavíme pomocí metody setTime jejíž hodnota musí být zadána v milisekundách.
Hned na úvod si dovolím poznamenat, že tato kapitola spadá pod JavaScript verze 1.2. Pokud tedy chcete, aby vám skripty korektnì pracovaly musíte mít nainstalován Netscape Navigator nebo Internet Explorer verze 4.0 a vyšší èi jiný podobný prohlížeè.
Èást 7 |
Zachytávání událostí |
Po celou dobu výuky jsme pracovali s rùznými událostmi a na jejich ošetøení jsme používali správce události (pro jistotu pøipomenu, mouseover je událost, zatímco onmouseover je správce události). Internet Explorer nabízí možnost použít správce události skoro v každém HTML tagu. Netscape používá lehce odlišný pøístup. Pøestože podporuje také správce událostí pro mnoho HTML tagù nìkteré události musí být zachyceny odlišným zpùsobem než jsme zatím zvyklí. Napøíklad objekt window implicitnì mezachytává událost pro pohyb myši mousemove, a proto si ukážeme jak ho to naèit.
Zachytávání událostí v Netscapu
V prohlížeèi Netscape 4+ mùžeme zachytávat události objektù window, layer (NN6 nepodporuje) nebo document. Abychom toho docílili musíme použít metodu captureEvent() s definováním události kterou chceme zachytávat a následnì specifikovat funkci, která bude na událost reagovat. Zde je ukázka pro zachycení stisku tlaèítka myši u objektu window:
window.captureEvents(Event.CLICK);
window.document.onClick = klikMysi;
function klikMysi(udalost)
Nezapomeòte metodì captureEvents() pøedat definici události pro zachytávání, v našem pøípadì Event.CLICK. Objekt Event obsahuje informace o události a Event.CLICK je konstanta, která odkazuje na konkrétní typ události. Nìkteré tyto typy událostí jsou:
CLICK - když je kliknuto tlaèítko myši.
MOUSEDOWN - když je tlaèítko myši stisknuto.
MOUSEUP - pøi uvolnìní tlaèítka myši.
MOUSEMOVE - pokud se kurzor myši pohne.
KEYPRESS - když je stisknuta nìjaká klávesa.
KEYDOWN - pokud je klávesa stlaèena.
KEYUP - když je klávesa uvolnìna.
Pro Mozillu se jednotlivé konstanty lehce liší a mùžete je najít na Gecko DOM Reference. Pokud chceme zachytávat více událostí u jednoho objektu je nutné jednotlivé události oddìlit logickým operátorem OR (samozøejmì, že se dají požít i jiné logické operátory, ale jejich využití nevidím reálnì). V pøíkladu zachytáváme všechny stisky tlaèítka myši a klávesy:
window.captureEvents(Event.MOUSEDOWN
| Event.KEYDOWN);
window.document.onMouseDown = mysDole;
window.document.onKeyDown = klavesaDole;
Události v Internet Exploreru
V Internet Exploreru není události zachytávat. Obsahuje jeden spoleèný objekt pro události event jako vlastnost objektu window. Bohužel jsou vlastnosti tohoto objektu odlišné od Netscapu. Tímto velmi jednoduchým kódem si mùžeme nechat vypsat aktuální pozici kurzoru myši ve stavové lištì prohlížeèe:
<BODY onmousemove='window.status = `X=` + window.event.x + ` Y=` + window.event.y'>
Psaní skriptù pro více prohlížeèù
Jak už jsem naznaèil, narážíme na problém s nekompatibilitou skriptù pro rùzné prohlížeèe. Abychom docílill stejného efektu v rùzných prohlížeèích je nutné je nìjak o sebe odlišit (pro jednoduchost budu zatím uvažovat pouze IE a NN). Pokud tedy chceme odlišit od sebe IE a NN mùžeme použít test na objekt document.layers, který podporuje pouze Netscape a objekt document.all, který zase podporuje pouze Internet Explorer:
if (document.layers)
else if (document.all)
else
Pokud objekt neexistuje, je jeho hodnota null a na podmínku if je vrácena logická hodnota false. Pomocí nìjakého složitìjšího kódu tak mùžeme odlišit všechny typy prohlížeèù. Pøíklad ukazuje, jak zobrazovat aktuální souøadnice kurzoru myši pro v Intenet Exploreru, Netscapu a Mozille:
<html>
<head>
<title>Pohyb myši</title>
<script type='text/javascript'>
<!--
// Funkce konstruktoru pro zjištìní prohlížeèe.
function zj_prohlizec()
prohlizec =new zj_prohlizec() //Nový objekt pro
zjištìní prohlížeèe
var mouseX = 0;
var mouseY = 0;
// Nastavení zachytávání pro Netscape a Mozillu.
if (prohlizec.ns4 | prohlizec.ns6)
document.captureEvents(Event.MOUSEMOVE);
document.onmousemove = souradniceKurzoru; // inicializace
události jak pro NN, tak pro IE
function souradniceKurzoru(e)
if (prohlizec.minIE4)
window.status = mouseX + ',' + mouseY; //
Zobrazení souøadnic.
return true;
//-->
</script>
</head>
<body>
<font face='Arial,Helvetica,sans-serif'>Pokud
budete pohybovat myší, budou se souøadnice kurzoru zobrazovat dole ve
stavové lištì prohlížeèe.<p>Funguje v IE, NN a
Mozille.</font>
</body>
</html
Dnes bude øeè o základech regulárních výrazù a jejich možném využití v JavaScriptu.
Regulární výrazy obsahuje snad každý programovací jazyk a ani u JavaScriptu tomu není jinak. Tyto regulární výrazy pro JavaScript jsou odvozeny z Unixu, takže nìkteøí z vás je vlastnì možná už znají. V dnešním dílu si nastíníme co takové regulární výrazy jsou a jak nám mùžou usnadnit práci. Nebudu se rozepisovat o všech detailech, k tomu jsou referenèní pøíruèky a ani by se to jednoho dílu nevešlo.
Èást 8 |
Regulární výrazy |
Regulární výrazy mùžeme použít v JavaScriptu od verze 1.2 a slouží ke zpracování textových øetìzcù. Za pomoci regulárních výrazù si nastavíme masku a poté zjišujeme, zda daný textový øetìzec námi definované masce vyhovuje. Pokud má øetìzec vyhovìt musí obsahovat stejné znaky jako maska definovaná v regulárním výrazu. Napøíklad regulárnímu výrazu 'ahoj' vyhoví øetìzec 'ahoj' nebo 'zdar a ahoj' a spousta dalších.
Maska regulárního výrazu se v JavaScriptu uzavírá mezi zpìtná lomítka /maska/. Napøíklad: /abc/
Takto definovaný regulární výraz splòují napøíklad následující øetìzce:
'abcdef'
'defabc'
'_-_-abc-_-_'
Tyto øetìzce danou podmínku ovšem nesplòují:
'fedcabvc'
'ab c'
'JavaScript'
Za /masku/ použitou v regulárním výrazu mùžeme pøidat rùzné modifikátory, které nám porovnávání mùžou ovlivnit.
i - pøi porovnávání není brán zøetel na velikost písmen,
g - komplexní vyhledávání masky,
m - vyhledává na více øádcích.
Pøi definici masky regulárních výrazù se používají speciální znaky tzv. metaznaky, které nevyhledávají sami sebe, ale mají speciální význam. Napøíklad metaznak '^' oznaèuje zaèátek øetìzce a '$' naopak konec øetìzce. V tomto pøípadì regulárnímu výrazu '^abc' vyhoví pouze øetìzce zaèínající daným textem, napø. 'abc' nebo 'abcdef'. Narozdíl regulárnímu výrazu 'abc$' (metaznak '$' se zapisuje na konec výrazu) vyhoví pouze øetìzce konèící na zadaný text, napø. 'abc' nebo 'xxxabc'. Mezi další metaznaky patøí:
metaznak |
komentáø |
Hledaný výraz se nachází na konci øetìzce. |
|
Hledaný výraz se mùže opakovat kolikrát chce, avšak nemusí být pøítomný vùbec. Napø. regulárnímu výrazu '.*' vyhoví jakýkoli øetìzec, i prázdný, protože metaznak '.' zastupuje libovolný znak, který se mùže opakovat kolikrát chce, což nám vyjadøuje metaznak '*'. Pokud chcete vyhledávat znak * musíte použít *. |
|
Hledaný text nebo znak se vyskytuje alespoò jednou, dává se za znak èi výraz. Regulárnímu výrazu 'xa+b' proto vyhoví øetìzce 'xab', kde 'a' se mùže mezi 'x' a 'b' vyskytovat kolikrát chce, nejménì však jednou. A opìt, pokud chcete vyhledávat znak + musíte použít +. |
|
Nahrazuje jeden libovolný znak mimo znaku nového øádku. Takže regulárnímu výrazu 'a.a' vyhovují napø. øetìzce obsahující 'aaa', 'axa', ale i 'a a'. Pokud chcete vyhledat znak . použijte opìt . Dále to už uvádìt nebudu, ale toto pravidlo platí pro i pro všechny ostatní metaznaky. |
|
Oznaèuje zaèátek speciálních závorkových výrazù. Napøíklad [abc] znaèí, že v øetìzci se musí nacházet znak a,b nebo c. Samozøejmì tam mùžou být i všechny. [a-zA-Z] je výèet znakù pøedstavující všechna písmena. A napøíklad masce '[12345]0' nebo '[1-5]0' vyhoví pouze øetìzce obsahující 10, 20, 30, 40, 50. |
|
Výraz pøed tímto metaznakem se mùže opakovat nejvýše jednou. Regulárnímu výrazu 'xa?b' vyhoví pouze øetìzce obsahující 'xab' nebo 'xb', napøíklad 'axbs', protože mezi znaky 'x' a 'b' se mùže objevit nejvýše jeden znak 'a'. |
|
Potøebujeme-li použít metaznak v jeho pùvodním významu, vložíme pøed nìj zpìtné lomítko ''. Napøíklad chceme-li vyhledat øetìzec '+.?}[' musíme použít '+.?}['. |
|
Oznaèuje zaèátek øetìzce, hledaný výraz se zapisuje za tento metaznak. |
|
Výraz se vyskytuje minimálnì m krát, ale ne více než n krát. Napø. regulárnímu výrazu 'x' vyhoví øetìzce obsahující pìt až deset znakù 'x' zapsaných za sebou. |
|
Výraz se vyskytuje minimálnì n krát. Výrazu 'x' vyhoví øetìzce, kde se znak 'x' opakuje minimálnì 5 krát za sebou. |
|
Výraz se vyskytuje pøesnì n krát. |
|
*, + a ? |
Tyto metaznaky jsme si již pøedstavili. |
Další speciální znaky |
Pøedstavuje |
n |
Znak nového øádku. |
r |
Znak pro návrat na zaèátek øádky - CR. |
t |
Vyjadøuje znak tabulátoru. |
v |
Znak vertikálního tabulátoru. |
f |
Znak pro posun papíru - FF. |
d |
Èíslice (stejné jako |
D |
Vyjadøuje neèíselný výraz (stejné jako |
w |
Pøedstavuje abecednì-èíselné znaky (stejné jako [a-zA-Z_0-9] |
W |
Pøedstavuje neabecednì-neèíselné znaky (stejné jako [^a-zA-Z_0-9] |
s |
Vyjadøuje znak mezery (stejné jako [ tvnrf] |
S |
Vyjadøuje všechny znaky, ovšem ne mezery (stejné jako [^ tvnrf] |
Netscape a IE mají trošku odlišnou implementaci regulárních výrazù, ale následující zápis funguje v obou:
var mujRV = /maska/modifikátor;
Metoda test() porovnává vložený textový øetìzec s maskou regulárního výrazu a vrací true pokud podmínce vyhovuje. Následující pøíklad testuje e-mailovou adresu zadanou uživatelem:
<html>
<head>
<title>Zkontroluj e-mail</title>
<script type='text/javascript'>
<!--
// Funkce pro kontrolu e-mailové adresy.
function zkontrEmail(email) $/
if (re.test(email))
alert('Vyhovuje.');
else
alert('Nevyhovuje.');
//-->
</script>
</head>
<body bgcolor='#ffffff'>
<font face='Arial,Helvetica' size=2>
<!-- Formuláø pro e-mailovou adresu. -->
<b>Pøíklad použití regulárních
výrazù:</b>
<p>
Vložte e-mailovou edresu a stisknìte tlèítko
'Zkontroluj' pro test e-mailové adresy.
<p>
<form>
E-mail:
<font size=3><input name='email'
type='text' size=10></font>
<!-- zkontroluj vstup po kliknutí na tlaèítko.
-->
<input type='button'
value='Zkontroluj'
onClick='zkontrEmail(this.form.email.value);'>
</form>
</font>
</body>
</html>
Toto je pouze základ regulárních výrazù, a pokud se chcete dozvìdìt více navštivte stránky Microsoftu nebo Netscapu.
Dnešní poslední výuková lekce bude vìnována lehkému úvodu do DHTML. Øekneme si co zkratka DHTML znamená a z èeho se takové DHTML skládá.
Minule jsme si ukázali nìco z regulárních výrazù. Doufám, že nastínìní toho co to jsou regulární výrazy s ukázkou použití vám jasnì ukázalo jejich možnosti. Musím podotknout, že tyto možnosti jsou daleko vìtší než se do èlánku vešlo. Dnes výuku završím struèným úvodem do DHTML. Úplnì poslední díl akorát pøinese utøídìný seznam rùzných zdrojù na internetu týkající se problematiky, o které jsme tu dva mìsíce hovoøili.
Èást 9 |
DHTML |
Je dobré si uvìdomit, že DHTML je pouze zkratka pro výraz 'Dynamic HTML'. Tato zkratka se tak ustálila, že se nyní pro dynamické stránky bìžnì používá, ale DHTML jinak neexistuje. Není to žádná 'vìc' ani standard definovaný konsorciem World Wide Web Consortium (W3C). DHTML není definováno nikde.
Dynamické HTML je ve skuteènosti kombinace CSS (cascading style sheets), DOM (document object model), skriptovacích jazykù (Javascript nebo VBscript) a HTML. DHTML tedy není žádný nový jazyk, je to smìsice všech výše jmenovaných technologií. Èím více budete umìt tyto technologie, tím budete lepší v DHTML.
Tak, co to tedy je? Dynamické HTML je jednoduše standardní HTML, které se mùže mìnit poté co je již stránka naètena v prohlížeèi. Jednoduché dynamické prvky na stránce jsem si v prùbìhu seriálu už vytvoøili, napøíklad zmìna obrázku nebo textu po najetí kurzorem myši. Mezi jiné efekty, které jste již jistì taky vidìli napøíklad patøí pohyb nìjakého prvku za kurzorem myši nebo posun obrázku po obrazovce a mnoho dalších. Vše co v HTML na stránce vytvoøíme mùžeme následnì pomocí DHTML mìnit.
Jednotlivé èásti DHTML
Jak už jsme si nìkolikrát øekli zkratka DHTML není žádná 'vìc' ani standard a jde pouze o kombinaci nìkolika technologií.
CSS
Možná jste se s touto zkratkou již setkali. Pokud, ale nevíte co znamená, pokusím se ve struènosti vysvìtlit.
Nezkrácenì to je Cascading Style Sheets. CSS bylo uvedeno na konci roku 1996 a dalo by se øíci, že jeho uvedení znamenalo prùlom v dosavadním pojetí HTML. V pùvodní verzi HTML se totiž veškerý text formátoval na stránce pomocí HTML tagù jako H1, FONT, B, I a ostatních bez možnosti pøeddefinování. S uvedením stylù se tato situace zmìnila. Za pomoci CSS si definujeme nìkolik stylù s jejich parametry v úvodu webové stránky nebo v externím souboru a pak se na nì pouze odkazujeme. Výhod z toho plynoucích je mnoho. Pøíkladnì, potøebujeme zmìnit veškeré nadpisy èlánkù, které máme definovány napøíklad takto:
<font face='Verdana,Geneva,Arial,Helvetica,sans-serif' size='5' color='#0000FF'><B>NADPIS</B></font>
Procházet všechny soubory, které tvoøí naše stránky a hledat tyto tagy by zabralo hodnì èasu. U CSS zmìníme pouze jeden externí soubor a je vystaráno. V souboru s definicí CSS se zmìní hodnoty stylu definující nadpis èlánku:
.nadpis
Tato zmìna se projeví okamžitì na všech stránkách. Z toho dùvodu je daleko lepší využívat pro definici CSS externí soubor, definování v úvodu každé stránky ztrácí na efektivnosti.
CSS tedy slouží k modifikaci stylù, které v HTML již existují (napø. H1, P, CODE, atd.) a k vytváøení zcela nových stylù s novými parametry. Formátovací možnosti CSS jsou velice bohaté, což usnadòuje návrh stránek pøesnì podle našich pøedstav.
Styly jako první uvedla firma Microsoft a implementovala do Internet Exploreru 3.0. Prohlížeèe uvedené na trh od roku 1997 styly ve verzi Level 1 v naprosté vìtšinì podporují. Souèasné moderní prohlížeèe zahrnují i podporu CSS2.
Teï si jistì øíkáte, co znamená ono Level 1. V souèasnosti existují dvì specifikace stylù, starší CSS1 (level 1) z 16.prosince 1996 a novìjší CSS2 (level 2) z 12.kvìtna 1998. Rùzné verze prohlížeèù tyto specifikace ještì doplòují o své vlastní definice. Trošku zmatek, bohužel ucelený seriál, který by vše objasnil na Živì doposud nevyšel. Tøeba to nìkdy napravím :)
DOM
V souèasné dobì vychází o DOM na Živì seriál, takže pouze ve struènosti. Document Object Model je v podstatì vazba mezi použitým skriptovacím jazykem a prvky na stránce. DOM je vlastnì hierarchie elementù na stránce, které jsou reprezentovány prohlížeèem. S pomocí DOM mùžeme snadno pøistupovat k jednotlivým elementùm na stránce, mìnit je nebo pøidávat nové. Pro práci s DOM bylo pøidáno urèité rozšíøení i do JavaScriptu. Bohužel, jak už jsem psal o kompatibilitì mezi jednotlivými prohlížeèi a skripty, zde se s tímto problémem opìt urèitì setkáte.
Napøíklad pokud vytvoøíme na stránce element s pøesným urèením pozice:
<div id='divID' style=' left:50; top:100; background-color: ThreedLightShadow;'>Text uzavøený v tagu DIV.</div>
V rùzných verzích prohlížeèù se k nìmu pøistupujeme rùznými zpùsoby:
V Netscapu (NN4+):
mujDIV = document.layers['divID'];
V IE (IE4):
mujDIV = document.all['divID'];
Pokud prohlížeè podporuje standard W3C, nejlepší zpùsob je (IE 5+, NN6+):
mujDIV = document.getElementById('divID');
Pokud chceme tento element ovlivòovat, také záleží na verzi prohlížeèe. Chceme-li napøíklad nìjaký element skrýt:
V Netscapu (NN4+):
document.layers['divID'].visibility
= 'hide';
// mujDIV.visibility = 'hide';
Další rozdíl nastane
pøi použití NN6, kde se již 'hide' a 'show' nepoužívá
a namísto toho musíte použít 'hidden' a 'visible'.
V IE (IE4):
document.all['divID'].style.visibility
= 'hidden';
// mujDIV.visibility = ' hidden ';
A nakonec opìt podle doporuèeného standardu W3C (IE 5+, NN6+):
document.getElementById('divID').style.visibility
= 'hidden';
// mujDIV.visibility = ' hidden ';
Vidíte, že nastává pìkný zmatek a to ještì zdaleka nejsou všechny odlišnosti.
Skriptovací jazyk
O tom snad nemusím nic psát, o jeho vysvìtlení se snažím již osmnáct dílù. Snad jen to, že v DHTML nemusíte používat pouze JavaScript, ale mùžete použít i VBScript. Zde ovšem budete omezeni pouze na IE, jelikož ostatní prohlížeèe VBScript nepodporují.
HTML
Pokud jste doèetli až sem asi vám HyperText Markup Language (HTML) jehož prostøednictvím mùžete vytváøet webové stránky nemusím pøedstavovat. Znovu si jen dovolím pøipomenout, že na Živì již vyšel pìtadvacetidílný seriál o tomto jazyku.
Krátký pøíklad na rozlouèenou, který mìní pozici elementu DIV na stránce ve ètyøech smìrech (testováno na prohlížeèích IE 5.5 a 6.0, NN 4.51 a 6.1, Mozilla 0.9.4 a Opera 5.12):
<html>
<head>
<title>Zmìna pozice elementu</title>
<meta http-equiv='Content-Type'
content='text/html; charset=windows-1250'>
</head>
<body>
<div id='blok1' style='
left:10; top:300; background-color: Silver;'>Text uzavøený v tagu
DIV.</div>
<script type='text/javascript'>
<!--
// Funkce pro pohyb elementu DIV po stránce.
function posunBlok(x, y)
// NN4+
else if (document.layers)
// IE4
else if (document.all)
// Funkce pro získání elementu podle verze prohlížeèe.
function ziskejEL(jmeno)
//-->
</script>
<form>
<table border='0' cellspacing='0'
cellpadding='0'>
<tr align=center>
<td> </td>
<td><input type='button'
value='nahoru' onClick='posunBlok(0, -10);'></td>
<td> </td>
</tr>
<tr align=center>
<td><input type='button'
value='vlevo' onClick='posunBlok(-10, 0);'></td>
<td> </td>
<td><input type='button'
value='vpravo' onClick='posunBlok(10, 0);'></td>
</tr>
<tr align=center>
<td> </td>
<td><input type='button'
value='dolù' onClick='posunBlok(0,
10);'></td>
<td> </td>
</tr>
</table>
</form>
</body>
</html>
Tím je výuka JavaScriptu skonèena. Snad jste si nìco odnesli a budete se k tomuto seriálu rádi vracet.
Politica de confidentialitate | Termeni si conditii de utilizare |
Vizualizari: 1213
Importanta:
Termeni si conditii de utilizare | Contact
© SCRIGROUP 2025 . All rights reserved