Documente Academic
Documente Profesional
Documente Cultură
Javascript
Javascript
CUPRINS
Conversaia 1. JavaScript i HTML 4.0, XHTML i XML ........................ 3
Stilul de via Web
De ce JavaScript i Java au nume att de apropiate?
Ce putei realiza cu JavaScript?
Ce nu putei realiza cu JavaScript?
Terminologia JavaScript
Conceptele programrii JavaScript
Cum inserai un script n documentele (X)HTML, Dreamweaver MX i XML?
EXEMPLUL 1 JAVASCRIPT
Oferta de editoare JavaScript
Resursele JavaScript de care avei nevoie
Versiunile JavaScript
Tem
Conversaia 2. Variabile i funcii ........................................................... 33
Tipurile de date i valorile speciale JavaScript
Variabile i funcii. Aplicaii
Crearea automat a script-urilor cu Dreamweaver MX
EXEMPLUL 2 JAVASCRIPT
Cuvinte rezervate JavaScript
Tem
Conversaia 2 (continuare). Operatorii JavaScript. Obiecte
matematice .................................................. 57
Operatorii JavaScript
Asociativitatea i prioritatea operatorilor
Obiectul Math
Obiectul Number
Obiectul Boolean
EXEMPLUL 2 JAVASCRIPT (continuare)
Tem
Conversaia 3. Instruciunile limbajului JavaScript ............................... 91
Tipuri de instruciuni JavaScript
for. Aplicaii
EXEMPLUL 3.1 JAVASCRIPT
while. Aplicaii
EXEMPLUL 3.2 JAVASCRIPT
do ... while. Aplicaii
EXEMPLUL 3.3 JAVASCRIPT
for ... in. Aplicaii
if, if...else, switch. Aplicaii
EXEMPLUL 3.4 JAVASCRIPT
Instruciunile continue i break
Instruciunea with
Tem
Conversaia 4. Obiectele interne String, Array ...................................... 123
Obiectele limbajului JavaScript. Prezentare general
Obiectele interne
Obiectul String. Aplicaii
Obiectul Array. Aplicaii
EXEMPLUL 4 JAVASCRIPT
Tem
Conversaia 5. Obiectele (interne) RegExp, Date, Arguments .............. 153
Expresii regulate
Obiectul RegExp. Aplicaii
EXEMPLUL 5 JAVASCRIPT
Obiectul Date. Aplicaii
Obiectul Arguments. Aplicaii
Tem
Conversaia 6. Gestionarii de evenimente JavaScript .......................... 189
Evenimente i gestionari de evenimente
Gestionarii de evenimente JavaScript
Aplicaii
Tem
Conversaia 7. Obiectele navigatorului .................................................. 211
Document Object Model (DOM)
Obiectul Window. Aplicaii
Obiecte de nivelul 1
Obiecte de nivelul al doilea
Obiecte de nivelul al treilea
Obiecte de nivelul al patrulea
Obiectul Navigator. Aplicaii
Tem
Conversaia 8. Obiectul Form. Validarea formularelor ......................... 273
Obiectul Form. Aplicaii
(Sub)Obiectele Form. Aplicaii
Validai un formular cu JavaScript. Aplicaii
EXEMPLUL 8 JAVASCRIPT (varianta 1)
EXEMPLUL 8 JAVASCRIPT (varianta 2)
Tem
Conversaia 9. Obiectul Image ................................................................ 343
Obiectul Image. Aplicaii
Creai un rollover cu JavaScript
Creai un joc cu JavaScript
Creai animaii simple cu JavaScript
Creai imagini reactive (client) cu JavaScript. Aplicaii
EXEMPLUL 9 JAVASCRIPT
Tem
Conversaia 10. Obiectele Frame i Layer ............................................. 377
Obiectele Frame
EXEMPLUL 10.1 JAVASCRIPT
Obiectul Layer. Aplicaii
EXEMPLUL 10.2 JAVASCRIPT
Tem
Conversaia 11. Depanarea aplicaiilor JavaScript ............................... 403
Tipuri de erori JavaScript. Aplicaii
Tehnici de depanare a script-urilor
Instrumente pentru depanarea script-urilor. Aplicaii
Instruciunile throw i try catch. Aplicaii
Tem
Conversaia 12. Crearea obiectelor personalizate ................................ 427
Utilizarea obiectelor personalizate pentru simplificarea script-urilor
Definii un obiect
Definii o metod pentru un obiect
Creai o instan a unui obiect
Aplicaii
EXEMPLUL 12 JAVASCRIPT
Tem
Bibliografie .............................................................................................. 459
t t
Conversaia 1
JavaScript i HTML 4.0, XHTML, XML
n aceast conversaie:
Stilul de via Web
De ce JavaScript i Java au nume at de apropia e?
Ce pute i realiza cu JavaScript?
Ce nu pute i realiza cu JavaScript?
Terminologia JavaScript
Conceptele programrii JavaScript
Cum insera i un script n documen ele (X)HTML, Dreamweaver MX i XML?
EXEMPLUL 1 JAVASCRIPT
Oferta de editoare JavaScript
Resursele JavaScript de care ave i nevoie
Versiunile JavaScript
Tem
Stilul de via Web
Oamenii i companiile de pretutindeni se bazeaz din ce n ce mai mult pe Web
pentru a-i rezolva problemele zilnice. Disponibilitatea crescut i varietatea
funciilor i serviciilor online au dus la nfiinarea stilului de via Web, iar
Web-ul devine ncet, ncet o parte integrant a vieii noastre personale i
profesionale.
Natura interactiv a World Web face posibil existena stilului de via Web.
Cum pot fi fcute paginile Web interactive?
n principal, exist trei niveluri de interactivitate:
4
Elementele hiperlink Cel mai simplu nivel de interactivitate pe
care l ofer Web-ul.
Interactivitatea funcional Se refer la abilitatea de a executa sarcini
specifice i funcii ntr-un site Web.
Interactivitatea comunitar Permite vizitatorilor s se ntlneasc i s
interacioneze unul cu altul. Interactivitatea
comunitar este adesea considerat o
strategie promoional online.
Interactivitatea v oblig s apelai la un limbaj de programare sau un limbaj de
script.
Limbajele de script destinate Web-ului permit combinarea script-urilor i a
instruciunilor (X)HTML pentru a crea pagini Web interactive.
Care este deosebirea ntre un limbaj de script i un limbaj de programare?
Totul depinde de cel cruia v adresai: noi vorbim n aceast carte de limbajul
de script JavaScript, dar nimeni nu v mpiedic s menionai n CV-ul
dumneavoastr, n lista de limbaje pe care le cunoatei i limbajul de
programare JavaScript, evident dup ce ai terminat de citit aceast carte!
JavaScript nu este singurul limbaj pentru Web.
Java, un limbaj de programare orientat obiect creat de Sun, de exemplu, n
anumite situaii este mult mai bun dect JavaScript. Chiar dac numele lor i
cteva instruciuni se aseamn, Java i JavaScript sunt limbaje total diferite.
VB Script (Visual Basic Scripting Edition) este rspunsul lui Microsoft la
JavaScript. Ca i JavaScript, VB Script este un limbaj de script simplu. El are la
baz sintaxa Visual Basic, un limbaj de programare Windows foarte
rspndit. Script-urile VB Script pot fi direct incluse n documentele (X)HTML.
VB Script prezint mari avantaje pentru cei care cunosc deja Visual Basic.
VB Script poate fi de asemenea integrat cu Active X, standardul Microsoft
pentru integrarea aplicaiilor n paginile Web.
5
Nu este nimic grav dac nu tii s rspundei la aceast ntrebare! Cu toii tim
c Java este numele unei insule din Indonezia, dar JavaScript? JavaScript i
Java sunt dou limbaje pentru Web. De ce numele lor sunt att de apropiate?
Cel puin trei ar putea fi rspunsurile la aceast ntrebare, pe care v invitm s
le analizai i apoi s decidei!
1. JavaScript este o versiune simplificat a limbajului Java.
2. Sintaxa limbajului JavaScript este parial inspirat din cea a limbajului
Java.
3. Cele dou limbaje provin din insula Java.
Rspunsul corect este 2: Sintaxa limbajului JavaScript este
parial inspirat din cea a limbajului Java. S m explic.
n ciuda tuturor aparenelor, JavaScript i Java sunt diferite. Din cauza
asemnrii de nume numeroi sunt cei care cred c JavaScript nu este dect o
versiune simplificat a limbajului Java (1). Aceasta este fals. Java i JavaScript
sunt dou tehnologii separate avnd doar numele i originea apropiate.
Sintaxa limbajului JavaScript este parial inspirat din cea a limbajului Java (2).
Diferena esenial ntre cele dou limbaje este aceea c spre deosebire de
JavaScript, Java permite crearea de aplicaii autonome.
Remarc. Java este numele unei insule din Indonezia, dar el nseamn de asemenea cafea n
vorbirea curent american. Logo-ul limbajului de programare Java este o ceac de cafea cald
(un detaliu amuzant, nu-i aa?).
De ce JavaScript i Java au nume att de apropiate?
Ce putei realiza cu JavaScript?
JavaScript este limbajul favorit al creatorilor de site-uri Web deoarece:
este un limbaj uor de nvat;
6
sunt suficiente cteva linii de cod pentru a mri gradul de interactivitate
al paginilor Web;
este un limbaj care poate fi interpretat de browser-e;
programele JavaScript pot fi incluse direct n documentele (X)HTML.
Limbajul JavaScript poate servi la:
generarea paginilor Web personalizate i modificarea dinamic a
prezentrii lor;
realizarea calculelor matematice;
validarea coninutului unui formular;
comunicarea cu applet-urile Java;
crearea animaiilor personalizate;
afiarea unor mesaje care defileaz n bara de stare a navigatorului;
afiarea unor mesaje ntr-o pagin Web sau ntr-o caset de dialog;
crearea unor butoane animate;
identificarea navigatorului n care se afieaz pagina Web;
executarea funciilor clasice ale unui limbaj de programare.
Evident, aceast list nu este exhaustiv; mai exist numeroase aplicaii posibile
n JavaScript. Multe dintre acestea le vom descoperi mpreun!
Remarc. Utilizarea limbajului JavaScript nu este limitat doar la navigatoarele Web. Exist
versiuni server JavaScript (de exemplu, Live Wise sau Server Side JavaScript pentru navigatorul
Netscape) care permit scrierea de programe JavaScript capabile de a executa, de exemplu
accesul la o baz de date n vederea afirii informaiilor ntr-o pagin Web.
Desigur, JavaScript nu este perfect. Cine este perfect! Dei JavaScript este
puternic, el este limitat de restricii severe impuse de navigatoarele Web, dup
cum urmeaz.
Din motive de securitate,
JavaScript nu poate citi, scrie, crea i terge fiiere de pe hard disc;
JavaScript nu poate executa operaii n reea;
Ce nu putei realiza cu JavaScript?
7
JavaScript nu poate crea aplicaii autonome. Pentru a scrie astfel de
aplicaii va trebui s utilizai unul din limbajele clasice: Java, C sau C++.
Pentru a lucra cu limbajul JavaScript, va trebui s v familiarizai cu termenii i
conceptele prezentate n cele ce urmeaz: Obiect; Proprietate;
Metod; Instruciune; Funcie; Eveniment; Gestionar de
evenimente; Variabil.
S facem cunotin cu fiecare, narmndu-v cu rbdare i nu doar att!
Obiect
Desigur dumneavoastr tii foarte bine ce este un obiect cel puin din viaa
cotidian.
Este o entitate cu parte ntreag, ca de exemplu o minge de volei, o main etc.
n JavaScript, window este un obiect, window este o fereastr a navigatorului.
Pagina Web este de asemenea un obiect. Fiecare element al unui document
(X)HTML este la rndul lui un obiect: paragrafe, formulare, tablouri, imagini,
link-uri etc. Exemplele pot continua.
n JavaScript exist trei tipuri de obiecte:
1. obiecte interne furnizate de limbajul JavaScript (vezi Conversaiile 2,
4, 5): Arguments, Array, Boolean, Date, Function,
Math, Number, Object, RegExp, String, This.
2. obiecte personalizate, create de utilizator n funcie de cerinele
script-urilor (vezi Conversaia 12);
3. obiectele navigatorului (vezi Conversaiile 7, 8, 9, 10) sunt exterioare
limbajului dar sunt recunoscute de browser-e. Reprezint diferite
componente ale navigatorului i ale documentului (X)HTML curent.
Terminologia JavaScript
8
Standardul DOM (Document Object Model) definete obiectele
navigatorului n mod ierarhic, dup cum urmeaz: Window,
Document, Navigator, Event, Screen, History i
Location.
Lista obiectelor navigatorului (n ordine alfabetic) este urmtoarea:
button, checkbox, document, event, fileUpload,
form, hidden, history, location, MimeType,
navigator, Objects (n general), option,
Option(), password, plugins, radio, reset,
screen, select, submit, text, textarea,
window.
Remarc. n JavaScript obiectele sunt considerate ca substantive.
Proprietate
O proprietate descrie un obiect.
Culoarea reprezint unul din atributele (proprietile) obiectului main. Poate
avea valoarea bleu.
n JavaScript height este o proprietate a obiectului window. De exemplu, ea
poate avea ca valoare 200.
O proprietate poate fi de asemenea un obiect care la rndul lui dispune de
proprieti. De exemplu, farurile sunt proprieti ale obiectului main. Dar
acestea sunt de asemenea obiecte care pot avea diverse proprieti: form,
culoare, putere.
n JavaScript, document este o proprietate a obiectului Window i este n
egal msur un obiect care are de asemenea proprieti.
n figura 1.1 sunt prezentate cteva exemple de proprieti ale unor obiecte
interne JavaScript (vezi Conversaiile 2 i 4).
Denumire obiect intern Proprieti
Array length
Math E, LN10, LN2, LOG10E, LOG2E, PI, SQRT1_2,
SQRT
String length
Figura 1.1
9
n figura 1.2 sunt prezentate cteva exemple de proprieti ale unor obiecte ale
navigatorului (Conversaia 7).
Denumire obiect navigator Proprieti
Button align, defaultValue, disabled, form,
name, size, type, value
Checkbox align, checked, defaultchecked,
defaultValue, disabled, form, name, size,
status, type, value, width
Form acceptcharset, action, elements[],
encoding, enctype, length, method, name,
target
Remarc. n JavaScript proprietile sunt considerate ca adjective.
Metod
O metod este o funcie care definete un anumit comportament caracteristic al
unui obiect.
Metodele disponibile pentru fiecare obiect descriu ceea ce putei face cu acest
obiect.
Metoda deschide a obiectului maina are ca funcie deschiderea uilor.
n JavaScript, metoda close() a obiectului window are ca funcie nchiderea
ferestrei.
Fiecare obiect posed o colecie de metode, iar fiecare metod aparine cel puin
unui obiect.
n figura 1.3 sunt prezentate cteva exemple de metode ale unor obiecte interne
(vezi Conversaiile 2 i 4).
Denumire obiect intern Metode
Array concat(), join(), pop(), push(),
reverse(), shift(), slice(), sort(),
splice(), toString(), unShift()
Math abs(), acos(), asn(), atan(), ceil(),
cos(), exp(), floar(), log(), max(),
min(), pow(), random(), round(), sin(),
sqrt(), tan()
Figura 1.2
Figura 1.3
10
n figura 1.4 sunt prezentate cteva exemple de metode ale unor obiecte ale
navigatorului (vezi Conversaia 7).
Denumire obiect navigator Metode
Button blur(), click(), focus()
Checkbox blur(), click(), focus()
Remarc. n JavaScript metodele sunt considerate ca verbe.
Instruciune
O instruciune produce o aciune (afiarea unui text, modificarea proprietii unui
obiect, atribuirea unei variabile a unui nou coninut). Instruciunile combin
obiecte, proprieti i metode (substantive, adjective i verbe).
n figura 1.5 este prezentat un exemplu de script care conine instruciuni simple
JavaScript.
<script language = JavaScript type = text/JavaScript>
a=4;
b=13;
c=a+b;
document.write (Suma: +c);
</script>
Figura 1.4
Figura 1.5
Remarc. Instruciunile limbajului JavaScript sunt prezentate n Conversaia 3.
Funcie
O funcie este un grup de instruciuni tratate ca o singur entitate. Sau, o funcie
este un obiect care conine cod executabil. Spre deosebire de metode, funciile
nu sunt asociate nici unui obiect particular. Funciile pot fi comparate cu
electronii liberi care pot fi reutilizai n orice circumstan. Numeroase funcii
sunt interne: ele sunt incluse n limbajul JavaScript (Exemple: eval();
parseFloat(); parseInt()).
Nu trebuie s v surprind urmtoarea afirmaie: chiar dumneavoastr pute i s
v crea i propriile func ii!
Ceea ce este nemaipomenit!
n figura 1.6 se prezint un exemplu de funcie definit de utilizator: calculul
diametrului unui cerc de raz r.
11
<script language = JavaScript>
function diametru (r)
{
temp = 2*r;
return temp;
}
</script>
Figura 1.6
Remarc. Funciile sunt tratate n detaliu n Conversaia 2.
Evenimente
Un eveniment este ceva care se ntmpl.
n sens larg, informaiile pe care le notai n agenda dumneavoastr (Or la
dentist, Aniversarea lui Droopy, Ziua efului) sunt evenimente.
Diferite evenimente pot fi imprevizibile: contravenie pentru depire viteza
legal n localitate; o nunt cu dar la rudele nevestii; vizita neateptat a
soacrei etc.
Dac aceste evenimente sunt prevzute sau nu, este problema dumneavoastr
de a le gestiona. Gestiunea evenimentului Aniversarea lui Droopy va consta
probabil n a-i cumpra un cadou. Ct privete vizita soacrei reacia
dumneavoastr poate fi una normal: stinge i lumina pentru a demonstra c nu
sunte i acas!
Conversaia 3
Instruciunile limbajului JavaScript
n aceast conversaie:
Tipuri de ins ruc iuni JavaScript
for. Aplica ii
EXEMPLUL 3 1 JAVASCRIPT
while. Aplica ii
EXEMPLUL 3 2 JAVASCRIPT
do ... while. Aplica ii
EXEMPLUL 3 3 JAVASCRIPT
for ... in. Aplica ii
if, if...else, switch. Aplica ii
EXEMPLUL 3 4 JAVASCRIPT
Instruc iunile continue i break
Instruc iunea with
Tem
Instruciunile limbajului JavaScript
JavaScript este un limbaj de nivel nalt, bazat pe obiecte, care permite
programatorilor s creeze cu uurin documente (pagini) Web interactive.
Instruciunile limbajului JavaScript sunt uor de neles i aplicat. Ele piloteaz
script-ul, permindu-i s ia o decizie, s creeze bucle (iteraii) etc.
Cea mai mare parte a instruciunilor JavaScript sunt recunoscute de toate
navigatoarele, dar ... mai exist i divergene!
92
Pentru a programa n limbajul JavaScript folosii urmtoarele tipuri de instruciuni
(vezi figura 3.1).
Tipuri de instruciuni Instruciuni JavaScript
iteraii (cicluri) for, for...in, while,
do...while
decizii if, if...else, switch
documentarea script-urilor /*...*/, //
funcii function(), return
generarea unei erori, testarea unei
poriuni de cod i interceptarea
eventualelor erori
throw i try...catch
declararea unei variabile var
simplificarea efortului de programare
(reducerea codului)
with
instruciunile break, continue
Iteraii
Figura 3.1
n limbajul JavaScript, iteraiile (repetiiile) se codific cu una din urmtoarele
instruciuni:
for (pentru) structur de iteraie cu numr cunoscut de pai;
for...in structur de tip for care permite baleierea tuturor
elementelor unei matrici sau ale unui obiect;
while (ct timp) structur de iteraie cu numr necunoscut de pai,
condiionat anterior;
do...while structur de tip while, condiionat posterior.
for (pentru)
Utilizai instruciunea for pentru a crea cicluri (bucle) n programele
dumneavoastr JavaScript. Instruciunea for este folosit pentru a repeta o
instruciune sau o secven de instruciuni ct timp rezultatul evalurii unei
condiii este TRUE.
93
Instruciunea for este prezentat n detaliu n figura 3.2.
Instruciune Sintax
for for(ExpresieIniial;CondiieContinuare;
ExpresieFinal){
cod JavaScript
}
unde,
ExpresieIni ial este expresia de iniializare a variabilei de
control a instruciunii;
Condi ieContinuare este cel de-al doilea parametru al
instruc
Mai multe despre for
Figura 3.2
for conine trei parametrii separai prin punct i virgul.
94
Cei trei parametrii ai instruciunii for sunt opionali; dac omitei unul
dintre ei, separatorul punct i virgul (;) este obligatoriu.
Acoladele nu sunt indispensabile n iteraiile care conin o singur
instruciune, dar se recomand s le folosii fr a ine cont de numrul
de instruciuni din corpul iteraiei. Procednd n acest mod vei putea
aduga cu uurin noi instruciuni fr a provoca erori de sintax.
Vei constata c utilizm foarte des numele de variabil i, ca identificator
al variabilei de control. Este o tradiie (vezi limbajul Forth) n
programare.
Instruciunile for pot fi imbricate (suprapuse) dar nu trebuie s se
intersecteze.
Principiul de funcionare al instruciunii for este urmtorul:
1. Se iniializeaz variabila de control a instruciunii (ExpresieIni ial).
t
r
2. Se testeaz Condi ieCon inuare.
3. Dac rezultatul evalurii Condi ieContinuare este true se execut
instruciunile din corpul buclei; n caz contrar script-ul execut
instruciunea imediat urmtoare dup acolada de sfrit (}).
4. Se execut Exp esieFinal i se testeaz CondiieContinuare.
Pentru a provoca o ieire imediat din bucla for folosii instruciunea
break.
Pentru a relua ciclul fr a mai fi executate instruciunile care urmeaz
folosii instruciunea Continue.
EXEMPLUL 3.1 JAVASCRIPT
Formularea problemei
Vom relua problema din conversaia precedent (vezi EXEMPLUL 2 JAVASCRIPT)
considernd de aceast dat mai multe rezervoare cilindrice echilaterale (generatoarea
este egal cu diametrul) toate pline cu benzin. Raza acestora variaz de la 2 la 10 m
(vezi figura 3.3) cu pasul 1 (2, 3, ..., 10 m).
Dorim s calculm i s afim ntr-o pagin Web cantitatea de lichid (benzin) din cele
nou rezervoare cilindrice echilaterale, iar n final s afim cantitatea total de benzin
din toate rezervoarele.
95
Densitatea benzinei (0.7 g/cm
3
) se va introduce n mod dinamic.
Cum s-ar putea rezolva aceast problem?
Cei mai grbii dintre dumneavoastr se i gndesc deja la instruciunile JavaScript
necesare scrierii script-ului.
Banal, extrem de banal vor exclama poate muli dintre dumneavoastr!
Formulele de calcul pot constitui un impediment, dar vi le vom aminti noi:
V
m
= (1)
unde, este densitatea, m reprezint masa, iar V este volumul.
G R V *
2
= (2)
unde, G este generatoarea cilindrului.
3 2
2 2 * R R R V = = (3)
unde, V este volumul cilindrului echilateral.
Cam multe formule, dintr-o dat!
Este adevrat, dar cu siguran c ele nu v vor strica viaa personal! Promitem!
Remarc. A gndi n limbaj informatic (JavaScript) nc de la formularea problemei ni se pare o
concepie total greit! V propunem metodologia de analiz, proiectare i realizare a aplicaiilor
pe care v-am prezentat-o n Conversaia precedent.
Analiza problemei
Formatul datelor de ieire (fereastra n care se afieaz pagina Web), tabela de variabile
i specificaiile de programare sunt ilustrate n figurile: 3.3, 3.4, 3.5.
Formatul datelor de ieire
RAZA MASA
2
3
.
.
.
10
XXX.XX
XXX.XX
.
.
.
XXX.XX
MASA TOTALA XXX.XX TONE
Tabela de variabile
Variabile de intrare Variabile de stare Variabile de iesire
Figura 3.3
Figura 3.4
96
d: densitatea benzinei v: volumul cilindrului echilateral
r: raza rezervorului
s: masa total de benzin
m: masa de benzin
Specificaii de programare
Descriere. Script-ul calculeaz i afieaz cantitatea de benzin din mai multe
rezervoare cilindrice echilaterale a cror raz variaz de la 2 la 10 m, cu pasul de 1 m.
Intrri. Densitatea benzinei (0.7 g/cm
3
).
Ieiri. Masa de benzin din fiecare rezervor i masa total de benzin.
Lista de funciuni ale script-ului
1. Citete densitate benzin (d)
2. Iniializeaz variabila s cu zero
3. Tiprete cap tabel
4. Calculeaz volumul rezervorului (V)
5. Calculeaz masa (m) de benzin din
fiecare rezervor
6. nsumeaz m n s
7. Afieaz raza (r) i masa rezervorului
(m)
8. Iniializeaz variabila de control a
buclei (r)
9. Incrementeaz i testeaz variabila
de control a buclei (r)
10. Afieaz masa total de benzin (s)
11. Stop
Proiectarea script-ului
Vom folosi pentru proiectarea script-ului cele dou variante de pseudocod (vezi
Conversaia 2):
Varianta 1 limbaj natural structurat;
Varianta 2 scriere formalizat (apropiat de limbajul JavaScript).
Varianta 1
n figura 3.6 se prezint pseudocodul n limbajul natural structurat (Varianta 1).
Pseudocodul (Varianta 1)
1. Citete densitatea benzinei, afieaz capul de tabel, calculeaz, nsumeaz i
afieaz cantitatea de benzin din rezervoarele cilindrice echilaterale a cror raz
variaz de la 2 la 10 m cu pasul de 1 m.
1.1. Citete densitatea benzinei.
1.2. Iniializeaz cu zero masa total de benzin.
1.3. Tiprete un rnd de 30 de liniue.
1.4. Tiprete capul de tabel (RAZA, MASA).
Figura 3.5
Figura 3.6
97
1.5. Tiprete un rnd de 30 de liniue.
1.6. Pentru fiecare rezervor cilindric echilateral a crui raz variaz de la 2 la
10 m, cu pasul de 1 m, repet aciunile:
1.6.1. Calculeaz volumul.
1.6.2. Calculeaz masa de benzin.
1.6.3. nsumeaz masa de benzin n cantitatea total de benzin.
1.6.4. Afieaz raza i masa de benzin.
2. Tiprete un rnd de 30 de liniue.
3. Afieaz masa total de benzin.
4. Stop.
Remarci:
Evident, aciunea 1 nu reprezint o aciune primitiv, impunndu-se n acest sens o
rafinare (descompunere) a acestora (aciunile 1.1, ..., 1.6).
Pentru rafinarea aciunii neprimitive 1, vom folosi metoda analizei descendente
(top-down).
Prezentarea algoritmului n limbaj natural structurat are, dup cum ai putut constata i
singuri urmtoarele dezavantaje: exprimri lungi, greoaie etc.
Varianta 2
n figura 3.7 se prezint pseudocodul n scriere formalizat (Varianta 2).
Pseudocodul (Varianta 2)
REZERVOARE BEGIN
INIT BEGIN
Citete densitatea benzinei (d)
s=0
INIT END
PRELUCRRI BEGIN
DO LINIUTZA
WRITE(RAZA+---+MASA);
DO LINIUTZA
PENTRU FOR(r=2;r<=10;r++)
v=2r
3
m=d*v
s=s+m
WRITE(r+...+m)
PENTRU ENDFOR
PRELUCRRI END
DO LINIUTZA
WRITE(MASA TOTALA+ +s)
REZERVOARE END
LINIUTZA BEGIN
Afieaz un rnd de 30 liniue
LINIUTZ END
Remarci:
n general, script-urile conin secvene alctuite din grupuri de instruciuni care se
execut numai n anumite condiii, ct i grupuri de instruciuni care se execut de attea
ori ct timp sau pn cnd este ndeplinit o condiie.
Formatul general al blocului de secven este ilustrat n figura 3.8.
Figura 3.7
Figura 3.6
( continuare)
98
Eticheta BEGIN
Grup de instruciuni
Eticheta END
unde,
BEGIN i END joac rolul de delimitatori; ei reprezint punctul unic de intrare,
respectiv punctul unic de ieire din bloc i poart aceeai etichet (cu majuscule sau
minuscule).
Formatul general al structurii de iteraie FOR este ilustrat n figura 3.9.
Eticheta FOR(v=v
i
;v<=v
f
;v++)
Corpul buclei
Eticheta ENDFOR
unde,
v reprezint variabila de control a buclei; v
i
reprezint valoarea iniial a variabilei v;
v
f
reprezint valoarea final a variabilei v, iar v++ servete, n general la incrementarea
variabilei v. FOR i ENDFOR sunt delimitatorii structurii.
Codificarea n limbajul JavaScript
n figura 3.10 este prezentat documentul (X)HTML complet.
Figura 3.8
Figura 3.9
Figura 3.10
n figura 3.11 i figura 3.12 se prezint rezultatele execuiei script-ului.
99
Comentarii
Funcia liniutza() este apelat din trei puncte ale corpului principal
(<body>...</body>) al documentului.
Funcia liniutza() mai poate fi scris i sub forma (vezi figura 3.13).
function liniutza(){
document.write(<br />);
for(i=1;i<=30;i++){
document.write(-);
}
}
Pentru calculul volumului rezervorului cilindric echilateral am utilizat proprietatea
Math.PI i metoda Math.pow(r,3) care aparin obiectului Math (vezi obiectul
matematic Math).
Figura 3.11
Figura 3.12
Figura 3.13
100
Aplicaii
Scriei un script care calculeaz i afieaz suma primelor 100 numere ntregi.
Indicaie. n figura 3.14 este prezentat script-ul aplicaiei. Inserai acest script ntr-un
document (X)HTML.
Scriei un script care genereaz 25 de seturi de coordonate, generate de dou bucle
for imbricate:
(0,0), (0,1), (0,2), (0,3), (0,4), (0,5)
(1,0), (1,1), (1,2), (1,3), (1,4), (1,5)
(2,0), (2,1), (2,2), (2,3), (2,4), (2,5)
(3,0), (3,1), (3,2), (3,3), (3,4), (3,5)
(4,0), (4,1), (4,2), (4,3), (4,4), (4,5)
(5,0), (5,1), (5,2), (5,3), (5,4), (5,5)
Indicaie. n figura 3.15 este prezentat script-ul aplicaiei. Inserai acest script ntr-un
document (X)HTML.
Figura 3.14
Figura 3.15
Scriei dou bucle imbricate care genereaz i afieaz tabla nmulirii.
Indicaie. n figura 3.16 este prezentat script-ul aplicaiei. Inserai acest script ntr-un
document (X)HTML.
101
Figura 3.16
Scriei un script care calculeaz (cu o structur iterativ) i afieaz: 1!+2!+ +7!
Indicaie. n figura 3.17 este prezentat script-ul aplicaiei. Inserai acest script ntr-un
document (X)HTML.
Scriei un script care editeaz urmtorul triunghi al numerelor (figura 3.18).
Figura 3.17
Figura 3.18
1
1 2
1 2 3
1 2 3 4
1 2 3 4 5
1 2 3 4 5 6
1 2 3 4 5 6 7
1 2 3 4 5 6 7 8
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9 10
while (ct timp)
Una din instruciunile de iteraie (repetiie) cele mai simple este while,
cunoscut i sub denumirea de structur de iteraie cu numr necunoscut de
pai, condiionat anterior.
Deosebirea dintre while i for const n faptul c instruciunea while nu
include n declaraia sa funcia de iniializare a variabilei de control (vezi
102
ExpresieIni ial) i funcia de actualizare a variabilei de control (vezi
ExpresieFinal).
Instruciunea while este prezentat n detaliu n figura 3.19.
Instruciune Sintax
while while (condiie){
cod JavaScript
}
Figura 3.19
103
Mai multe despre while
while este foarte asemntor cu if. if execut o singur dat
instruciunile din corpul buclei (cod JavaScript), n timp ce while le
execut ntr-o bucl ct timp rezultatul evalurii condi ie este TRUE.
n realitate, bucla for nu este dect un caz particular al buclei while,
care integreaz direct funciile de iniializare i de incrementare a
variabilei de control a buclei.
Buclele while au o arie de utilizare mai larg dect buclele for, dar
decizia n a le alege v aparine numai dumneavoastr!
Numrul minim de execuii a cod JavaScript este zero.
Instruciunea break provoac o ieire imediat din bucl.
Instruciunea continue provoac reluarea buclei fr a mai fi
executate instruciunile care urmeaz.
EXEMPLUL 3.2 JAVASCRIPT
Problema din EXEMPLUL 3.2 JAVASCRIPT este aceeai cu problema din EXEMPLUL
3.1 JAVASCRIPT. Singurele deosebiri apar n urmtoarele dou faze:
proiectarea script-ului n pseudocod s-a nlocuit for cu while (vezi figura
3.20).
Pseudocodul
REZERVOARE BEGIN
...
PRELUCRRI BEGIN
...
r=2
CATTIMP WHILE(r<=10)
v=2r
3
m=d*v
s=s+m
WRITE(r+...+m)
r++
CATTIMP ENDWHILE
PRELUCRRI END
REZERVOARE END Figura 3.20
104
codificarea n limbajul JavaScript n script-ul din corpul principal al
documentului (X)HTML s-a nlocuit for cu while (figura 3.21).
Figura 3.21
Rezultatele obinute sunt evident, identice.
do while
Dac while execut una sau mai multe instruciuni (corpul buclei) de cel puin
zero (0) ori, dowhile execut cel puin o dat instruciunea (instruciunile) din
corpul buclei; apoi repet execuia ct timp rezultatul evalurii condiiei (vezi
condiie din dowhile) este TRUE.
Instruciunea dowhile este prezentat n detaliu n figura 3.22.
Instruciune Sintax
dowhile do{
cod JavaScript
}
while (condiie)
Figura 3.26
109
var sex=f;
if(sex==f){
document.write(Buna ziua, doamna!);
}
document.write(La revedere!);
</script>
Exemplu:
<script>
nume=Popescu; prenume=Ion;
if((nume==)||(prenume==)){
document.write(Lipsesc valori!);
}
</script>
Exemplu:
<script>
if((nume==)&&(prenume==)){
document.write(Lipsesc doua valori);
}
</script>
Exemplu:
<script>
if((a<100)&&(a>250)){
document.write(Ce parere aveti de acest test?);
}
</script>
Exemplu:
<script>
if(a==true){
b=ADEVARAT;
} echivalent cu
alert(b);
</script>
<script>
if(a){
b=ADEVARAT;
}
alert(b);
</script>
Figura 3.26
(continuare)
Mai multe despre if
if este o structur de decizie (decision structure, n limba englez) care
testeaz i compar diferite valori.
Dac partea a doua a unei instruciuni if poate conine orice
instruciune JavaScript, prima parte (condi ie) trebuie s respecte o
sintax precis.
Condi ie (expresie condiional) conine n general dou valori
(constante, expresii, variabile etc.) care se compar una cu cealalt.
Cele dou valori sunt separate printr-un operator relaional.
Nu confundai operatorul de egalitate (== sau ===) cu operatorul de
afectare (=), chiar dac ele se citesc egal.
Nu de puine ori suntem pui n situaia s comparm o variabil cu mai
multe valori sau cu mai multe variabile o dat. Pentru astfel de cazuri
folosii operatorii logici.
110
if ... else (dac ... n caz contrar)
Uneori, simpla folosire a instruciunii if nu este suficient. n acest caz,
completai instruciunea if cu cuvntul cheie else (n caz contrar, n limba
romn). else precizeaz interpretorului ce anume trebuie s fac atunci cnd
rezultatul evalurii condi ie este false.
Instruciunea if else este prezentat n detaliu n figura 3.27.
Instruciune Sintax
if else if (condiie) {
cod1 JavaScript
}
else {
cod2 JavaScript
}
unde,
cod1 JavaScript: instruciuni executate cnd
rezultatul evalurii condi ie este TRUE.
cod2 JavaScript: instruciuni executate cnd
rezultatul evalurii condi ie este FALSE.
Figura 3.27
111
Exemplu:
<script>
var sex=f;
if((sex==f)||(sex==m)){
document.write(Sex:+sex);
}
else{
alert(Sex nedefinit!);
}
document.write(<br />);
document.write(La revedere!);
</script>
Exemplu:
<script>
var oras=Ploiesti;
if(oras==Paris){
document.write(Locuinta dumneavoastr este in capitala Frantei);
}
else{
if (oras==Sinaia){
document.write(Locuinta dumneavoastr este la Sinaia);
}
else{
if(oras==Ploiesti){
document.write(Locuinta dumneavoastr este la Ploiesti);
}
}
}
</script>
Exemplu:
<script>
var oras=Caracal;
if(oras==Paris){
document.write(Locuinta dumneavoastr este in capitala Frantei);}
else if (oras==Sinaia){
document.write(Locuinta dumneavoastr este la Sinaia);}
else if(oras==Ploiesti){
document.write(Locuinta dumneavoastr este la Ploiesti);}
</script>
Exemplu:
<script>
var tara=Romania;
var oras=Vaslui;
if(tara==Romania){
if(oras==Bucuresti){
document.write(Locuinta ta de vara este in capitala Romaniei);}
else{
document.write(Locuinta ta de vara este in Romania, in provincie);}
}
else{
document.write(Locuinta ta de vara nu este in Romania);
}
</script>
Figura 3.27
(continuare)
112
Mai multe despre if .. else .
Instruciunile if ... else pot fi imbricate.
Ca i instruciunea if, else poate fi urmat de una sau mai multe
instruciuni delimitate de acolade ({}).
Nu uitai de expresiile condiionale prescurtate (vezi figura 3.28, figura
3.29).
<script>
x=(a==1)?1:0; echivalent cu
</script>
<script>
if(a==1){
x=1;
}
else {
x=0;
}
</script>
<script>
document.write(i+((i==1)?cuvant gasit:cuvinte gasite.));
</script>
switch
Instruciunea switch este prezentat n detaliu n figura 3.30.
Instruciune Sintax
switch switch (variabila)
case Valoare1
cod1 JavaScript
break;
case Valoare2
cod2 JavaScript
break;
default:
cod3 JavaScript
}
Conversaia 4
Obiectele interne String, Array
n aceast conversaie:
Obiectele limbajului JavaScrip . Prezentare general
Obiectele interne
Obiectul String. Aplica ii
Obiectul Array. Aplica ii
EXEMPLUL 4 JAVASCRIPT
Tem
Obiectele limbajului JavaScript. Prezentare general
Dup cum ai putut constata, variabilele din programele pe care le-ai realizat
pn acum servesc la stocarea valorilor: numerice, caracter, ir de caractere,
booleene etc.
n egal msur, JavaScript permite i gestionarea obiectelor.
Obiectele JavaScript sunt de trei tipuri:
Obiecte interne (integrate) fac parte din limbajul JavaScript.
Obiectele navigatorului nu fac parte din limbajul JavaScript, dar
sunt recunoscute de navigatoare.
Obiecte personalizate obiecte create de utilizator.
124
Obiectele interne
Cu trei din obiectele interne ale limbajului JavaScript, dumneavoastr ai fcut
deja cunotin: Math care este un obiect predefinit JavaScript i cuprinde
numeroase constante i funcii; Number i Boolean (vezi Conversaia 2).
Lista complet a obiectelor interne (integrate) ale limbajului JavaScript este
prezentat (n ordine alfabetic) n figura 4.1.
Obiect intern Descriere
Arguments Reprezint (sub forma unei matrici) valoarea argumentelor
transmise unei funcii.
Array matrice
Boolean Conine valorile: TRUE (adevrat) sau FALSE (fals).
Date Obiect predefinit JavaScript care permite manipularea orelor i a
datelor calendaristice.
Function Numele de obiect al unui obiect Function este considerat ca o
variabil reprezentnd valoarea curent a funciei create cu
new Function(), n timp ce numele unei funcii JavaScript
standard nu este o variabil, ci doar numele unei funcii.
Math Obiect predefinit JavaScript care conine mai multe funcii i
constante matematice.
Number Faciliteaz gestiunea numerelor.
Object Obiect JavaScript din care deriv toate celelalte obiecte.
RegExp Obiect predefinit JavaScript dedicat expresiilor regulate.
String Furnizeaz suportul pentru manipularea i prelucrarea irurilor de
caractere.
Obiectul String
Figura 4.1
JavaScript stocheaz irurile de caractere ca obiecte String.
Fia obiectului String este prezentat n figura 4.2.
125
Fia obiectului String
Cum se creeaz obiectul? Constructorul String()
Proprieti: length
Metode: anchor(), big(), blink(), bold(),
charAt(), charCodeAt(), concat(),
fixed(), fontcolor(), fontsize(),
fromCharCode(), indexOf(), italics(),
lastindexOf(), link(), match(),
replace(), search(), slice(), small(),
split(), strike(), sub(), substr(),
substring(), sup(), toLowerCase(),
toString(), toUpperCase()
Gestionarii de evenimente: -
Constructorul String()
Figura 4.2
Constructorul String() creeaz un nou ir de caractere.
Constructorul String() este prezentat n detaliu n figura 4.3.
Constructor Sintax
String() variabila=new String()
variabila=new String(ir)
variabila=ir
Figura 4.10
(continuare)
136
shift() matrice.shift()
.
Conversaia 5
Obiectele (interne) RegExp, Date, Arguments
n aceast conversaie:
Expresii regulate
Obiectul RegExp. Aplica ii
EXEMPLUL 5 JAVASCRIPT
Obiectul Date. Aplica ii
Obiectul Arguments Aplica ii
Tem
Expresii regulate
Expresiile regulate (Regular Expressions, n limba englez) sunt utilizate ca
modele (tipare) de cutare pentru regsirea, tergerea i nlocuirea caracterelor.
Expresiile regulate nu sunt primordiale n programarea JavaScript, dar ele sunt
universale (foarte multe limbaje de programare le utilizeaz) i pot s v
simplifice ... viaa odat ce ele au fort asimilate.
Remarci:
Implementarea expresiilor regulate n limbajul JavaScript a fost preluat direct din
limbajul Perl.
Expresiile regulate sunt puin mai ... greu de digerat, dar ele reprezint o funcie
puternic a limbajului, ncepnd cu JavaScript 1.4. Versiunile ulterioare ofer numeroase
mbuntiri.
Expresiile regulate pot fi utilizate n e-commerce (comerul electronic) pentru
validarea numerelor crilor de credit, a numerelor de telefon, a adreselor etc.
O expresie regulat este un obiect JavaScript.
Utilizai (la maximum) expresiile regulate n formularele dumneavoastr deoarece ele v
garanteaz date fiabile (vezi Conversaia 8).
Crearea expresiilor regulate este foarte asemntoare cu crearea irurilor (strings, n
limba englez).
154
Obiectul RegExp() este un obiect predefinit (built-in), care nu depinde de
navigator.
Fia obiectului RegExp() este prezentat n figura 5.1.
Fia obiectului RegExp
Cum se creeaz obiectul? constructorul RegExp()
Proprieti: $
, $&, $
_
, $
\
, $+, $n, global,
ignoreCase, index, input, lastIndex,
lastMatch, lastParen, leftContext,
multiline, rightContext, source
Metode: compile(), exec(), test()
Gestionarii de evenimente: -
Constructorul RegExp()
Constructorul RegExp() este prezentat n detaliu n figura 5.2.
Constructor Sintax
RegExp() Variabila=new
RegExp(Model,Atribut)
Variabila=/Model/Atribut
Returneaz true dac atributul g (cutare global) a fost definit; n caz contrar
returneaz false.
Exemplu:
<script language="javascript" type="text/javascript">
model=/cartof/g;
model.test("Un cartof sau doi cartofi?");
document.write(model.global);
//afiseaza true
</script>
ignoreCase RegExp.ignoreCase
new Date() creeaz un obiect avnd data i ora curente. Cel de-al
doilea format creeaz un obiect cu data i ora specificate.
Putei crea un obiect Date folosind numai argumentele: An, Lun, Zi.
Respectai ordinea argumentelor. Lunile se numr de la zero.
Crearea unui obiect Date este similar cu crearea obiectelor
String, Array.
Exemplu:
<script>
azi=new Date();
document.write(azi);
//afieaz data i ora curente
</script>
Exemplu:
<script>
azi=new Date(2002,5,9);
alert(azi);
//obiectul Date conine 9 mai 2002
</script>
Figura 5.19
Metodele obiectului Date
Metodele obiectului Date permit: definirea valorilor obiectelor Date
(setDate(); setMonth(); setFullYear(); setTime();
setHours(); setMinutes(); setSeconds() etc.); citirea valorilor
obiectelor Date (getDate(); getMonth(); getFullYear();
getTime(); getHours() etc.); gestionarea fusurilor orare i a orelor locale
(getTimeZoneOffset(); toUTCString(); toLocalString()
etc.); conversia ntre formatele datelor (Date.parse(); Date.UTC() etc.).
Metodele obiectului Date sunt prezentate n detaliu n figura 5.20.
173
Metod Sintax
getDate() Data.getDate()
Conversaia 6
Gestionarii de evenimente JavaScript
n aceast conversaie:
Evenimente i gestionari de evenimente
Gestionarii de evenimente JavaScript
Aplica ii
Tem
Evenimente i gestionari de evenimente
Dup cum am afirmat, JavaScript este un limbaj condus de evenimente. Foarte
multe din programele pe care le scriei n limbajul JavaScript vor rspunde la un
eveniment iniiat fie de ctre utilizator, fie de ctre browser.
Reacia la un eveniment este cunoscut sub numele de prelucrarea
evenimentului, iar codul JavaScript corespunztor (pe care l scriei) este
cunoscut sub numele de gestionar de evenimente.
Un gestionar de evenimente este o metod puin special care va fi
apelat n mod automat de ctre navigator ori de cte ori va surveni un
eveniment particular.
Gestionarii de evenimente sunt funcii puternice JavaScript. Din
fericire ei sunt foarte uor de programat. De foarte multe ori este suficient o
singur instruciune pentru a putea fi creai.
190
Remarci:
Un eveniment este o aciune care se produce n raport cu un element (fereastr,
document, buton etc.). El poate fi detectat i prelucrat de ctre un script care va
declana o aciune. Script-ul este executat dac evenimentul se produce pe obiectul
cruia i este asociat. Aciunile utilizatorilor sunt elementele cele mai frecvente.
Evenimentele generate de utilizator nu sunt singurele evenimente generate de
JavaScript. De exemplu, evenimentul load, declanat automat de ctre navigator, nu
se produce dect atunci cnd este ncheiat ncrcarea unui document (X)HTML ntr-un
navigator.
Acelai eveniment se poate aplica mai multor obiecte.
Evenimentele stau la baza interactivitii documentelor Web.
Cteva din evenimentele care survin n mod frecvent ct i momentul n care acestea se
declaneaz sunt prezentate n figura 6.1.
Eveniment Se declaneaz atunci cnd
abort ncrcarea unui obiect este ntrerupt.
blur un element nu este activat.
click utilizatorul execut clic pe un obiect.
change valoarea unui element este modificat.
error se produce o eroare la ncrcarea unui document sau a unei imagini.
focus un element devine inactiv.
load un document sau o imagine se ncarc.
mouseOut mouse-ul se deplaseaz n afara elementului.
mouseOver mouse-ul se deplaseaz pe deasupra elementului.
reset datele introduse ntr-un formular sunt terse.
select utilizatorul selecteaz un cmp ntr-un formular.
submit utilizatorul expediaz un formular.
unload un document este descrcat.
Dup cum ai putut observa, fiecare element are propriul su nume. De exemplu,
evenimentul click se produce atunci cnd utilizatorul execut clic pe un obiect.
n acest caz, evenimentul click este trimis gestionarului de evenimente, dac
acesta exist. Pentru a defini un gestionar de evenimente adugai prefixul on la
numele evenimentului.
Codul gestionarului de evenimente trebuie s fie inclus ca un atribut al unui tag
(X)HTML care declaneaz evenimentul:
<tag (X)HTML gestionarEvenimente=cod JavaScript>
Remarci:
Codul JavaScript al unui gestionar de evenimente este inclus ntre ghilimele.
Observai combinaia ciudat de majuscule i minuscule la notaia standard a
gestionarilor de evenimente: on este scris mereu cu minuscule iar iniiala fiecrui cuvnt
al evenimentului, cu majuscule. Exemple: onAbort, onBlur, onClick,
Figura 6.1
191
onChange, onError, onFocus, onLoad, onMouseOut,
onMouseOver, onReset, onSelect, onSubmit, onUnLoad.
n figura 6.2 sunt listai, n ordine alfabetic gestionarii de evenimente ai
limbajului JavaScript.
onAbort onActivate onAfterPrint
onAfterUpdate onBeforeActivate onBeforeCopy
onBeforeCut onBeforeDeActivate onBeforeEditFocus
onBeforePaste onBeforePrint onBeforeUnload
onBeforeUpdate onBlur onCellChange
onChange onClick onContextMenu
onControlSelect onCopy onCut
onDblClick onDeActivate onDrag
onDragDrop onDragEnd onDragStart
onDrop onError onFocus
onFocusIn onFocusOut onHelp
onKeyDown onKeyPress onKeyUp
onLoad onMouseDown onMouseMove
onMouseOut onMouseOver onMouseUp
onMove onMoveEnd onPropertyChange
onReset onResize onResizeError
onResizeEnd onResizeStart onScroll
onSelect onSubmit onUnLoad
Gestionarii de evenimente JavaScript sunt prezentai n detaliu n figura 6.3.
Gestionari de evenimente
onAbort
Conversaia 7
Obiectele navigatorului
n aceast conversaie:
Documen Object Model (DOM)
Obiectul Window. Aplica ii
Obiecte de nivelul 1
Obiecte de nivelul al doilea
Obiecte de nivelul al treilea
Obiecte de nivelul al patrulea
Obiectul Navigator. Aplica ii
Tem
Document Object Model (DOM)
n conversaiile anterioare am acordat atenie limbajului de programare
JavaScript i obiectelor interne ale acestuia (Ar gument s, Ar r ay,
Bool ean, Dat e, Funct i on, Mat h, Number , Obj ect , RegExp,
St r i ng, Thi s). Obiectele pe care le vei utiliza cel mai des, pe parte de client
sunt cele care aparin DOM-ului (Document Object Model), cu ajutorul crora
script-urile dumneavoastr vor putea manipula paginile Web, ferestrele i
documentele. Obiectivul acestui model (DOM) este acela de a v oferi o interfa
(ntre dou fee exist ... o interfa!) simpl i coerent ntre programele
JavaScript i navigatorul Web.
DOM-ul definete obiectele disponibile, proprietile, metodele i evenimentele
acestora. Cu o parte din obiectele DOM-ului ai fcut deja cunotin.
212
n afar de aceste obiecte, DOM-ul mai conine i alte obiecte ierarhizate
(structur arborescent), obiectul Wi ndowaflndu-se n vrful arborescenei.
Ierarhia obiectelor
Cnd examinai ndeaproape ierarhia general a obiectelor n JavaScript, putei
vedea c cele mai multe obiecte sunt fie pe parte de client sau pe parte de
server.
n aceast lucrare vom examina obiectele numai pe parte de client i vom
prezenta proprietile i metodele lor.
Remarc. Majoritatea obiectelor JavaScript sunt reprezentri ca obiecte ale tag-urilor (X)HTML.
n figura 7.1 sunt prezentate obiectele pe parte de client i tag-urile (X)HTML
corespunztoare.
Obiect JavaScript Tag (X)HTML corespondent
But t on <input type=button />
Checkbox <input type=checkbox />
Hi dden <input type=hidden />
Fi l eupl oad <input type=file />
Passwor d <input type=password />
Radi o <input type=radio />
Reset <input type=reset />
Sel ect <select>
Fr ame <frame>
Document <body>
Layer <layer> sau <ilayer>
Li nk <a href= />
I mage <img />
Ar ea <map>
Anchor <a name= />
Appl et <applet>
Pl ugi n <embed>
For m <form>
Submi t <input type=submit />
Text <input type=text />
Text ar ea <textarea>
Opt i on <option>
Figura 7.1
Pe msur ce vei examina aceste obiecte vei vedea modalitile diverse n care
ele sunt prezentate utilizatorilor i programatorilor n limbajul JavaScript.
Lista obiectelor JavaScript este prezentat n ordine alfabetic n figura 7.2, iar
ierarhia obiectelor este ilustrat n figura 7.3.
213
but t on checkbox document
event f i l eUpl oad f or m
hi dden hi st or y l ocat i on
Mi meType navi gat or obi ect e n gener al
opt i on Opt i on( ) passwor d
pl ugi ns r adi o r eset
scr een sel ect submi t
t ext t ext ar ea wi ndow
Button
Checkbox
Anchor FileUpload
Area Hidden
Applet Password
Document Form Radio
Image Reset
Layer Submit
Link Select Option
Plugin Text
Window Textarea
Frame
History
Location
Event
Style
Obiectele sunt ierarhizate dup cum urmeaz:
Obiectul Wi ndow, de nivelul cel mai nalt (nivelul 0), pe parte de client;
Obiecte de nivelul 1: Document , Fr ame, Hi st or y,
Locat i on, Event , St yl e;
Obiecte de nivelul al doilea: Anchor , Ar ea, Appl et , For m,
I mage, Layer , Li nk, Pl ugi n;
Obiecte de nivelul al treilea: But t on, Checkbox, Fi l eUpl oad,
Hi dden, Passwor d, Radi o, Reset , Submi t , Sel ect ,
Text , Text ar ea;
Obiecte de nivelul al patrulea: Opt i on.
Remarci:
Obiectele limbajului JavaScript pe parte de client reprezint instrumente importante cu
ajutorul crora putei genera script-uri.
n cea mai mare parte modelul obiectului este constituit din elemente (X)HTML care sunt
transpuse n obiecte.
Dac pn acum ai programat n limbajului (X)HTML, din acest moment trebuie s
abordai elementele (X)HTML ca fiind nu tag-uri, ci obiecte.
Figura 7.2
Figura 7.3
214
JavaScript utilizeaz o ierarhie de obiecte: printe-fiu, cunoscute sub numele de
Document Object Model (DOM). Aceste obiecte, organizate ntr-o structur
arborescent reprezint coninutul i componentele unui document Web.
Iat un exemplu simplu (figura 7.4) care ilustreaz modul n care un fiier
(X)HTML stabilete corespondena cu DOM-ul navigatorului.
n cursul ncrcrii fiierului XHTML, navigatorul Web folosete un ansamblu
complet de obiecte ale DOM-ului pentru a le reprezenta (vezi figura 7.5).
Obiect Descriere
Obiectul Window Reprezint navigatorul Web
Obiectul Document Reprezint fiierul XHTML
Un obiect Form cu numele
demo
Reprezint tag-ul <f or m> definit n fiierul
XHTML
Trei obiecte input cu numele:
nume, prenume, email
Reprezint zonele de text definite n formular
Figura 7.5
Figura 7.4
Remarc. Evident, mai sunt create i alte obiecte, ca de exemplu matricea formularelor
f or ms[ ] .
n figura 7.6 se prezint modul de imbricare al obiectelor create.
215
Figura 7.6
Obiectul Window
Obiectul Document
Obiectul Input email
Obiectul Input prenume
Obiectul Form demo
Obiectul Input nume
Istoricul DOM-ului
Obiectele navigatorului sunt exterioare limbajului JavaScript dar sunt recunoscute
de ctre navigatoare. Din pcate exist nc diferene ntre navigatoare, care nu
de puine ori se manifest n mod suprtor.
Dup Netscape 3.0 i Internet Explorer 4.0 toate obiectele de baz sunt luate n
considerare de ctre cele dou browser-e, iar noile norme DOM sunt recunoscute
de ultimele versiuni Netscape i Internet Explorer.
W3C (World Wide Web Consortium) a pus recent la punct norma DOM de nivel 1.
Aceast norm nu conine dect obiectele de baz, toate obiectele acoperind
integral componentele unui document (X)HTML. O norm de nivel 2 este n curs
de apariie. Ierarhia obiectelor de care noi vorbim n aceast conversaie este
cunoscut sub numele de DOM 0 iar obiectele sunt incluse n norma DOM 1.
Remarc. Obiectele DOM de nivel 1 i 2 permit modificarea unei pagini Web n timp real, dup
ncrcarea sa (Dinamic HTML).
Obiectul Window
Obiectul Wi ndow de nivelul cel mai nalt reprezint fereastra navigatorului n
care este afiat obiectul Document . Fiecare fereastr a navigatorului i fiecare
cadru au propriul lor obiect Wi ndow.
Fia obiectului Wi ndoweste prezentat n figura 7.7.
Remarc. Nu uitai c un obiect Window i proprietile sale pot fi atribuite unei variabile
JavaScript ca orice alt obiect.
216
Spre deosebire de alte obiecte care pot s fie prezente sau nu, obiectul Wi ndow
exist permanent.
Remarci:
Mai multe obiecte wi ndowpot exista n acelai timp, fiecare reprezentnd o fereastr a
navigatorului deschis.
Cadrele (frames, n limba englez) sunt de asemenea reprezentate prin obiecte
Window (vezi Conversaia 10).
Straturile (layers, n limba englez) care permit modificarea n mod dinamic a
coninutului unui document Web sunt analoage obiectelor Wi ndow(vezi Conversaia
10).
Fia obiectului Window
Subobiecte: document , event , hi st or y, l ocat i on, navi gat or , st yl e
Proprieti: cont ent , cl i ent i nf or mat i on, cl i pboar d, cl osed,
def aul t st at us, di al ogAr gument s, di al ogHei ght ,
di al ogLef t , di al ogTop, di al ogWi dt h, document , event ,
f r ames[ ] , hi st or y, i nner Hei ght , i nner Wi dt h, l engt h,
name, navi gat or , of f scr eenBuf f er i ng, opener ,
out er Hei ght , out er Wi dt h, pageXOFFset , pageYOf f set ,
par ent , r et ur nVal ue, scr een, scr eenLef t , scr eenTop,
scr eenX, scr eenY, sel f , st at us, st yl e, t op, wi ndow
Metode: al er t ( ) , back( ) , bl ur ( ) , cl ear I nt er val ( ) ,
cl ear Ti meout ( ) , cl ose( ) , conf i r m( ) , cr eat ePopup( ) ,
execScr i pt ( ) , f ocus( ) , f or war d( ) , home( ) , moveBy( ) ,
moveTo( ) , navi gat e( ) , open( ) , pr i nt ( ) , pr ompt ( ) ,
r esi zeBy( ) , r esi zeTo( ) , scr ol l ( ) , scr ol l By( ) ,
scr ol l To( ) , set Act i ve( ) , set I nt er val ( ) ,
set Ti meout ( ) , showHel p( ) , showModal di al og( ) ,
showModel essDi al og( ) , st op( )
Gestionarii de
evenimente:
onAct i vat e, onAf t er Pr i nt , onBef or eAct i vat e,
onBef or ePr i nt , onBef or eUnl oad, onBl ur ,
onCont r ol Sel ect , onDeAct i vat e, onDr agDr op, onEr r or ,
onFocus, onHel p, onLoad, onMouseMove, onMove,
onMoveEnd, onMoveSt ar t , onResi ze, onResi zeEnd,
onResi zeSt ar t , onScr ol l , onUnl oad
Proprietile fundamentale ale obiectului Window
Cele mai importante proprieti ale obiectului Window sunt prezentate n detaliu
n figura 7.8.
Proprietate Sintax
cl osed wi ndow. cl osed
Conine valoarea t r ue (fereastra este nchis) sau f al se (fereastra
este deschis).
def aul t St at us wi ndow. def aul t St at us
Conine un ir de caractere reprezentnd textul afiat n mod implicit n
bara de stare. El rmne valabil atta timp ct coninutul ferestrei nu
se schimb.
Exemplu: <script>window.defaultStatus=La muli ani mpreun! </script>
Figura 7.7
Figura 7.8
217
document wi ndow. document
Proprietatea document corespunde obiectului Document .
f r ames[ ] wi ndow. f r ames[ ]
Conine un obiect wi ndowpentru fiecare cadru al site-ului Web.
hi st or y wi ndow. hi st or y
Un obiect care conine lista de site-uri (istoricul) Web vizitate (vezi
obiectul Hi st or y).
l engt h wi ndow. l engt h
Numrul de cadre coninute n fereastr.
name wi ndow. name
Numele obiectului Window. Acest nume este diferit de numele
variabilei JavaScript care conine obiectul Wi ndow.
Exemplu:
...
var catwindow=window.open();
catwindow.name=cat;
navi gat or wi ndow. navi gat or
Obiectul Navi gat or conine informaii cu privire la navigator.
Exemplu:
...
for (x in navigator)
document.write(x+=+navigator[x]+<br />;
...
opener wi ndow. opener
Corespunde ferestrei n care a fost creat o alt fereastr (prin metoda
wi ndow. open( ) . Marea majoritate a proprietilor i metodelor
obiectului wi ndowpot fi aplicate proprietii opener ).
out er Hei ght wi ndow. out er Hei ght
nlimea (n pixeli) documentului afiat n fereastr (incluznd bara de
meniuri, bara de instrumente, bara de stare).
out er Wi dt h wi ndow. out er Wi dt h
Limea (n pixeli) documentului afiat n fereastr (incluznd bara de
meniuri, bara de instrumente, bara de stare).
par ent wi ndow. par ent
Referin la fereastra/cadrul printe al ferestrei/cadrului curent.
scr een wi ndow. scr een
Conine informaii privind configuraia ecranului de pe monitorul
clientului.
sel f wi ndow. sel f
Figura 7.8
(continuare)
218
Referina la fereastra curent. Identic cu wi ndow
(wi ndow. wi ndow).
Exemplu:
window.close()
identic cu:
window.self.close
st at us wi ndow. st at us
Conine un ir de caractere care va fi temporar afiat n bara de stare a
navigatorului.
t op wi ndow. t op
Referina ctre fereastra navigatorului situat n prim plan.
wi ndow wi ndow. wi ndow
Identic cu wi ndow. sel f .
Metodele fundamentale ale obiectului Window
Metodele fundamentale ale obiectului Window sunt prezentate n detaliu n
figura 7.9.
Metode Sintax
al er t ( ) wi ndow. al er t ( Mesaj)
al er t ( Mesaj)
Afieaz o caset de dialog care conine un buton OK i mesajul
specificat. Apelarea metodei oprete execuia programului JavaScript
pn cnd utilizatorul execut clic pe butonul OK pentru a continua.
Metoda al er t ( ) este folosit i ca instrument de depanare a
script-urilor (vezi Conversaia 11).
back( ) wi ndow. back( )
back( )
Retur la pagina precedent afiat n fereastr (vezi obiectul
Hi st or y).
bl ur ( ) wi ndow. bl ur ( )
bl ur ( )
Retrage focus-ul ferestrei curente.
Exemplu:
<script>window.blur()</script>
cl ose( ) wi ndow. cl ose( )
cl ose( )
nchide fereastra curent (dup confirmarea de ctre utilizator).
conf i r m( ) wi ndow. conf i r m( Mesaj)
conf i r m( Mesaj)
Afieaz o caset de dialog care conine mesajul specificat, un buton
OK i un buton de anulare. Returneaz TRUE dac utilizatorul execut
clic pe butonul OK i FALSE dac utilizatorul execut clic pe butonul de
anulare.
Exemplu:
<script>
a=window.confirm(Deschide o nou fereastr);
Figura 7.8
(continuare)
Figura 7.9
219
if (a==true) {
window.open(nou.htm);
document.write(Noua fereastr este deschis);
}
if (a==false) {
window.open(nou.htm);
document.write(Noua fereastr nu va fi deschis);
}
</script>
execScr i pt ( ) wi ndow. execScr i pt ( Expresie,Limbaj)
execScr i pt ( Expresie,Limbaj)
Execut expresia menionat ca i cnd ar fi un script, n limbajul
indicat.
Exemplu:
<script>
window.execScript(alert(Fatalitate),JavaScript);
</script>
f ocus( ) wi ndow. f ocus( )
f ocus( )
Transmite focus-ul ferestrei curente.
f or war d( ) wi ndow. f or war d( )
f or war d( )
Oblig navigatorul s ncarce documentul urmtor n istoric.
home( ) wi ndow. home( )
home( )
Navigatorul ncarc pagina definit ca pagin de index de ctre
utilizator.
moveBy( ) wi ndow. moveBy( x,y)
moveBy( x,y)
Deplaseaz fereastra cu x pixeli orizontal i cu y pixeli vertical. Cele
dou valori pot fi pozitive sau negative.
Exemplu:
<script>
window.moveBy(100,200);
</script>
moveTo( ) wi ndow. moveTo( x,y)
moveTo( x,y)
Deplaseaz fereastra la poziia x (orizontal) i y (vertical). Cele dou
valori au ca origine colul superior stnga al ecranului.
Exemplu:
<script>
window.moveTo(0,0);
</script>
open( ) wi ndow. open( URL,Nume,Atribute,
nlocuiete)
Figura 7.9
(continuare)
220
open( URL,Nume,Atribute,
nlocuiete)
Deschide o nou fereastr a navigatorului i returneaz un obiect
Window pentru a o reprezenta. Dac apelai metoda open( ) fr
parametri, vei obine o fereastr vid. Pentru a vedea ceva mai
interesant, transmitei urmtorii patru parametri respectnd secvena de
mai jos:
URL adresa Web a paginii Web care dorii s se ncarce automat
n noua fereastr.
Nume ir de caractere care va fi plasat n proprietatea
wi ndow. name a noii ferestre.
Atribute wi dt h, hei ght , menubar , r esi zabl e,
scr ol l bar s, st at us, di r ect or i es.
nlocuiete este o valoare logic (true, dac istoricul ferestrei este
ters).
Metoda returneaz o referin la noua fereastr. Atributele pot lua
valoarea adevrat sub forma true, yes sau 1 sau valoarea
false sub forma false, no sau 0.
Semnificaia atributelor este urmtoarea:
t ool bar afieaz/ascunde bara de instrumente a browser-ului
l ocat i on prezena barei de adrese
di r ect or i es afieaz/ascunde o bar de instrumente
(Netscape) secundar cu butoane familiare
st at us afieaz/ascunde bara de stare a navigatorului
menubar afieaz/ascunde bara de meniuri a navigatorului
scr ol l bar s afieaz/ascunde barele de derulare pe vertical
i orizontal ale browser-ului
r esi zabl e permite/interzice redimensionarea ferestrei de
browser
wi dt h limea n pixeli a ferestrei
hei ght nlimea n pixeli a ferestrei
Exemplu:
<script>
newfereastra=window.open(test.htm,titlu,toolbarno,
location=no, directories=no, status=no, menubar=no,
scrollbars=no, resizable=no, width=100, height=100);
</script>
pr i nt ( ) wi ndow. pr i nt ( )
pr i nt ( )
Imprim coninutul ferestrei.
pr ompt ( ) wi ndow. pr ompt ( Mesaj,ConinutImplicit)
pr ompt ( Mesaj,ConinutImplicit)
Afieaz o caset de dialog care conine mesajul specificat, o zon de
text pe care o completeaz utilizatorul, butonul OK i butonul de
anulare. Al doilea argument este facultativ. Rspunsul implicit specificat
n pr ompt ( ) este afiat n zona de text. Utilizatorul poate introduce o
alt valoare sau poate executa clic pe butonul OK pentru a accepta
rspunsul implicit. Dac el execut clic pe butonul OK, valoarea
coninut n zona de text este returnat script-ului; dac el execut clic
pe butonul de anulare, atunci valoarea nul l este returnat script-ului.
Valoarea null reprezint nimic sau un obiect vid.
Exemplu:
<script>
var raspuns=prompt(Care este culoarea preferata?, cepia);
if (raspuns==null){
Figura 7.9
(continuare)
221
alert(Ati apasat butonul Cancel);
}
else{
alert(Raspunsul dumneavoastr este +raspuns);
}
</script>
r esi zeTo( ) wi ndow. r esi zeTo( Lungime,Lime)
r esi zeTo( Lungime,Lime)
Redimesioneaz fereastra navigatorului la Lungime i Lime
specificate (n pixeli).
Exemplu:
<script>
self.resizeTo(50,325);
</script>
scr ol l ( ) wi ndow. scr ol l ( x,y)
scr ol l ( x,y)
Face s defileze coninutul unei ferestre pn la poziia specificat (x i
y) n raport cu colul din stnga sus al ferestrei.
Remarc. Metoda este depit.
scr ol l To( ) wi ndow. scr ol l To( x,y)
scr ol l To( x,y)
Face s defileze coninutul unei ferestre pn la poziia x (lungime), y
(lime) n raport cu colul din stnga sus al ferestrei.
Exemplu:
<script>
window.scrollTo(0,100);
</script>
set I nt er val ( ) wi ndow. set I nt er val ( Expresie,
Interval,Argumente)
set I nt er val ( Expresie,
Interval,Argumente)
Execut Expresie n intervalele fixate. Expresie poate fi o instruciune
JavaScript sau apelul unei funcii. Interval este prezentat n
milisecunde. Argumente sunt transmise funciei apelate.
Remarci:
Metoda cl ear I nt er val ( ) anuleaz efectul metodei
set I nt er val ( ) .
Metoda set I nt er val ( ) este aproape identic cu metoda
setTimeout(). Principala diferen ntre cele dou metode (vezi
set Ti meout ( ) ) este aceea c parametrul Expresie, care poate fi o
instruciune sau apelul unei funcii executat fr sfrit.
Figura 7.9
(continuare)
222
Exemplu:
set Ti meout ( ) wi ndow. set Ti meOut ( Expresie,
Durata,Argumente)
set Ti meOut ( Expresie,
Durata,Argumente)
Execut Expresie dup Durata (n milisecunde). Expresie poate fi apelul
unei funcii. Argumentele (facultative) sunt transmise funciei apelate.
Remarc. Metoda cl ear Ti meOut ( ) anuleaz efectul metodei
set Ti meOut ( ) .
Exemplu:
Figura 7.9
(continuare)
223
Rezultatele execu iei script-ului.
Una din aplicaiile cele mai interesante ale obiectului Window este crearea i
nchiderea unei noi ferestre. V prezentm n cele ce urmeaz cteva aplicaii
simple, reprezentative pentru metodele i proprietile obiectului Window.
Creai un document (X)HTML care conine un script (simplu) ce utilizeaz
butoane pentru crearea i nchiderea unei ferestre.
Indicaie. Folosii metodele: open( ) i cl ose( ) prezentate n figura 7.9.
n figura 7.10 este prezentat documentul (X)HTML complet.
Aplicaii ale obiectului Window
Figura 7.9
(continuare)
224
Remarci:
Documentul XHTML permite deschiderea unei noi ferestre executnd clic pe un buton
(primul buton).
A doua fereastr este foarte mic pentru a se putea distinge de prima fereastr.
Al doilea buton permite nchiderea acestei ferestre.
Al treilea buton nchide fereastra principal a navigatorului, dup acordul utilizatorului.
Acest document face apel la gestionarii de evenimente onCl i ck (cte unul pentru
fiecare buton).
n figura 7.11 este prezentat pagina Web afiat n Internet Explorer, cu noua
fereastr deschis.
Figura 7.10
Figura 7.11
225
Creai un document (X)HTML care conine un script (simplu) pentru
deplasarea i modificarea ferestrelor.
n figura 7.12 este prezentat documentul XHTML complet.
Figura 7.12
Remarci:
Funcia Demo() este apelat ca un gestionar de evenimente atunci cnd executai clic
pe butonul modificai dimensiunile ferestrei.
Funcia Demo() verific dac ai introdus valori pentru lungime i lime. Dac aceste
valori au fost introduse se apeleaz metoda sel f . r esi zeTo( ) pentru a modifica
dimensiunile ferestrei curente.
Funcia Demo() verific dac ai introdus valori pentru abscis(x) i ordonat(y). Dac
aceste valori au fost introduse se apeleaz metoda sel f . moveTo( ) pentru a deplasa
fereastra.
Creai un mic dicionar pentru vizitatorii site-ului dumneavoastr. Afiai n
bleu cuvintele pe care le definii. Ori de cte ori utilizatorul va executa un clic pe
unul din aceste cuvinte, se va deschide o fereastr n care se afieaz o scurt
definiie a cuvntului selectat (figura 7.13). Personalizai script-ul creat.
226
Scriei un program JavaScript care ajusteaz n mod automat dimensiunea
caracterelor unui text la dimensiunile ferestrei. Cu ct fereastra este mai mare,
cu att caracterele sunt mai mari. Punerea n pagin va fi asigurat n toate
circumstanele. Definii dimensiunea de baz a caracterelor pentru dimensiuni
precise ale ferestrei. Dimensiunea caracterelor se va recalcula la fiecare
redimensionare a ferestrei.
Script-ul redefinete stilul caracterelor pentru ntreg documentul de fiecare dat
cnd fereastra i schimb dimensiunile (figura 7.14, figura 7.15).
Figura 7.13
Figura 7.14
coriamb
Un dactil si un troheu
227
Comentai urmtorul document XHTML care conine un script pentru
actualizarea periodic a coninutului unei pagini Web (figura 7.16).
Indicaie. Revedei metoda set Ti meOut ( ) prezentat n figura 7.9.
Figura 7.15
Figura 7.16
Creai un script pentru a afia trei casete de dialog cu ajutorul metodelor
al er t ( ) , conf i r m( ) , pr ompt ( ) .
n figura 7.17 este afiat documentul complet XHTML.
228
Remarc. Documentul afieaz trei butoane, fiecare dintre ele apelnd cte un gestionar de
evenimente pentru a afia o caset de dialog.
n figurile 7.18, 7.19, 7.20 sunt prezentate rezultatele execuiei programului
JavaScript.
Figura 7.17
Figura 7.18
229
Obiectul Wi ndow, considerat ca fiind obiectul de cel mai nalt nivel n ierarhia
obiectelor JavaScript pe parte de client conine toate celelalte obiecte pe parte de
client, cu excepia obiectului Navi gat or .
Este important s facei cunotin cu aceste obiecte, i ... s rmnei mpreun!
Ele sunt:
Document ;
Fr ame;
Hi st or y;
Locat i on;
Event ;
St yl e.
Remarc. Aceste obiecte sunt considerate obiecte de nivelul 1.
Obiecte de nivelul 1
Figura 7.19
Figura 7.20
230
Obiectul Document
Manipularea documentelor Web
Obiectul Document reprezint pagina Web afiat ntr-o fereastr a
navigatorului. Nu pare deci surprinztor faptul c obiectele Document sunt fii ai
obiectelor Wi ndow. n msura n care obiectul Wi ndowreprezint ntotdeauna
fereastra activ (cea care conine script-ul), putei utiliza wi ndow. document
pentru a v referi la documentul curent sau, mai simplu, utilizai numai
document .
Remarc. n programele JavaScript din conversaiile precedente ai fcut apel la metoda
document . wr i t e pentru a afia un text ntr-un document Web. Programele la care ne referim
nu utilizau dect o fereastr; n consecin, era inutil s folosii descrierea complet
wi ndow. document . wr i t e.
Dac mai multe ferestre sau mai multe cadre sunt deschise, atunci vor exista mai
multe obiecte wi ndowi un singur obiect Document pentru fiecare dintre ele.
Pentru a utiliza un astfel de obiect Document ne folosim de numele ferestrei
urmat de numele obiectului.
Fia obiectului Document este prezentat n figura 7.21.
Fia obiectului Document
Obiectul printe: Wi ndow
Subobiecte: Anchor , Ar ea, Appl et , For m, I mage, Layer , Li nk,
Pl ugi n
Proprieti: act i veEl ement , al i nkCol or , al l [ ] , anchor s[ ] ,
appl et s[ ] , at t r i but es[ ] , backgr ound, bgCol or , body,
char act er Set , char Set , chi l dNodes[ ] , cooki e,
def aul t char set , domai n, embeds[ ] , f gcol or ,
f i l eCr eat edDat e, f i l eModi f i edDat e, f i l eSi ze,
f or ms[ ] , f r ames[ ] , hei ght , i mages[ ] , i nner HTML,
i nner Text , l ast Modi f i ed, l ayer s[ ] , l i nks[ ] ,
l ocat i on, out er HTML, out er Text , par ent Wi ndow,
pl ugi ns[ ] , pr ot ocol , r eadySt at e, r ef er r er ,
scr i pt s[ ] , sel ect i on, st yl e, st yl esheet s[ ] , t i t l e,
URL, vl i nkCol or , wi dt h
Metode: cl ear ( ) , cl ose( ) , cr eat eEl ement ( ) ,
cr eat eSt yl eSheet ( ) , el ement For mPoi nt ( ) ,
get El ement Byl d( ) , get El ement sByName( ) ,
get El ement sByTagName( ) , get Sel ect i on( ) , open( ) ,
set Act i ve( ) , wr i t e( ) , wr i t el n
Gestionarii de
evenimente:
onAct i vat e, onBef or eCut , onBef or eDeAct i vat e,
onBef or eEdi t Focus, onBef or ePast e, onBef or eUpdat e,
onCel l Change, onCl i ck, onCont ext Menu,
onCont r ol Sel ect , onCut , onDbl Cl i ck, onDr ag,
onDr agEnd, onDr agEnt er , onDr agLeave, onDr agOver ,
onDr agSt ar t , onDr op, onHel p, onKeyDown, onKeyPr ess,
onKeyUp, onMouseDown, onMouseOut , onMouseOver ,
onMouseUp, onPast e, onPr oper t yChange,
onSel ect i onChange, onSel ect St ar t , onSt op
Figura 7.21
231
Proprieti e fundamentale ale obiectului Document l
Proprietile fundamentale ale obiectului Document sunt prezentate n detaliu n
figura 7.22.
Proprietate Sintax
al i nkCol or document . al i nkCol or
Conine culoarea atribuit link-urilor active, definit prin atributul
al i nk al tag-ului <body>.
Pentru a modifica culoarea link-ului, atribuii o nou valoare a culorii.
Exemplu:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Aplicatie</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<script language="JavaScript" type="text/JavaScript">
document.write("<br />Legaturi active: "+document.alinkColor);
document.write("<br />Legaturi: "+document.linkColor);
document.write("<br />Legaturi vizitate: "+document.vlinkColor);
</script>
</head>
<body link="blue" alink="yellow" vlink="purple">
</body>
</html>
al l [ ] document . al l [ ]
Toate elementele documentului. Fiecare element este o dat al matricii
(array) al l [ ] . Elementele sunt referite prin numrul lor de ordine
sau prin numele lor. Utilizai metoda t ags( ) pentru a obine setul de
elemente ale unui tag precis.
Exemplu:
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>all[]</title>
</head>
<body>
<p id="unu">O imagine <img src="sigla.jpg" name="sigla1" width="15"
height="30" border="0" id="sigla1" /></p>
<p id="doi">A doua imagine <img src="sigla.jpg" name="sigla2" width="15"
height="30" border="0" id="sigla2" /></p>
<script language="JavaScript" type="text/javascript">
//Afiseaza id-ul tag-urilor
para=document.all.tags("p");
document.write(para[0].id+"<br />");
document.write(para[1].id+"<br />");
</script>
</body>
</html>
Figura 7.22
232
anchor s[ ] document . anchor s[ ]
Matricea anchor s[ ] conine un obiect Anchor (ancor) pentru
fiecare set de tag-uri: <a name=...> ... </a>.
appl et s[ ] documet . appl et s[ ]
Matricea appl et s[ ] conine toate applet-urile Java inserate n
documentul (X)HTML. Fiecare element al matricii corespunde unui set
de tag-uri <appl et > . . . </ appl et >.
document . appl et s. l engt h returneaz numrul de applet-uri
ale documentului.
bgCol or document . bgCol or
Culoarea de fond a documentului numai atributul bgColor al
tag-ului <body>(vezi proprietatea alinkColor).
body document . body
Referin la seciunea body a documentului.
body este un obiect care recunoate proprietile obiectului
document .
Exemplu:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>document.body</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
</head>
<body>
<script language="JavaScript" type="text/JavaScript">
nouFer=window.open("","nou","height=200, width=200");
nouFer.document.write("<head><title>demo</title></head><body><b>La
multi ani impreuna!</b></body>");
document.write(nouFer.document.body.innerHTML);
nouFer.close();
</script>
</body>
</html>
cooki e document . cooki e
Permite citirea i configurarea valorii cookie-ului clientului pentru un
document (X)HTML. Citirea i nregistrarea cookie-ului sunt foarte
simple.
Remarc. Utilizarea unui cooki e este puin mai complicat.
Exemplu:
...
//citeste cookie
var numCookie=document.cookie;
//scrie cookie
document.cookie=numCookie;
...
Figura 7.22
(continuare)
233
embeds[ ] document . embeds[ ]
Matricea embeds[ ] conine toate elementele incorporate n
documentul (X)HTML. ntr-o pagin Web, un element incorporat este
plasat ntre tag-urile <embed>i </ embed>.
document . embeds. l engt h returneaz numrul de elemente
incorporate n document.
f gCol or document . f gCol or
Culoarea textului. Corespunde atributului t ext al tag-ului <body>
(vezi proprietatea al i nkCol or ).
f or ms[ ] document . f or ms[ ]
Setul de formulare coninute n documentul (X)HTML. Formularele sunt
reprezentate n documentul (X)HTML prin tag-ul <f or m>. Fiecare
formular este un element al matricii (array) f or ms[ ] . Primul formular
are rangul 0.
document . f or ms. l engt h returneaz numrul de formulare ale
documentului.
Exemplu:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>form</title>
</head>
<body>
<form name="form1">
<input name="zona1" type="text" id="zona1" />
<br />
<input name="zona2" type="text" id="zona2" />
</form>
<form name="form2" id="form2" method="post" action="">
<input name="zona3" type="text" id="zona3" />
<br />
<input name="zona4" type="text" id="zona4" />
</form>
<form name="form3" id="form3" method="post" action="">
<p>
<input name="zona5" type="text" id="zona5" />
<br />
<input name="zona6" type="text" id="zona6" />
</p>
</form>
<script language="JavaScript" type="text/JavaScript">
for(i=0;i<document.forms.length;i++){
document.write(document.forms[i].name+"<br />");
}
</script>
</body>
</html>
Figura 7.22
(continuare)
234
f r ames[ ] document . f r ames[ ]
Setul de cadre (frames, n limba englez) afiate. Fiecare cadru este un
element al matricii f r ames[ ] . Ele sunt referite prin numrul lor de
ordine sau prin numele lor. Primul este de rang 0.
Document . f r ames. l engt h returneaz numrul de cadre ale
documentului.
i mages[ ] document . i mages[ ]
Setul de imagini ale documentului. Ele sunt inserate cu tag-ul
<i mg/ >. Fiecare imagine este un element al matricii (array)
i mages[ ] . Ele sunt referite prin numrul lor de ordine sau prin
numele lor.
document . i mages. l engt h returneaz numrul de imagini ale
documentului.
Imaginile recunosc proprietile care corespund atributelor tag-ului
<i mg/ >: bor der , hei ght , hspace, l owsr c, name,
sr c, vspace, wi dt h.
n plus, proprietatea compl et e conine valoarea true dac
imaginea s-a ncrcat integral.
Exemplu:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>demo</title>
</head>
<body>
<img src="sigla.jpg" name="sigla" width="150" height="300" hspace="5"
vspace="10" border="0" lowsrc="siglamin.JPG" id="sigla" />
<script language="JavaScript" type="text/JavaScript">
text="Proprietatile imaginii: <br />";
text+="border= "+document.sigla.border+"<br />";
text+="complet= "+document.sigla.complete+"<br />";
text+="height= "+document.sigla.height+"<br />";
text+="hspace= "+document.sigla.hspace+"<br />";
text+="lowsrc= "+document.sigla.lowsrc+"<br />";
text+="name= "+document.sigla.name+"<br />";
text+="src= "+document.sigla.src+"<br />";
text+="vspace= "+document.sigla.vspace+"<br />";
text+="width= "+document.sigla.width+"<br />";
document.write(text);
</script>
</body>
</html>
i nner HTML document . i nner HTML
Conine codul HTML al documentului. Acest atribut poate fi aplicat
ntregului obiect din document pentru a recupera sau pentru a
modifica codul (X)HTML care l nchide.
Figura 7.22
(continuare)
235
Exemplu:
<body>
<p id=paragraf><b>text</b>demo</p>
<script>
element=document.getElementByld(paragraf);
alert(element.innerHTML);
</script>
i nner Text document . i nner Text
Recupereaz sau definete codul (X)HTML ca pe un text, fr
interpretarea tag-urilor.
l ast Modi f i ed document . l ast Modi f i ed
Data i ora ultimei modificri a documentului. Este un obiect
String.
Exemplu:
<script>
Document.write(document.lastModified);
</script>
l ayer s[ ] document . l ayer s[ ]
Setul de straturi reprezentate n pagina (X)HTML prin
tag-urile <di v>sau <l ayer >. Pot fi accesate prin atributele i d sau
name.
document . l ayer s. l engt h returneaz numrul de straturi ale
documentului.
Remarc. Setul de layer-e nu este recunoscut de Netscape.
l i nkCol or document . l i nkCol or
Codul culorii atribuite link-urilor din documentul (X)HTML, definite prin
atributul l i nk al tag-ului <body>.
l i nks[ ] document.links[]
Matricea l i nks[ ] conine un obiect Li nk pentru fiecare tag
<a hr ef =. . . > </ a> prezent n documentul (X)HTML.
Obiectele l i nks au aceleai proprieti ca obiectul l ocat i on.
Exemplu:
...
<a href=http://www.dumitrascu.ro>Link</a>
<form>
<input type=button value=Schimba link-ul
onClick=document.links[0].href=http://www.upg-ploiesti.ro>
</form>
l ocat i on document . l ocat i on
Conine URL-ul documentului.
Figura 7.22
(continuare)
236
Exemplu:
...
<body>
<script>
document.write(document.location);
//se afieaz, de exemplu http://www.dumitrascu.ro
</script>
</body>
Exemplu:
<script>
document.write(adresa actuala: +document.location);
document.location=http://www.multimedia.fr;
</script>
pl ugi ns[ ] document . pl ugi ns[ ]
Setul de plug-ins coninute n documentul (X)HTML.
Fiecare plug-in este un element al matricii pl ugi ns[ ] . Ele sunt
referite prin numrul lor de ordine.
document . pl ugi ns. l engt h returneaz numrul de plug-ins ale
documentului.
r ef er r er document . r ef er r er
URL-ul documentului de la care documentul curent a fost ncrcat.
scr i pt s[ ] document . scr i pt s[ ]
Setul de script-uri coninute n documentul (X)HTML.
Ele sunt reprezentate n document prin tag-ul <scr i pt >. Fiecare
script este un element al matricii (array) scr i pt s[ ] .
Ele sunt referite prin numrul lor de ordine.
document . scr i pt s. l engt h returneaz numrul de script-uri ale
documentului.
t i t l e document . t i t l e
Titlul documentului, cel care este specificat n tag-ul <t i t l e>.
URL document . URL
URL-ul documentului. Aceast proprietate este puin utilizat cci ea
este echivalent cu document . l ocat i on. hr ef .
vl i nkCol or document . vl i nkCol or
Codul culorii atribuit link-urilor vizitate n document, acelai care este
definit prin atributul vl i nk al tag-ului <body> (vezi proprietatea
al i nkCol or ).
Figura 7.22
(continuare)
237
Metodele fundamentale ale obiectului Document
Cele mai utilizate metode ale obiectului Document sunt prezentate n detaliu n
figura 7.23.
Metod Sintax
cl ose( ) document . cl ose( )
Afieaz datele ncrcate dar care nu sunt nc afiate i oprete fluxul de
intrare al datelor n document. Dac toate datele nu au fost ncrcate,
documentul nu este afiat integral.
Aceast metod nu cere nici un argument. Metoda nu este indispensabil
ntruct metoda wr i t e( ) care scrie n document realizeaz n mod
automat deschiderea (open) i nchiderea (cl ose) fluxului de date
(vedei paragraful urmtor: tergerea i rescrierea coninutului unui
document).
get El ement ByI d( ) document . get El ement ByI d( id)
Returneaz sub form de matrice (array) lista elementelor identificate prin
nume sau id-ul indicat. Dac nu exist nici un element de tipul indicat,
metoda returneaz null.
Elementele dispun de proprieti i de metode specifice obiectelor.
Aceast metod este folosit de asemenea pentru detectarea
navigatorului.
Exemplu:
<body>
<p id="unu">Primul paragraf </p>
<p id="doi">Al doilea paragraf </p>
<script language="JavaScript" type="text/JavaScript">
//Modifica aliniamentul unui paragraf
para=document.getElementById("unu");
para.align="center";
</script>
</body>
<script language="JavaScript" type="text/JavaScript">
//Detecteaza navigatorul
if(document.layers) Nav="NN4";
else if((document.all)&&(document.getElementById))
Nav="IE5-IE6";
else if(document.getElementByID)Nav="NN6";
alert(Nav);
</script>
get El ement sByName( ) document . get El ement sByName( Nume)
Returneaz sub form de matrice (array) lista elementelor identificate prin
nume sau id-ul indicat. Dac nu exist nici un element de tipul indicat,
metoda returneaz null.
Exemplu:
<body>
<p id="unu">Primul paragraf </p>
<p id="doi">Al doilea paragraf </p>
<script language="JavaScript" type="text/JavaScript">
//Modifica aliniamentul unui paragraf
para=document.getElementsByName("unu");
para[0].align="center";
</script>
</body>
Figura 7.23
238
get El ement sByTagName( ) document . get El ement sByTagName( tag)
Returneaz sub form de matrice (array) lista elementelor identificate prin
tag-ul indicat.
Dac nu exist nici un element de tipul indicat, metoda returneaz null.
Exemplu:
<body>
<p id="unu">Primul paragraf </p>
<p id="doi">Al doilea paragraf </p>
<script language="JavaScript" type="text/JavaScript">
//Modifica aliniamentul unui paragraf
el=document.getElementsByTagName("p");
el[0].align="center";
</script>
</body>
open( ) document . open( TipMime,replace)
Deschide documentul pentru a trimite datele care vor fi afiate cu metoda
wr i t e( ) . Primul argument indic tipul MIME al datelor (text/html;
text/plain; image/gif; image/jpeg; image/sc-bitmap;
plugIn (orice model plug-in Netscape de tip MIME)).
Al doilea argument precizeaz dac datele vor nlocui documentul deja
prezent n fereastra navigatorului (true) sau se vor aduga celor
existente (false). Cele dou argumente sunt facultative.
Aceast metod nu este indispensabil ntruct metoda wr i t e( ) care
scrie n document realizeaz n mod automat deschiderea (open) i
nchiderea (cl ose) fluxului de date.
Remarc. Cele dou script-uri sunt echivalente.
Exemplu:
<script language="JavaScript" type="text/JavaScript">
fernoua=window.open("","nou","height=200, width=400");
fernoua.document.open();
fernoua.document.write("<head><title>demo</title></head> <body><b>La multi
ani impreuna!</b></body>");
fernoua.document.close();
</script>
Exemplu:
<script language="JavaScript" type="text/JavaScript">
fernoua=window.open("","nou","height=200, width=400");
fernoua.document.write("<head><title>demo</title></head><body><b>La multi
ani impreuna!</b></body>");
</script>
wr i t e( ) document . wr i t e( ir1,ir2)
Introduce n document: date de tip caracter, variabile i tag-uri. Pentru
caractere speciale (apostrof, de exemplu) introducei caracterele
corespunztoare.
Figura 7.23
(continuare)
239
Exemplu:
<script>
document.write(D\ ale Carnavalului);
//Afieaz Dale Carnavalului
</script>
wr i t el n( ) document . wr i t el n( ir1, ir2)
Introduce date de tip caracter, variabile i tag-uri i insereaz un salt de
linie la sfrit. Cum salturile de linie sunt ignorate de ctre navigatoare,
aceast metod este identic cu wr i t e( ) .
Revenind la metodele open() i close() ale obiectului Document
Obiectul Document conine metodele open( ) i cl ose( ) (vezi metodele
obiectului Document , figura 7.23).
Atunci cnd utilizai metoda wr i t e( ) sau wr i t el n( ) (vezi metodele
obiectului Document , figura 7.23) trimitei, de fapt, datele ctre ceva care se
cheam stream (flux), care corespunde unei zone rezervate de date. Datele
rmn n stream pn n momentul n care navigatorul este pregtit s le afieze
n fereastra sa. Va trebui s deschidei (open) iar stream-ul nainte de a-l utiliza
apoi s-l nchidei (cl ose).
Metodele open( ) i cl ose( ) efectueaz cele dou aciuni.
Metoda open( ) indic navigatorului c dorii s scriei un nou flux de date n
obiectul Document curent.
Metoda cl ose( ) semnaleaz sfritul aciunii de scriere; ea oblig navigatorul
s afieze toate datele care au mai rmas n flux (stream).
Utilizarea celor dou metode nu este ns obligatorie ntruct wr i t e( ) i
wr i t el n( ) realizeaz n mod automat deschiderea (open) i nchiderea
(cl ose) stream-ului.
n concluzie, pentru a trimite un flux de date ctre fereastra navigatorului,
parcurgei urmtorii pai:
Utilizai document . open( ) pentru a deschide obiectul Document i
pentru a putea din nou scrie.
Figura 7.23
(continuare)
Utilizai document . wr i t e( ) / document . wr i t el n( ) .
240
Utilizai document . cl ose( ) pentru a indica navigatorului c ai
terminat de scris n fereastra sa.
Remarci:
Metodele open( ) i cl ose( ) nu deschid i nici nu nchid noile ferestre.
Dac utilizai metoda document . open( ) , n fereastra curent, script-ul
dumneavoastr, care face parte din documentul curent, va fi ters i n consecin va
nceta s se execute. Mult mai bine este s utilizai metodele open( ) i cl ose( ) cu
ferestre sau cadre separate.
Cu metoda document . open putei specifica un tip MIME care v ofer
posibilitatea de a crea un document de un anume tip ce conine imagini i
documente utilizate n cadrul plug-ins.
Remarc. MIME (Multipurpose Internet Mail Extension) este un standard pentru documentele
Internet. Atunci cnd server-ul trimite un document unui browser, i se indic i tipul MIME al
documentului pentru ca navigatorul s tie cum s-l afieze. Printre tipurile MIME cele mai
rspndite amintim formatul HTML (tipul MIME text/html) i formatul text (tipul
text/plain).
Aplicaii ale metodelor open() i close()
Analizai urmtorul document HTML (vezi figura 7.24). Precizai rolul
instruciunilor: document . open( ) i document . cl ose( ) .
Figura 7.24
Script-ul prezentat ([1]) n figura 7.25 evalueaz browser-ul (Netscape,
Internet Explorer) i modific textul n funcie de tipul su. Comentai script-ul.
241
Remarc. Nu uitai c atunci cnd folosii metodele wr i t e ( ) sau wr i t el n( ) nu putei
schimba coninutul documentului curent fr s rencrcai complet pagina.
Obiectul Frame
Atunci cnd o fereastr conine mai multe cadre, fiecare dintre ele este
reprezentat n JavaScript printr-un obiect Fr ame.
Remarc. Obiectul Fr ame este prezentat n detaliu n Conversaia 10.
Obiectul Location
Obiectul Locat i on este un fiu al obiectului Wi ndow. El stocheaz informaii
despre adresa URL a unei ferestre specificate. Fia obiectului Locat i on este
prezentat n figura 7.26.
Remarc. Dei utilizatorii vd URL-ul afiat n caseta de locaie (Locat i on) a navigatorului,
programatorii JavaScript lucreaz cu obiectul Locat i on.
Fia obiectului Location
Obiectul printe: Wi ndow
Proprieti: hash, host , host name, hr ef , pat hname,
por t , pr ot ocol , sear ch
Metode: assi gn( ) , r el oad( ) , r epl ace( )
Gestionarii de evenimente: - Figura 7.26
Figura 7.25
242
Proprieti e obiectului Location l
Proprietate
Proprietile obiectului Locat i on sunt prezentate n detaliu, n figura 7.27. Ele
reprezint pri ale URL-ului.
Sintax
hash document . l ocat i on. hash
Conine partea # (diez) a adresei Web specificate n URL.
Exemplu:
<script>
document.write(document.location.hash);
//afieaz top, dac adresa este http://www.ionescu.com/index.htm#top
</script>
host document . l ocat i on. host
Numele server-ului i postul URL.
Exemplu:
<script>
document.write(document.location.host);
//afieaz www.ionescu.com (vezi hash)
</script>
host name document . l ocat i on. host name
Numele server-ului.
Exemplu:
<script>
document.write(document.location.hostname);
//afieaz www.ionescu.com (vezi hash)
</script>
hr ef document . l ocat i on. hr ef
Adresa Web (URL-ul) complet.
Exemplu:
<script>
document.write(document.location.href);
/*afieaz www.ionescu.com/linkuri/pref.htm dac pagina afiat este la adresa
http://www.ionescu.com/linkuri/pref.html */
</script>
pat hname document . l ocat i on. pat hname
Calea de acces la document.
Exemplu:
<script>
document.write(document.location.pathname);
//afieaz /linkuri/pref.html (vezi href)
</script>
por t document . l ocat i on. por t
Numrul de port al URL-ului (n general 80).
Exemplu:
<script>
document.write(document.location.port);
/*afieaz 80, dac adresa este http://www.ionescu.com:80/linkuri/pref.html*/
</script>
Figura 7.27
243
pr ot ocol document . l ocat i on. pr ot ocol
Partea protocol a URL-ului (n general http).
sear ch document . l ocat i on. sear ch
Partea de cutare a adresei URL de dup semnul ?
Exemplu:
<script>
document.write(document.location.search);
</script>
Metodele obiectului Location
Metodele obiectului Location sunt prezentate n detaliu n figura 7.28.
Metod Sintax
assi gn( ) document . l ocat i on. assi gn( URL)
Modific URL-ul documentului.
Exemplu:
<form>
<input type=button value=Yahoo!
onClick=window.location.assign(http://www.yahoo.com)>
</form>
Exemplu:
<form>
<input type=button value=Yahoo!
onClick=window.location=http://www.yahoo.com>
</form>
r el oad( ) document . l ocat i on. r el oad( )
Rencarc documentul curent n fereastra browser-ului. Dac argumentul
(rencrcare) are valoarea logic true documentul este rencrcat de pe
server; n caz contrar el este recuperat n cache-ul navigatorului.
r epl ace( ) document . l ocat i on. r epl ace( URL)
nlocuiete pagina curent cu o nou pagin. Metoda nu afecteaz
istoricul navigatorului. Utilizarea metodei este justificat pentru a evita
revenirea la ecranele de prezentare sau la paginile temporare de interes
minim.
Aplicaii
Modificai URL-ul documentului curent.
n figura 7.29 este prezentat secvena HTML corespunztoare.
Figura 7.29
Figura 7.27
(continuare)
Figura 7.28
244
Modificai URL-ul documentului ntr-o fereastr secundar pornind de la fereastra
principal.
n figura 7.30 este prezentat documentul XHTML complet al aplicaiei.
Obiectul History
Obiectul Hi st or y este un alt obiect fiu al obiectului Wi ndow. Acest obiect
conine URL-ul paginilor vizitate nainte i dup pagina curent.
Fia obiectului Hi st or y este prezentat n figura 7.31.
Fia obiectului History
Obiectul printe: wi ndow
Proprieti: l engt h
Metode: back( ) , f or war d( ) , go( )
Gestionarii de evenimente: -
Proprieti e obiectului History l
Proprietate
Proprietile obiectului History sunt prezentate n detaliu n figura 7.32.
Sintax
l engt h( ) wi ndow. hi st or y. l engt h
Numrul de pagini din istoric.
Exemplu:
<body>
<a href=JavaScript: window.history.go(window.history.length-1) >Ultimele
pagini </a>
</body>
Figura 7.32
Figura 7.30
Figura 7.31
245
Remarci:
Obiectul History mai conine i proprietile: current, previous i next care
stocheaz URL-ul curent, anterior i urmtor al documentului n lista de istoric.
Din motive de securitate, aceste obiecte sunt normal inaccesibile n browser-ele actuale.
Metodele obiectului H story i
Trei metode ale obiectului History permit deplasarea n lista de istoric (vezi
figura 7.33).
Metod Sintax
back( ) wi ndow. hi st or y. back( )
Retur la URL-ul precedent n istoric. Aceast metod corespunde unui
clic pe butonul back al navigatorului.
Exemplu:
<body>
<form>
<input type=button value=Pagina precedenta
onClick=window.history.back()>
</form>
</body>
f or war d( ) wi ndow. hi st or y. f or war d( )
Trece la URL-ul urmtor n istoric. Aceast metod corespunde unui clic
pe butonul forward al navigatorului.
go( ) wi ndow. hi st or y. go( Numr)
Avanseaz sau se ntoarce n istoric cu numrul de pagini indicate.
Exemplu:
<body>
<a href=JavaScript:window.history.go(-2)> Mergi inapoi cu 2 pagini</a><br />
<a href=JavaScript:window.history.go(2)> Mergi inainte cu 2 pagini</a>
</body>
Figura 7.33
Obiectul Event
Obiectul Event este un alt fiu al obiectului Wi ndow.
Fia obiectului Event este prezentat n figura 7.34.
Fia obiectului Event
Obiectul printe: wi ndow
246
Proprieti: al t key, but t on, cancel abl e, cl i ent X,
ct r l Key, cur r ent Tar get , dat a,
f r omEl ement , hei ght , keyCode, l ayer X,
l ayer Y, modi f i er s, pageX, pageY,
r eason, r et ur nVal ue, scr eenX, scr eenY,
shi f t key, sr cEl ement , sr cFi l t er ,
t ar get , t oEl ement , t ype, whi ch, wi dt h,
x, y
Metode: -
Gestionarii de evenimente: -
Proprieti e obiectului Event l
Cteva din proprietile obiectului Event sunt prezentate n detaliu n figura
7.35.
Proprietate Sintax
al t key event . al t key
t
t
Conversaia 8
Obiectul Form. Validarea formularelor
n aceast conversaie:
Obiectul Form. Aplica ii
(Sub)obiectele Form. Aplica ii
Valida i un formular cu JavaScript. Aplica ii
EXEMPLUL 8 JAVASCRIPT (varian a 1)
EXEMPLUL 8 JAVASCRIPT (varian a 2)
Tem
Obiectul Form
Momentul apariiei formularelor (X)HTML a fost considerat ca decisiv n evoluia
Web-ului.
Formularele, structurate n cmpuri i zone de date sunt ideale pentru a realiza o
interactivitate ntre dumneavoastr i vizitatorii site-ului pe care l-ai creat.
O dat cu apariia limbajului JavaScript puterea formularelor (X)HTML a crescut i
mai mult.
Cu JavaScript putei modifica n mod dinamic coninutul elementelor unui
formular (zon simpl de text, zon de text multilinie, caset de validare etc.).
JavaScript v permite s adugai noi funcii de prelucrare a formularelor
dumneavoastr (X)HTML, att pe partea de client ct i pe partea de server.
n concluzie, crearea unui site Web cu adevrat performant presupune
cunoaterea att a facilitilor formularelor (X)HTML ct i a obiectului For mal
limbajului JavaScript.
274
Fia obiectului For meste prezentat n figura 8.1.
Fia obiectului Form
Obiectul printe:
Document
Subobiecte: but t on, checkbox, f i l eupl oad, hi dden,
i nput , passwor d, sel ect , opt i on, r adi o,
r eset , t ext , t ext ar ea, submi t
Proprieti:
accept Char set , act i on, el ement s[ ] ,
encodi ng, enct ype, l engt h, met hod, name,
t ar get
Metode:
r eset ( ) , submi t ( ) , t ags( )
Gestionarii de evenimente:
onCont ext Menu, onCont r ol Sel ect , onCopy,
onCut , onDbl Cl i ck, onDeAct i vat e, onDr ag,
onDr agend, onDr agent er , onDr agLeave,
onDr agOver , onDr agSt ar t , onFocusOut ,
onHel p, onKeyDown, onKeyPr ess, onKeyUp,
onMouseDown, onMouseEnt er , onMouseLeave,
onMouseMove, onMouseOut , onMouseOver ,
onMouseUp, onMousewheel , onMove,
onMoveend, onMovest ar t , onPast e,
onPr oper t yChange, onReset , onResi ze,
onResi zeEnd, onResi zeSt ar t ,
onSel ect St ar t , onSubmi t (vezi Conversaia 6).
Relaia dintre obiectul Form i tag-ul <form>
Fiecare formular care aparine unei pagini (X)HTML este reprezentat n JavaScript
printr-un obiect For m, al crui nume este identic cu atributul name al tag-ului
<f or m>.
Aadar, obiectul For m este un obiect JavaScript reprezentat prin perechea de
tag-uri (X)HTML: <f or m>i </ f or m>.
Remarci:
Obiectul Document conine o matrice de obiecte For m care poart numele de
f or ms.
Dup ncrcarea i analiza documentului (X)HTML, aceast matrice (forms) va conine
cte un obiect For m pentru fiecare pereche de tag-uri <f or m> i </ f or m>
prezentat n documentul (X)HTML.
Documentul (X)HTML din figura 8.2 conine trei obiecte For m.
Figura 8.1
275
Deoarece matricea f or ms este o proprietate a obiectului Document putei
referi cele trei obiecte For mdup cum urmeaz (figura 8.3).
Dac nu agreai referinele cu numere (forms[0], forms[1], ...) putei atribui un
nume fiecrui obiect For m(vezi figura 8.4).
Atunci cnd documentul (X)HTML va fi analizat, obiectele For male limbajului
JavaScript vor avea proprietatea name atribuit n mod automat cu numele:
formularZero; FormularUnu; formularDoi. Putei accesa cele trei obiecte For m,
dup cum urmeaz (figura 8.5).
Figura 8.2
Figura 8.3
Figura 8.4
Figura 8.5
276
Remarci:
Este important s observai c numele atribuite obiectelor For msunt n totalitate nume
de variabile JavaScript valide (formularZero; formularUnu; formularDoi).
(X)HTML nu impune nici o limit valorilor posibile pentru un atribut; n consecin,
numele celor trei atribute name (conin spaii) din figura 8.6 sunt perfect valabile.
Dac dorim s referim aceste nume n JavaScript, vom scrie urmtorul cod JavaScript
(figura 8.7).
Figura 8.6
Figura 8.7
Din nefericire, nici una din cele trei instruciuni nu este valid (!) deoarece JavaScript nu
va ti s trateze spaiul (blank-ul) din mijlocul fiecrui nume. Aadar, singurul mod de a
accesa obiectele For meste acela de a utiliza matricea f or ms.
Pentru a atribui un nume elementelor ce aparin documentelor (X)HTML va trebui s
folosii nume valide pentru variabilele JavaScript.
Relaia dintre elementele (obiectele) Form i obiectul Form
Proprietatea cea mai important a obiectului For meste el ement s care
conine un obiect pentru fiecare din elementele formularului. Proprietatea
el ement s poate fi folosit fie pentru referirea unui element (obiect) dintr-un
formular, fie pentru validarea tuturor elementelor dintr-un formular.
277
Aplicaie
Analizai documentul (X)HTML din figura 8.8. Scriei instruciunile JavaScript pentru
accesul la cele trei obiecte (Text ) ale formularului.
Pentru a avea acces la toate cele trei obiecte t ext ale formularului, putem scrie (fr
efort!) urmtorul cod JavaScript (figura 8.9).
Figura 8.8
Figura 8.9
Remarc. Am specificat un atribut name pentru fiecare obiect Text (ca i n cazul
formularelor).
S presupunem c dorii s ncrcai documentul (X)HTML din figura 8.8 ntr-un browser,
iar apoi introducei numele dumneavoastr (exemplu, Popescu) n zona simpl de text
nume. Cum procedai pentru a extrage (afia) aceast valoare? Rspunsul nu este
complicat! Cu mici diferene, toate obiectele dintr-un formular respect acelai format de
baz; n particular ele posed proprietatea val ue care conine valoarea de control
curent. Conceptul de valoare de control depinde de tipul de control; n cazul unei zone
simple de text, proprietatea value va conine irul de caractere curent n obiectul afiat
n fereastra navigatorului. Revenind la aplicaia noastr, pentru a afia numele pe care
l-ai introdus, scriei codul (figura 8.10):
278
n mod analog, pentru a defini numele dumneavoastr, scriei codul (figura 8.11):
Remarc. Fiecare obiect JavaScript al unui formular conine propriile proprieti i metode care
permit i alte aciuni n afar de citirea i definirea valorilor acestora.
Matricea elements
Este agreabil s poi avea acces la un element (obiect) al formularului direct prin
numele su, dar uneori dorim s prelucrm n mod automat obiectele
formularului. n plus, obiectele nu au tot timpul un nume, sau numele lor nu este
valid pentru o variabil JavaScript. Pentru astfel de situaii, vei putea folosi
matricea el ement s a obiectului For m.
Exist dou variante de acces la elementele matricii:
prin numrul de index;
prin nume.
Iat cum procedm pentru a accesa prin numrul de index, elementele
formularului din figura 8.12.
Varianta 1
Figura 8.10
Figura 8.11
Figura 8.12
279
Remarc. n acest formular am definit trei obiecte Text . Ultimele dou obiecte au un nume care
nu este un nume de variabil JavaScript valid.
n figura 8.13 este prezentat codul surs JavaScript pentru Varianta 1.
Varianta 2
n figura 8.14 este prezentat codul surs JavaScript pentru Varianta 2.
Proprietile obiectului Form
Proprietile obiectului For msunt prezentate n detaliu n figura 8.15.
Proprietate Sintax
accept Char set document . f or m. accept Char set
Setul de caractere acceptat de ctre server-ul care prelucreaz datele.
act i on document . f or m. act i on
Corespunde atributului act i on al tag-ului <f or m>.
el ement s[ ] document . f or m. el ement s[ ]
Figura 8.13
Figura 8.15
Figura 8.14
280
Elementele unui formular (zone de text i butoane). Fiecare element
este o dat a matricii (array) el ement s[ ] . Ele sunt referite prin
numrul de ordine (exemplu: elements[2]) sau prin numele lor
(exemplu: elements[zona1]).
Proprietatea l engt h returneaz numrul de elemente:
f or m. el ement s. l engt h. Un formular poate conine urmtoarele
tipuri de elemente: button, checkbox, fileUpload,
hidden, input, password, select, option, radio,
reset, text, textarea. Fiecrui element i corespunde un
obiect.
Exemplu:
encodi ng document . f or m. encodi ng
Corespunde atributului encodi ng al tag-ului <f or m>.
enct ype document . f or m. enct ype
Corespunde atributului enct ype al tag-ului <f or m>.
l engt h document . f or m. l engt h
r
Conversaia 9
Obiectul Image
n aceast conversaie:
Obiectul Image. Aplica ii
Crea i un rollover cu JavaScript
Crea i un joc cu JavaSc ipt
Crea i anima ii simple cu JavaScript
Crea i imagini reactive (client) cu JavaScript. Aplica ii
EXEMPLUL 9 JAVASCRIPT
Tem
Obiectul Image
Ca urmare a popularitii lor, imaginile au ptruns n aproape toate domeniile
navigrii pe Web. De exemplu, n numeroase site-uri Web, butoanele (X)HTML au
fost nlocuite prin imagini clicabile (rollovere) care se transform atunci cnd
trecei mouse-ul pe deasupra acestora. Cu siguran c apreciai aceste
interesante efecte grafice dar ignorai poate faptul c puterea acestora se afl n
limbajul JavaScript.
n consecin, crearea unui site Web cu adevrat puternic presupune
cunoaterea facilitilor imaginilor (X)HTML i a obiectului Image al limbajului
JavaScript.
Fia obiectului I mage este prezentat n figura 9.1.
344
Fia obiectului Image
Obiectul printe
Document
Cum se creeaz obiectul?
Constructorul Image()
Proprieti:
border, complete, height, width, hspace,
vspace, name, src, lowsrc
Metode: Obiectul Image nu posed nici o metod dar putei
modifica proprietile imaginilor n mod dinamic.
Gestionarii de evenimente:
onAbort, onError, onKeyDown, onKeyPress,
onKeyUp, onLoad, onClick, onDblClick,
onMouseDown, onMouseOut, onMouseOver (vezi
Conversaia 6).
Figura 9.1
Relaia dintre obiectul Image i tag-ul <img>
Manipularea imaginilor din cadrul unui document (X)HTML depinde n mare
msur de obiectul Image al limbajului JavaScript. n cursul ncrcrii
documentului (X)HTML n navigatorul Web, interpretorul JavaScript creeaz un
obiect Image pentru fiecare tag <img> prezent n document. El plaseaz toate
obiectele Image ntr-o matrice images (subobiect al obiectului Document).
n loc s utilizai matricea images, putei specifica pentru fiecare tag <img> un
atribut name=, care va da un acces direct obiectelor Image.
Iat cum procedm pentru a accesa obiectul Image asociat tag-ului <img> din
figura 9.2, care reprezint prima imagine a unui document (X)HTML.
<img src=sigla.jpg name=LUMINABLANDA />
Obiectul Image poate fi accesat cu una din instruciunile prezentate mai jos:
document.images[0];
document.LUMINABLANDA.
Remarc. Dac dintr-un motiv sau altul nu ai putut da imaginilor dumneavoastr un nume valid
de variabil JavaScript, atunci accesul prin nume rmne posibil numai prin intermediul matricei
images, ca i n cazul matricei elements din obiectul Form. De exemplu, definiia imaginii:
<img name=PLOIESTI VEST src=gara.jpg /> este accesibil prin
utilizarea matricei images, dup cum urmeaz: var
gara=document.images[PLOIESTI VEST].
Constructorul Image()
Figura 9.2
345
Interpretorul JavaScript creeaz un obiect Image pentru fiecare tag <img> pe
care l ntlnete ntr-un document (X)HTML, dar atenie, chiar i
dumneavoastr l putei crea fr asocierea unui tag <img>, utiliznd
constructorul de obiecte Image() (vezi figura 9.3).
var imagine1=new Image();
Remarci
Instruciunea JavaScript din figura 9.3 genereaz un obiect Image fr a mai fi nevoie
de un tag <img>.
Putei ncrca un fiier imagine n obiectul Image atribuind n mod simplu o adres Web
proprietii src (figura 9.4).
...
imagine1.src=sigla.jpg
Dup ncrcarea acestei imagini, s-a creat un obiect Image care conine o imagine
(ncrcat), dar non vizibil n navigatorul Web.
Pentru ca o imagine s se afieze n navigatorul Web, ea trebuie s fie asociat n mod
obligatoriu unui tag <img> aflat n documentul (X)HTML; n caz contrar, navigatorul
Web ignor totul!
Iat cum folosim imagini fr a utiliza tag-ul <img> (vezi figura 9.5).
<img src=moara.jpg name=MOULINROUGE />
document.MOULINROUGE.src=MOARACUNOROC.src;
Imaginea coninut n document.MOULINROUGE va fi nlocuit prin imaginea
coninut n MOARACUNOROC. n plus, ntruct document.MOULINROUGE
este asociat unui tag <img> noua imagine va fi afiat n locul precedentei
imagini.
Proprietile obiectului Image
Proprietile obiectului Image sunt prezentate n detaliu n figura 9.6.
Proprietate Sintaxa
border document.images[].border
Corespunde atributului border al tag-ului <img>.
complete document.images[].complete
Valoare logic (true/false); true - imaginea a fost n ntregime
ncrcat; false imaginea nu a fost ncrcat n ntregime.
height document.images[].height
Corespunde atributului height al tag-ului <img>.
Figura 9.6
Figura 9.5
Figura 9.3
Figura 9.4
346
width document.images[].width
Corespunde atributului width al tag-ului <img>.
hspace document.images[].hspace
Corespunde atributului hspace al tag-ului <img>.
vspace document.images[].vspace
Corespunde atributului vspace al tag-ului <img>.
name document.images[].name
Corespunde atributului name al tag-ului <img>.
src document.images[].src
Corespunde atributului src al tag-ului <img>.
lowsrc document.images[].lowsrc
Corespunde atributului lowsrc al tag-ului <img>.
Aplicaii
Precizai rezultatul execuiei urmtorului program JavaScript (figura 9.7).
Figura 9.7
Figura 9.6
(continuare)
n figura 9.8 este prezentat rezultatul execuiei programului JavaScript, pe care v rugm
s-l comentai.
347
Comentai urmtorul program JavaScript (figura 9.9).
Figura 9.8
Figura 9.9
Scriei un program JavaScript care afieaz proprietile unui obiect Image.
n figura 9.10 este prezentat documentul (X)HTML complet.
348
Figura 9.10
Comentarii:
Obiectul Document (tot ceea ce se gsete ntre tag-urile <body> i </body>) conine
imaginea cu numele sigla.jpg. La rndul su, aceast imagine conine proprietile:
src, name, height, width, border i complete. Aceast ierarhie
explic modul n care sunt accesate proprietile imaginii: document.test.src,
document.test.width etc.
Valorile proprietilor (src, name, height, width, border) sunt extrase din
definiia acestui obiect.
Valoarea true (vezi proprietatea complete) rezult din modul n care imaginea a
putut fi corect ncrcat n navigator. n caz contrar valoarea va fi false.
Creai un joc cu JavaScript
De la joc la program
Vom prsi pentru scurt timp problema rezervoarelor cu care v-am pisat n conversaiile
anterioare, invitndu-v n cele ce urmeaz s v jucai puin! Da, ai neles bine! Ne
vom juca mpreun! Despre ce este vorba? Vom proiecta i realiza un program
JavaScript pentru jocul: ZECE BEE DE CHIBRIT!
Pentru aceia dintre dumneavoastr care nu cunosc acest joc deoarece pn n prezent
au avut doar preocupri serioase, precizm n cele ce urmeaz care sunt regulile
jocului.
349
Exist la nceput 10 bee de chibrit i doi juctori. Cnd i vine rndul, un juctor poate
ridica un b, cel mult dou! Va pierde (!) acel juctor care rmne cu ultimul b de
chibrit.
Ceea ce se cere este s realizai un program JavaScript pentru jocul ZECE BEE DE
CHIBRIT avndu-i ca juctori pe dumneavoastr i Mria sa calculatorul!
Specificaii de programare
n figurile 9.11 i 9.12 sunt prezentate: ecranul cu 10 bee de chibrit, specificaiile de
programare. Tabela de variabile, mesajele generate n timpul jocului sunt prezentate n
figurile 9.13, respectiv 9.14.
Specificaii de programare
Descriere. Programul afieaz zece bee de chibrit (1-10) i un buton Joc Nou care
permite reluarea jocului.
Lista de funcii ale programului
1. Permite juctorului s extrag
unu/dou bee.
2. Stabilete strategia de joc a
calculatorului.
3. Actualizeaz numrul de bee rmase.
4. Stabilete ctigtorul (n final).
5. Permite reluarea jocului.
6. Stop.
Figura 9.11
Figura 9.12
350
Tabela de variabile
Variabile de intrare Variabile de stare Variabile de ieire
i: variabila de control a buclei for
x: numrul bului extras (1-10)
bete: numrul de bee (rmase)
nsrc: rangul obiectului Image n
matricea images
chibrit1-chibrit10: numele imaginilor cu
cele 10 chibrite
f1: numele formularului
Buton: numele butonului Joc Nou
Mesaje
Mesaj Descriere
Jocul s-a terminat! Ai ctigat! Desemneaz ctigtorul
Jocul s-a terminat! Ai pierdut! Desemneaz nvinsul.
Calculatorul intervine: Acum e rndul meu! Este rndul calculatorului s joace.
Calculatorul intervine: Acum e rndul tu! Este rndul juctorului.
Documentaia de proiectare
Pseudocodul este prezentat n figura 9.15.
Pseudocodul
10Betechibrit BEGIN
//formeaza pagina html cu imaginile chibritului
bete=10
//Trateaza evenimentele generate
IF1 IF(se apasa butonul Joc Nou)
DO actualizare
IF1 ENDIF
IF2 IF(se executa click pe imagine chibrit)
DO alegeChibrit(numar_bat_chibrit)
IF2 ENDIF
10betechibrit END
ACTUALIZARE BEGIN
FOR1 bete=10
FOR(i=1;i<=bete;i++)
nsrc=chibrit+i
imagine_nsrc.src=chibrit.gif
FOR1 ENDFOR
ACTUALIZARE END
AlegeChibrit BEGIN
Date intrare: x-numarul batului de chibrit extras
//se verifica daca extragerea batului a fost
//din pozitia corecta
Figura 9.14
Figura 9.15
Figura 9.13
351
IF3 IF(x<=bete) AND (bete-x)<2
//se sterge imaginea betelor de chibrit extrase
FOR2 FOR(i=x;i<=bete;i++)
inlocuieste imaginea chibrit.jpg prin gol.jpg
FOR2 ENDFOR
//se actualizeaza numarul de bete ramase
bete=x-1;
//verifica numarul de bete ramase si
//stabileste castigatorul daca este cazul
IF4 IF(bete<=0)
WRITE "Jocul s-a terminat! Ai pierdut!"
IF4 ELSE
IF5 IF(bete==1)
//inlocuie imaginea primului bat de chibrit
chibrit1.src=gol.gif
bete=0
WRITE "Jocul s-a terminat!Ai Castigat!"
IF5 ELSE
WRITE "Calculatorul zice:\n Acum e randul meu");
//inteligenta calculatorului este aleatoare
rand=genereaza_numar_aleator
IF6 IF(rand<0.5)
x=bete
IF6 ELSE
x=bete-1
IF6 ENDIF
FOR3 FOR(i=x;i<=bete;i++)
nsrc='chibrit'+i
imaginea_nsrc.src="gol.gif"
FOR3 ENDFOR
bete=x-1
IF7 IF(bete==0)
WRITE "Jocul s-a terminat! Ai pierdut!"
IF7 ELSE
WRITE " Acum e randul tau!"
IF7 ENDIF
IF5 ENDIF
IF4 ENDIF
IF3 ENDIF
Alegechibrit END
Codificarea n limbajul JavaScript
Documentul complet (X)HTML este prezentat n figura 9.16.
<html>
<head>
<title>10 Bete de chibrit</title>
<script language="JavaScript">
<!---
function AlegeChibrit(x) {
//se verifica daca extragerea batului a fost din pozitia corecta
if((x<=bete)&&((bete-x)<2)) {
//se sterg betele extrase
for(i=x;i<=bete;i++){
nsrc='chibrit'+i;
document.images[nsrc].src="gol.gif";
}
Figura 9.15
( continuare)
Figura 9.16
352
//se actualizeaza numarul de bete ramase
bete=x-1;
//verifica numarul de bete ramase si
//stabileste castigatorul daca este cazul
if(bete<=0) {
alert("Jocul s-a terminat! Ai pierdut!");
}else
if(bete==1) {
document.images['chibrit1'].src="gol.gif";
bete=0;
alert("Jocul s-a terminat!Ai Castigat!");
}
else{
alert("Calculatorul zice:\n Acum e randul meu");
//inteligenta calculatorului este aleatoare
rand=Math.random();
if(rand<0.5)x=bete;
else
x=bete-1;
for(i=x;i<=bete;i++){
nsrc='chibrit'+i;
document.images[nsrc].src="gol.gif";
}
bete=x-1;
if(bete==0)
alert("Jocul s-a terminat! Ai pierdut!");
else
alert("Calculatorul zice:\n Acum e randul tau!");
}
}
}
bete=10;
function actualizare()
{bete=10;
for(i=1;i<=bete;i++){
nsrc='chibrit'+i;
document.images[nsrc].src="chibrit.gif";
}
}
// -->
</script>
</head>
<body>
<center>
<h3>Zece bete de chibrit</h3>
<table border=1>
<tr><td>
<img src="chibrit.gif" name="chibrit1" border="0" width="27" height="110"
onMouseDown="AlegeChibrit(1)" loop="0">
<td>
<img src="chibrit.gif" name="chibrit2" border="0" width="27" height="110"
onMouseDown="AlegeChibrit(2)" loop="0">
Figura 9.16
continuare) (
353
<td>
<img src="chibrit.gif" name="chibrit3" border="0" width="27" height="110"
onMouseDown="AlegeChibrit(3)" loop="0">
<td>
<img src="chibrit.gif" name="chibrit4" border="0" width="27" height="110"
onMouseDown="AlegeChibrit(4)" loop="0">
<td>
<img src="chibrit.gif" name="chibrit5" border="0" width="27" height="110"
onMouseDown="AlegeChibrit(5)" loop="0">
<td>
<img src="chibrit.gif" name="chibrit6" border="0" width="27" height="110"
onMouseDown="AlegeChibrit(6)" loop="0">
<td>
<img src="chibrit.gif" name="chibrit7" border="0" width="27" height="110"
onMouseDown="AlegeChibrit(7)" loop="0">
<td>
<img src="chibrit.gif" name="chibrit8" border="0" width="27" height="110"
onMouseDown="AlegeChibrit(8)" loop="0">
<td>
<img src="chibrit.gif" name="chibrit9" border="0" width="27" height="110"
onMouseDown="AlegeChibrit(9)" loop="0">
<td>
<img src="chibrit.gif" name="chibrit10" border="0" width="27" height="110"
onMouseDown="AlegeChibrit(10)" loop="0">
</td><tr>
<tr><td>1<td>2<td>3<td>4<td>5<td>6<td>7<td>8<td>9<td>10</td></tr>
</table>
<form name="f1">
<p><p><input type="button" value="Joc Nou" name="Buton" onClick="actualizare();"></p>
</form>
</body>
</html>
Figura 9.16
continuare) (
Remarci
Script-ul (inserat n seciunea <head> a documentului HTML) conine dou funcii:
AlegeChibrit(x) i actualizare().
Funcia AlegeChibrit(x) permite juctorului s extrag unul sau dou bee;
stabilete strategia de joc a calculatorului; actualizeaz numrul de bee rmase,
stabilete ctigtorul. Argumentul x ia valori de la 1 la 10.
Funcia actualizare() permite reluarea jocului la acionarea butonului Joc Nou.
Gestionarii de evenimente utilizai sunt: onMouseDown i onClick (tag-ul
<input />).
n figura 9.17, 9.18, 9.19 sunt prezentate secvene din timpul jocului.
354
Figura 9.17
Figura 9.18
355
Figura 9.19
Creai un rollover cu JavaScript
Una din aplicaiile JavaScript de mare succes n domeniul imaginilor o constituie
crearea de rollovers (survols, n limba francez; rollovers, n limba
englez).
Un rollover este o imagine folosit n general pentru navigare al crui
aspect se modific atunci cnd se trece cu mouse-ul pe deasupra acesteia.
Remarci
Un rollover este o metod asociat unui eveniment de mouse: mouseOver,
mouseOut, mouseDown, mouseUp.
Exist mai multe tipuri de metode rollover:
metoda rollover pentru imagine;
metoda rollover strat (layer).
Va trebui s decidei singuri: ce tip de metod rollover necesit aplicaia
dumneavoastr i cum dorii s-o implementai.
Iat cum crem un buton IMAG1 care se afieaz normal la ncrcarea paginii i
se schimb n IMAG2 la trecerea mouse-ului pe deasupra acestuia.
1. Introducei ntre tag-urile <head> i </head> ale documentului
HTML, script-ul de prencrcare al imaginii (imag2.gif) utilizat n
rollover (figura 9.20).
356
2. Stabilii o legtur (link) ctre o imagine (figura 9.21).
3. Introducei (n tag-ul <a>) gestionarii de evenimente onMouseOver i
onMouseOut (figura 9.22).
4. Testai script-ul (figura 9.23, figura 9.24).
Figura 9.20
Figura 9.21
Figura 9.22
Figura 9.23
357
Remarci
Nu v lsai impresionai de dimensiunea codului JavaScript, deoarece este foarte
simplu!
Am definit im1 ca fiind un nou obiect Image cruia i atribuim calea imag2.gif.
La trecerea mouse-ului peste butonul IMAG1, proprietatea src a imaginii ce poart
numele img1 devine imag2.gif, care provoac efectul de rollover.
Dac dorii s aplicai un rollover peste mai multe imagini prezentate ntr-o pagin,
va trebui:
S adugai noi linii de prencrcare
im2=new Image;
im2.src=imag3.gif;
S schimbai numele imaginii respective:
<img src=imag1.gif border=0 name=img2>.
Aplicaii
Creai acelai rollover utiliznd matricea images.
n figura 9.25 este prezentat documentul HTML complet.
Figura 9.24
Figura 9.25
Rezultatele execuiei sunt prezentate n figura 9.26, respectiv figura 9.27.
358
Remarci
Exist i alte tehnici de a modifica imaginile, dup cum urmeaz:
afiarea unei borduri n jurul fiecrei imagini;
afiarea unei imagini n miniatur (de exemplu, o sgeat mic) alturi de imaginea
propriu-zis, unde se gsete pointer-ul mouse-ului.
Exist mai multe soluii de implementare a metodelor rollover pentru imagini, dar
cea mai simpl este urmtoarea:
creai matricea care s conin imagini;
prencrcai imaginile n matrice;
creai o funcie care s realizeze schimbarea imaginilor;
introducei gestionarii de evenimente onMouseOver i onMouseOut.
Scriei o funcie pentru a verifica dac o imagine este complet ncrcat.
n figura 9.28 este prezentat script-ul aplicaiei.
Figura 9.26
Figura 9.27
Figura 9.28
Comentai urmtorul program JavaScript (figura 9.29).
359
n figura 9.30, respectiv figura 9.31 sunt prezentate rezultatele execuiei programului
JavaScript.
Figura 9.29
Figura 9.30
Figura 9.31
360
Iat cum crem un mic catalog ilustrat care conine ultimele trei cri ale autorului acestei
lucrri: (X)HTML, Dreamweaver MX, XML, care au aprut n Editura Universitii din
Ploieti. Pornind de la o list ordonat ale crei elemente conin titlurile celor trei cri, se
afieaz coperta nti a crii selectate trecnd cursorul pe deasupra unuia din cele trei
titluri de carte afiate (figura 9.32).
Figura 9.32
Documentul complet XHTML este prezentat n figura 9.33.
361
Remarci
Funcia carte(nume,numr) conine dou argumente: numele fiierului utilizat
(nume) i numrul imaginii (numr).
Pentru ca proporia imaginilor s fie respectat este necesar ca ele s aib aceleai
dimensiuni.
Afiarea imaginii (prima copert) se produce atunci cnd deplasai mouse-ul pe linia
unde se gsete numele crii i nu doar pe numele afiat al crii. Putei evita acest
lucru, modificnd puin codul JavaScript. Succes!
Figura 9.33
n figura 9.34 se prezint un document (X)HTML care ilustreaz tehnica
rollovers-urilor.
362
Figura 9.34
Figura 9.35
Atunci cnd se ncarc acest document se obine imaginea din figura 9.35.
n momentul n care plimbai mouse-ul (fr a executa clic) pe una din cele trei imagini
(figura 9.35) obinei ceea ce este ilustrat n figura 9.36.
363
Analizai documentul XHTML i rspundei la urmtoarele ntrebri:
Ce semnific notaia this.id?
Care este rolul gestionarilor de evenimente:
onClick=location=ldXHTML.htm
onClick=location=ldDREAMWEAVER.htm
onClick=location=ldXML.htm
Care sunt deficienele acestui document. Precizai cel puin dou!
Figura 9.36
Chiar dac rollover-ul este aplicaia cea mai folosit a imaginilor dinamice,
JavaScript poate fi de asemenea utilizat i pentru crearea animaiilor simple.
Pentru animaii mai complexe va trebui ns s folosii Java sau un soft dedicat,
ca de exemplu, Macromedia Flash.
Pentru a crea o animaie simpl cu JavaScript [3] se recomand parcurgerea
urmtoarelor etape:
salvai cadrele de animaie ntr-o matrice;
prencrcai imaginile (cadrele de animaie);
Creai animaii simple cu JavaScript
364
stabilii viteza de derulare a animaiei.
Pentru mai multe detalii privind crearea animaiilor simple JavaScript, consultai:
Michael Moncur, JavaScript 1.5 Nouvelle edition, Campus Press, 2003, pag.
227-234
Michael Dreyfus, Codes en Stock JavaScript, Ed. Campus Press, 2001
Micro Application, JavaScript Professionel, Paris, 2001
David Flanagan, JavaScript, La rfrence 4
Conversaia 10
Obiectele Frame i Layer
n aceast conversaie:
Obiectele Frame
EXEMPLUL 10.1 JAVASCRIPT
Obiectul Layer. Aplica ii
EXEMPLUL 10.2 JAVASCRIPT
Tem
Obiectele Frame
Cea mai mare parte a navigatoarelor actuale (n particular, navigatoarele recente
Netscape i Microsoft) recunosc cadrele (frames, n limba englez) care permit
divizarea paginii Web n mai multe zone. n fiecare zon a paginii se poate afia
un document (X)HTML sau rezultatul unui script.
Decizia de a utiliza cadre v aparine!
Indiferent dac apreciai sau nu cadrele, site-urile Web bazate pe cadre exist i
vor mai exista. Din punct de vedere al programatorului JavaScript, este la fel de
uor s lucrezi pe un site care conine cadre sau s lucrezi pe un site fr cadre.
Atunci cnd o fereastr conine mai multe cadre, fiecare dintre ele este
reprezentat n JavaScript printr-un obiect Fr ame.
Acest obiect este echivalent cu un obiect Wi ndowatta timp ct el servete la
manipularea cadrelor i nu a ferestrelor. Numele obiectului Fr ame este acelai
cu cel pe care l afectai atributului name al tag-ului <f r ame>.
378
Remarci:
Cuvintele cheie wi ndowi sel f permit referirea la cadrul curent.
Cuvntul cheie par ent permite referirea la fereastra de nivel superior (cel mai des,
fereastra principal).
Fiecare din obiectele Fr ame ale unei ferestre este un fiu al obiectului printe Wi ndow.
Documentul (X)HTML din figura 10.1 mparte fereastra n patru zone. Dac ai
inserat un script JavaScript n documentul stngasus.htm, el va face referire
la documentele care aparin altor cadre: parent.dreaptasus,
parent.stngajos etc. Cuvintele cheie wi ndowi sel f vor face referire la
nsui cadrul stngasus.
Remarc. Dac utilizai cadre situate n interiorul altor cadre (imbricate) lucrurile se complic
puin: wi ndow reprezint ntotdeauna cadrul curent, par ent reprezint setul de cadre
(frameset) care conine cadrul curent, iar t op reprezint setul de cadre principal care le
conine pe celelalte.
Matricea frames
Matricea f r ames conine un obiect Wi ndow pentru fiecare cadru al paginii
Web (vezi figura 10.2).
n loc s v referii la cadrele unui document prin numele lor, utilizai matricea
f r ames.
Aceast matrice stocheaz informaiile pentru fiecare din cadrele unui document.
Numrul de indice (index) al cadrelor ncepe ntotdeauna cu zero i cu primul tag
<f r ame> al setului de cadre al documentului.
Iat cum putei referi cadrele din figura 10.1 cu ajutorul matricii f r ames, (vezi
figura 10.2).
Figura 10.1
379
Remarci:
Putei folosi oricare din cele dou metode de acces la elementele matricii frames (prin
numrul de index/prin nume).
Dac documentul dumneavoastr conine de exemplu 13 cadre, fr ndoial este mult
mai simplu s utilizai matricea f r ames. Dac ns, documentul conine dect dou
cadre, evident este mult mai bine s utilizai numele cadrelor.
Iat cum creai un cadru de navigare (vezi figura 10.3) care s permit
modificarea coninutului unui alt cadru.
(X)HTML
Dreamweaver MX
XML
JavaScript
1. Creai un document (X)HTML care divizeaz fereastra n dou cadre
(figura 10.4).
Remarci:
Figura 10.2
Figura 10.3
Figura 10.4
Programul din figura 10.4 creeaz dou cadre (la stnga i la dreapta ferestrei).
Tag-urile <body> sunt nlocuite cu tag-urile <f r ameset >.
2. Creai documentul (X)HTML pentru cadrul din stnga, care va servi
pentru navigarea n site (figura 10.5).
380
Remarci:
Figura 10.5
Gestionarii de evenimente onCl i ck se repet (cu mici modificri) pentru fiecare din
cele patru link-uri (vezi tag-urile <a>).
Gestionarii de evenimente onCl i ck sunt declanai prin evenimentul cl i ck, care
afieaz un document n cadrul din dreapta.
Deoarece script-ul se gsete (el nsui) ntr-un cadru, numele celuilalt cadru trebuie s
fie precedat de cuvntul cheie par ent .
Fiecare din obiectele f r ame ale unei ferestre este un fiu al obiectului printe Wi ndow.
Cuvintele cheie wi ndowi sel f permit referirea cadrului curent.
Cuvntul cheie par ent permite referirea la fereastra de nivel superior (de regul
fereastra principal).
Utilizarea limbajului JavaScript permite modificarea simultan a coninutului mai multor
cadre.
3. Testai script-ul.
3.1 Salvai documentul XHTML al cadrului de navigare sub numele
stnga.html.
3.2 Deschidei n browser documentul HTML care divizeaz fereastra
n dou cadre (vezi figura 10.6).
381
3.3 Testai link-urile din cadrul din stnga.
n figura 10.7 se prezint rezultatul execuiei script-ului n navigatorul Internet
Explorer.
Formularea problemei
Vom aborda i n cadrul acestei conversaii aceeai problem pe care am abordat-o n
conversaia precedent (EXEMPLUL 9 JAVASCRIPT), cu singura deosebire
(important!) c pentru afiarea rezultatelor vom folosi obiectele Frame (Rezultatele vor
fi afiate ntr-un cadru inserat n documentul curent i nu ntr-o fereastr distinct).
EXEMPLUL 10.1 JAVASCRIPT
Figura 10.6
Figura 10.7
382
Introducerea valorilor pentru livrri se face printr-o singur zon de text (vezi EXEMPLUL
9 JavaScript, Varianta 2). Selecia rezervorului i a zilei se fac printr-o list de selectare.
Specificaii de programare
n figura 10.8 este prezentat ecranul (intrare/ieire) cu RAPORT LIVRRI REZERVOR
R1. Tabela de variabile este prezentat n figura 10.9.
Tabela de variabile
Variabile de intrare Variabile de stare Variabile de ieire
Rezervor: (obiect) list simpl de
selecie pentru cele trei rezervoare
Zile: (obiect) list simpl de opiuni
pentru selecia zilei din sptmn
T1: (obiect) zona de editare n care
se va introduce valoarea livrrilor
Inputd: (obiect) frame-ul ce conine
obiectele Rezervor, Zile, T1
sit: (obiect) frame ce conine
zonele reactive pentru afiare
s: (real) folosit pentru calculul
sumelor pariale pe zile
rval: (logic) indic faptul ca
valoarea introdus n zona de
editare este valid sau nu
x: (real) valoarea real a textului
introdus n zona de editare
Z: (vector) numele zilelor
sptmnii
jmax,jmin: (numere ntregi)
pstreaz indicii livrrilor
maxime i minime din matricea a
raport: (obiect) frame-ul n
care se vor afia rezultatele
pentru un rezervor
med: (real) folosit pentru
calculul mediei zilnice pe
rezervor
max,min: (numere reale)
pstreaz valoarea maxim
i minim pentru livrri
a: (matrice de numere
reale) pstreaz valorile
livrrilor pe zile i
rezervoare
Figura 10.8
Figura 10.9
383
Documentaia de proiectare
Pseudocodul pentru EXEMPLUL 10.1 JAVASCRIPT este prezentat n figura 10.10.
Pseudocodul
EXEMPLUL10.1 BEGIN
//initializeaza vectorul Z cu numele zilelor
z=luni,marti,miercuri,joi, vineri
//aloca spatiu de memorie si initializeaza matricea livrarilor
FORI FOR(i=0;i<3;i++)
FORJ FOR(j=0;j<5;j++)
a
i,j
=0.0
FORJ ENDFOR
FORI ENDFOR
Afiseaza pagina ce contine frame-uri
//raspunde la evenimentele generate de butonul Livreaza
IFL IF(se apasa butonul Livreaza)
DO livreaza
IFL ENDIF
//raspunde la evenimentele generate de zonele reactive
IFA IF(se executa click pe zona unui rezervor)
DO afispartial(rezervor)
IFA ENDIF
//raspunde la evenimentele generate de zona de editare T1
IFV IF(se paraseste zona T1)
DO valideaza(T1,0,20)
IFV ENDIF
EXEMPLUL10.1 END
AFISPARTIAL BEGIN
Date intrare:
rez-indicele rezervorului
// calculeaza total livrari
s=0
FORS FOR(j=0;j<5;j++)
s=s+a
rez,j
FORS ENDFOR
med=s/5
// determinarea maximului si minimului
max=a
rez,0
min=a
rez,0
jmax=0
jmin=0
FORMAXMIN FOR(j=0;j<5;j++)
IFMAX IF(max<a
rez,j
)
max=a
rez,j
jmax=j
IFMAX ENDIF
IFMIN IF(min>a
i,j
)
min=a
rez,j
jmin=j
IFMIN ENDIF
FORMAXMIN ENDFOR
//afisare rezultate
//scrierea rezultatelor in frame-ul report
k=rez+1
raport.WRITE "SITUATIA REZERVORULUI R"+k
raport.WRITE "ZIUA R"+k
FORRAP FOR(j=0;j<5;j++)
raport.WRITE z
i
, a
rez,j
FORRAP ENDFOR
Figura 10.10
384
raport.WRITE "Total livrari: ",s
raport.WRITE "Media: ",s
raport.WRITE "Livrarea maxima: ",max,Z
jmax
raport.WRITE "Livrarea minima: ",min,Z
jmin
AFISPARTIAL END
Codificarea n limbajul JavaScript
Documentul complet (X)HTML este prezentat n figura 10.11.
<html>
<head>
<script language="JavaScript">
<!---
// DEFINESTE VECTORUL CU ZILELE DIN SAPTAMANA
var Z = new Array("Luni","Marti","Miercuri","Joi","Vineri");
//functia de transformare intr-un sir de caractere a unui numar
function trunchiaza(x){
var s=""+x;
i=s.indexOf(".");
if(i!=-1){
s=s.substring(0,i+3);
}
return s;
}
//VALIDAREA UNUI CAMP NUMERIC
function valideaza(item, min, max) {
var rVal = false;
var x=parseFloat(item.value);
if(isNaN(x)) alert("Valoare gresita pentru cantitate!");
else
if (x < min)
alert("Valoare gresita pentru cantitate!Valoarea trebuie >" + min);
else if (x> max)
alert("Valoare gresita pentru cantitate! Valoarea trebuie sa fie < " + max);
else
rVal = true;
return rVal;
}
// DECLARAREA MATRICEI IN CARE SE VOR PASTRA CANTITATILE LIVRATE
a=new Array(3);
a[0]=new Array(5);
a[1]=new Array(5);
a[2]=new Array(5);
for(i=0;i<3;i++)
for(j=0;j<5;j++)
a[i][j]=0.0;
//SALVAREA CAMPULUI NUMERIC DIN INPUT TEXT IN MATRICEA LIVRARILOR
function livreaza(){
//DETERMINA REZERVORUL
var ir=inputd.f1.Rezervor.selectedIndex;
//DETERMINA ZIUA
Figura 10.10
(continuare)
Figura 10.11
385
var z=inputd.f1.Zile.selectedIndex;
//ADAUGA CANTITATEA IN MATRICEA LIVRARILOR
a[ir][z]+=parseFloat(inputd.f1.T1.value);
}
//CALCULEAZA SI AFISEAZA LIVRARILE DINTR-UN REZERVOR
function afispartial(rez){
var i,j,k;
//calcul total livrari
s=0.0;
for(j=0;j<5;j++) s+=a[rez][j]
//CALCUL MEDIE PE ZI
med=s/5;
//CALCUL MAX SI MIN
max=a[rez][0]; min=a[rez][0];
jmax=0;jmin=0;
for(j=0;j<5;j++){
if(max<a[rez][j]){max=a[rez][j];jmax=j;}
if(min>a[rez][j]){min=a[rez][j];jmin=j;}
}
//AFISARE REZULTATE
k=rez+1;
raport.document.open();
raport.document.writeln("<center><p><b>RAPORT LIVRARI REZERVOR
R"+k+"</b></p></center>");
raport.document.writeln("<center><table border=1 bgcolor=#efefff><tr>");
raport.document.writeln("<td><b>ZIUA</b><td><b>REZERVOR R"+k+"</b></td></tr>");
for(i=0;i<5;i++) {
raport.document.writeln("<tr><td>" + Z[i]+"</td>");
raport.document.writeln("<td>" + a[rez][i]+ "</td></tr>"); }
raport.document.writeln("</table></center><p><p>");
raport.document.writeln("<center><p><font color=green size=+1>Total Livrari:"+s+"</font>");
raport.document.writeln("<br><font color=green size=+1>Media
Zilnica:"+trunchiaza(med)+"</font>");
raport.document.writeln("<br><font color=green>Livrarea maxima:"+max+" s-a facut in ziua
de" +Z[jmax]+"</font>");
raport.document.writeln("<br><font color=green>Livrarea minima:"+min+" s-a facut in ziua de "
+Z[jmin]+"</font>");
raport.document.writeln("</center></html>");
raport.document.close();
}
// -->
</script>
</head>
<title>Exemplul 4 utilizand frame-uri</title>
</head>
<frameset rows="60%,40%">
<frameset cols="30%,70%">
<frame scrolling="no" noresize src="inputdata.html" name="inputd">
<frame src="raport.html" name="raport">
</frameset>
<frame scrolling="no" noresize src="situatie.html" name="sit">
</frameset>
</html>
Figura 10.11
( continuare)
386
// INPUTDATA.HTML
<html>
<head>
</head>
<body>
<center>
<form name="f1">
<table border=0>
<tr><td><b>REZERVORUL</b><td><b>Ziua</b>
<tr><td><select size="1" name="Rezervor">
<option selected>Rezervor1</option>
<option>Rezervor2</option>
<option>Rezervor3</option>
</select>
<td>
<select size="1" name="Zile">
<option>Luni</option>
<option>Marti</option>
<option>Miercuri</option>
<option>Joi</option>
<option>Vineri</option>
</select>
<tr><td>Cantitatea
<td><input type="text" name="T1" size="7" value="0.0" onChange="parent.validate(this,0,20);">
<tr><td><input type="button" value="Livreaza" onClick="parent.trimite();">
</table>
</center>
</form>
</body>
</html>
//RAPORT.HTML
<html>
<head>
</head>
<body>
<center><p><b>RAPORT LIVRARI REZERVOR R1 </b></p></center>
<center><table border=1 bgcolor=#efefff><tr>
<td><b>ZIUA</b><td><b>REZERVOR R1</b></td></tr>
<tr><td>Luni</td><td>0</td></tr>
<tr><td>Marti</td><td>0</td></tr>
<tr><td>Miercuri</td><td>0</td></tr>
<tr><td>Joi</td><td>0</td></tr>
<tr><td>Vineri</td><td>0</td></tr>
</table></center><p><p>
<center>
<p><font color=green size=+1>Total Livrari:0</font> <br>
<font color=green size=+1>Media Zilnica:0 </font>
<br><font color=green>Livrarea maxima: 0 s-a facut in ziua de Luni </font>
<br><font color=green>Livrarea minima: 0 s-a facut in ziua de luni </font>
</center>
</html>
Figura 10.11
(continuare)
387
//SITUATIE.HTML
<html>
<body>
<center>
<h3>
Afiseaza Livrari pentru Rezervoarele:
</h3>
<map name="rezervorMap">
<area name="R1" coords="16,18,91,125" href="javascript:parent.afispartial(0)"
onMouseOver="window.status='Rezervorul R1';return true"
onMouseOut="window.status=' ';return true">
<area name="R2" coords="105,18,180,125" href="javascript:parent.afispartial(1)"
onMouseOver="self.status='Rezervorul R2';return true"
onMouseOut="self.status=' ';return true">
<area name="R3" coords="195,18,272,125" href="javascript:parent.afispartial(2)"
onMouseOver="window.status='Rezervorul R3';return true"
onMouseOut="window.status=' ';return true">
</map>
<img src="rezervoare.jpg" align="top" usemap="#rezervorMap">
</body>
</html>
Vizualizai documentul ntr-un browser i testai script-ul (vezi EXEMPLUL 9
JAVASCRIPT). n figura 10.12 se prezint rezultatele execuiei programului JavaScript
pentru un set de date (Rezervorul 1).
Figura 10.12
Figura 10.11
(continuare)
388
Obiectul Layer
Obiectul Layer este un fiu al obiectului Document .
Obiectul Layer permite limbajului JavaScript s acceseze straturile n interiorul
documentelor.
Remarc. Pentru mai multe informaii privind straturile i modul n care acestea funcioneaz n
browser, consultai lucrrile:
Liviu Dumitracu, Dreamweaver MX, Editura Universitii din Ploieti, 2003.
Richard Wagne , R.Allen Wyke, JavaScript, Editura Teora, Traducere Cora Rdulescu i Dan
Pavelescu, 2002.
r
Fia obiectului Layer este prezentat n figura 10.13.
Fia obiectului Layer
Obiectul printe Document
Proprieti above, backgr ound, bel l ow, bgCol or ,
cl i p. bot t om, cl i p. hei ght , cl i p. l ef t ,
cl i p. r i ght , cl i p. t op, cl i p. wi dt h,
document , l ef t , name, pageX, pageY,
par ent Layer , si bl i ngAbove,
si bl i ngBel l ow, sr c, t op, vi si bi l i t y,
wi ndow, zI ndex
Metode l oad( ) , moveAbove( ) , moveBel l ow( ) ,
moveBy( ) , moveTo( ) , moveToAbsol ut e( ) ,
r el easeEvent s( ) , r esi zeBy( ) ,
r esi zeTo( ) , r out eEvent ( )
Gestionarii de evenimente: -
Figura 10.13
Matricea Layers[]
Matricea l ayer s[ ] (document.layers[]) conine setul de straturi
(layers, n limba englez) reprezentate n pagina (X)HTML prin tag-urile <di v>
sau <l ayer >.
Matricea l ayer s[ ] este recunoscut numai de browser-ul Netscape.
Remarci:
n Netscape putei accesa proprietile unui strat cu ajutorul matricii l ayer s[ ] .
Numele stratului poate fi specificat prin atributul id sau name ale tag-ului di v.
n Netscape putei accesa proprietile unui strat imediat dup instruciunea
document . l ayer s[ numestrat ] .
Matricea all[]
Matricea al l [ ] conine setul de straturi ale unui document (X)HTML
recunoscute de Internet Explorer. Valoarea pe care o transferai pentru a
389
specifica stratul pe care dorii s l accesai nu este pstrat n atributul name al
tag-ului <di v> ci n atributul <i d> al aceluiai tag.
Remarc. n Internet Explorer putei accesa proprietile unui strat prin intermediul matricii
st yl e, ceea ce nseamn c sintaxa pe care o vei folosi va fi:
document . al l [ numestrat ] . st yl e.
Corespondena ntre atributele HTML ale straturilor i
proprietile JavaScript
Un layer este un obiect plan rectangular care conine mai multe proprieti:
dimensiuni, culoare, coninut i vizibilitate. O pagin Web poate conine mai
multe straturi care se pot suprapune precum straturile, parial sau total.
Straturile sunt de regul obiecte statice, dar ele pot fi modificate i deplasate cu
ajutorul unui script. Natural, limbajul de script ales de Netscape este JavaScript
ntruct el este creatorul limbajului.
Remarci:
Straturile au fost implementate de Netscape ncepnd cu versiunea 4 a browser-ului
Netscape Navigator.
Pentru gestiunea straturilor, Netscape a creat trei noi tag-uri: <LAYER> . . .
</ LAYER>; <I LAYER> . . . </ I LAYER> i <NOLAYER> . . . </ NOLAYER>.
Cel mai important este de departe primul tag. Al doilea este o form inline iar cel de-al
treilea joac acelai rol n raport cu elementul LAYER ca NOFRAMES n raport cu
FRAMESET.
Elementul LAYER conine 13 proprieti, dintre care cea mai mare parte au
valori implicite. nainte de a trece la corespondena: atribute HTML
proprieti JavaScript vom prezenta un exemplu de declarare a unui
strat (figura 10.14).
Figura 10.14
390
n figura 10.15 este prezentat stratul afiat de Netscape.
Pentru a putea modifica atributele elementului LAYER n vederea dinamizrii
unei pagini Web va trebui s cunoatem corespondena dintre atributele HTML
ale straturilor i proprietile JavaScript (vezi figura 10.16).
Atribut HTML Proprieti JavaScript
NAME name
Numele stratului (identic cu id). Nemodificabil.
I D i d
Numele stratului (identic cu name). Nemodificabil.
LEFT l ef t
Coordonata X a stratului.
TOP t op
Coordonata Y a stratului.
PAGEX pagex
Coordonata X a stratului fa de document.
PAGEY pagey
Coordonata Y a stratului fa de document.
Z- I NDEX zi ndex
Ordinea z a stratului n raport cu fiii si.
VI SI BI LI TY vi si bi l i t y
Starea de vizibilitate a stratului.
Figura 10.15
Figura 10.16
391
BACKGROUND backgr ound
Imaginea de fundal a stratului.
BGCOLOR bgCol or
Culoarea de fundal a stratului.
PARENTLAYER par ent Layer
Numele obiectului care conine stratul curent.
SRC sr c
URL-ul fiierului care reprezint coninutul stratului.
CLI P cl i p. t op, cl i p. l ef t , cl i p. r i ght ,
cl i p. bot t om, cl i p. wi dt h, cl i p. hei ght
Proprietile suprafeei decupate a stratului.
ABOVE above
Numele elementului HTML de deasupra stratului curent.
BELOW bel ow
Numele elementului HTML de dedesubtul stratului curent.
Remarc. Pentru o mai bun lizibilitate am procedat la scrierea numelor atributelor HTML cu
majuscule, dar ... nu este obligatoriu. n schimb, numele proprietilor JavaScript se scriu
ntotdeauna cu minuscule!
Metodele obiectului Layer
Metodele obiectului Layer sunt prezentate n detaliu n figura 10.17.
Metod Sintax
l oad( ) document . l ayer s[ ] . l oad( )
ncarc o nou adres URL.
moveAbove( ) document . l ayer s[ ] . moveAbove( )
Deplaseaz stratul deasupra altui strat.
moveBel ow( ) document . l ayer s[ ] . moveBel ow( )
Deplaseaz stratul dedesubtul altui strat.
moveBy( ) document . l ayer s[ ] . moveBy( )
Deplaseaz stratul ntr-o poziie specific.
moveTo( ) document . l ayer s[ ] . moveTo( )
Deplaseaz colul din stnga-sus al ferestrei la coordonatele specificate ale
ecranului.
Figura 10.17
Figura 10.16
(continuare)
392
moveToAbsol ut e( ) document . l ayer s[ ] . moveToAbsol ut e( )
Modific poziia stratului n pagin, conform coordonatelor specificate n
pixeli.
r el easeEvent s( ) document . l ayer s[ ] . r el easeEvent s( )
Stabilete ca stratul s elibereze evenimentele capturate de tipul specificat.
r esi zeBy( ) document . l ayer s[ ] . r esi zeBy( )
Redimensioneaz stratul cu valorile de nlime i lime specificate.
r out eEvent ( ) document . l ayer s[ ] . r out eEvent ( )
Transfer un eveniment capturat prin ierarhia normal a evenimentelor.
Aplicaie
Analizai documentul XHTML din figura 10.18 n care s-a inserat un script care conine
metoda moveBy( ) .
Figura 10.18
Figura 10.17
(continuare)
n figura 10.19 este prezentat rezultatul execuiei programului JavaScript n
navigatorul Netscape.
393
Figura 10.19
Figura 10.19
(continuare)
394
Formularea problemei
Vom aborda i n cadrul acestei conversaii aceeai problem pe care am abordat-o n
conversaia precedent, cu singura deosebire c de data acesta vom folosi pentru
afiarea rezultatelor obiectul Layer.
Introducerea valorilor pentru livrri se realizeaz printr-o singur zon de text, iar selecia
rezervorului i a zilei din lista de opiuni.
Specificaii de programare
n figura 10.20 este prezentat ecranul (intrare/ieire) n care se afieaz pagina Web.
Tabela de variabile este prezentat n figura 10.21.
EXEMPLUL 10.2 JAVASCRIPT
Figura 10.20
395
Tabela de variabile
Variabile de intrare Variabile de stare Variabile de ieire
Rezervor: (obiect) lista
simpla de selecie pentru
cele trei rezervoare
Zile: (obiect) lista simpl
de opiuni pentru selecia
zilei din sptmn
T1: (obiect) zona de
editare n care se va
introduce valoarea
livrrilor
a: (matrice de numere
reale) pstreaz valorile
livrrilor pe zile i
rezervoare
s: (real) folosit pentru
calculul sumelor pariale pe
zile
rval: (logic) precizeaz
dac valoarea introdus n
zona de editare este valid
sau nu
x: (real) valoarea real a
textului introdus n zona de
editare
Z: (vector) numele zilelor
sptmnii
jmax,jmin: (numere ntregi)
pstreaz indicii livrrilor
maxime i minime din
matricea a
f2: (obiect) formular
coninut n layer-ul R1 n
care se vor afia rezultatele
pentru un rezervor
med: (real) folosit pentru
calculul mediei zilnice pe
rezervor
max,min: (numere reale)
pstreaz valoarea maxim
i minim pentru livrri
rnume,Z1, Z2, Z3, Z4, Z5,
Tot, Med, emax, emin,
zmax, zmin: (obiect) zone
text pentru afiarea
rezultatelor
Documentaia de proiectare
Pseudocodul pentru EXEMPLUL 10.2 JAVASCRIPT este prezentat n figura 10.22.
Pseudocodul
EXEMPLUL10.2 BEGIN
//initializeaza vectorul Z cu numele zilelor
z=luni,marti,miercuri,joi vineri
//aloca spatiu de memorie si
//initializeaza matricea livrarilor
FORI FOR(i=0;i<3;i++)
FORJ FOR(j=0;j<5;j++)
a
i,j
=0.0
FORJ ENDFOR
FORI ENDFOR
Afiseaza pagina ce contine layer R2
//raspunde la evenimentele generate de butonul Livreaza
IFL IF(se apasa butonul Livreaza)
DO livreaza
IFL ENDIF
//raspunde la evenimentele generate zonele reactive
IFAFIS IF(cursor mouse pe zona unui rezervor)
DO afispartial(rezervor)
IFAFIS ENDIF
//raspunde la evenimentele generate de zona de editare T1
IFVALID IF(se paraseste zona T1)
DO valideaza(T1,0,20)
IFVALID ENDIF
EXEMPLUL10.2 END
AFISPARTIAL BEGIN
Date intrare:
rez-indicele rezervorului
// calculeaza total livrari
s=0
FORS FOR(j=0;j<5;j++)
s=s+a
rez,j
FORS ENDFOR
Figura 10.21
Figura 10.22
396
med=s/5
// determinarea maximului si minimului
max=a
rez,0
min=a
rez,0
jmax=0
jmin=0
FORMAXMIN FOR(j=0;j<5;j++)
IFMAX IF(max<a
rez,j
)
max=a
rez,j
jmax=j
IFMAX ENDIF
IFMIN IF(min>a
i,j
)
min=a
rez,j
jmin=j
IFMIN ENDIF
FORMAXMIN ENDFOR
//afisare rezultate
//depune rezultate in zonele din layerul R1
k=rez+1
f2.rnume.value="R"+k;
f2.Z1.value=a[rez][0];
f2.Z2.value=a[rez][1];
f2.Z3.value=a[rez][2];
f2.Z4.value=a[rez][3];
f2.Z5.value=a[rez][4];
f2.Tot.value=s;
f2.Med.value=trunchiaza(med);
f2.emax.value=max;
f2.zmax.value=Z[jmax];
f2.emin.value=min;
f2.zmin.value=Z[jmin];
AFISPARTIAL END
//Afiseaza layerul cu rezultate
ARATA BEGIN
R1.style.visibility = "visible"
ARATA END
// Ascunde layerul cu rezultate
ASCUNDE BEGIN
R1.style.visibility = "hidden"
ASCUNDE END
Codificarea n limbajul JavaScript
Documentul complet (X)HTML este prezentat n figura 10.23.
<html>
<head>
<title>Exemplul 10.2</title>
<script language=JavaScript>
<!---
var Z = new Array(Luni,Marti,Miercuri,Joi,Vineri);
function trunchiaza(x) {
var s=+x;
i=s.indexOf(.);
if(i!=-1){
s=s.substring(0,i+3);
}
Figura 10.22
(continuare)
Figura 10.23
397
return s;
}
function validate(item, min, max) {
var rVal = false;
var x=parseFloat(item.value);
if(isNaN(x))
alert(Valoare gresita pentru cantitate!);
else
if (x < min)
alert(Valoare gresita pentru cantitate!Valoarea trebuie > + min);
else if (x> max)
alert(Valoare gresita pentru cantitate! Valoarea trebuie sa fie < + max);
else
rVal = true;
return rVal;
}
a=new Array(3);
a[0]=new Array(5);
a[1]=new Array(5);
a[2]=new Array(5);
for(i=0;i<3;i++)
for(j=0;j<5;j++)
a[i][j]=0.0;
function trimite() {
var ir=f1.Rezervor.selectedIndex;
var z=f1.Zile.selectedIndex;
a[ir][z]+=parseFloat(f1.T1.value);
}
function afispartial(rez) {
var i,j,k;
//CALCUL TOTAL LIVRARI
s=0.0;
for(j=0;j<5;j++)
s+=a[rez][j]
//calcul medie pe zi
med=s/5;
//calcul max si min
max=a[rez][0];
min=a[rez][0];
jmax=0;jmin=0;
for(j=0;j<5;j++){
if(max<a[rez][j]){max=a[rez][j];jmax=j;}
if(min>a[rez][j]){min=a[rez][j];jmin=j;}
}
//AFISARE REZULTATE
k=rez+1;
f2.rnume.value="R"+k;
document.f2.Z1.value=a[rez][0];
document.f2.Z2.value=a[rez][1];
document.f2.Z3.value=a[rez][2];
document.f2.Z4.value=a[rez][3];
Figura 10.23
(continuare)
398
document.f2.Z5.value=a[rez][4];
document.f2.Tot.value=s;
document.f2.Med.value=trunchiaza(med);
document.f2.emax.value=max;
document.f2.zmax.value=Z[jmax];
document.f2.emin.value=min;
document.f2.zmin.value=Z[jmin];
}
function arata() {
document.all['R1'].style.visibility = "visible";
}
function ascunde() {
document.all['R1'].style.visibility = "hidden";
}
// -->
</script>
</head>
<body>
<center>
<form name="f1">
<table border=0>
<tr><td><b>REZERVORUL</b><td><b>Ziua</b>
<tr><td><select size="1" name="Rezervor">
<option selected>Rezervor1</option>
<option>Rezervor2</option>
<option>Rezervor3</option>
</select>
<td>
<select size="1" name="Zile">
<option>Luni</option>
<option>Marti</option>
<option>Miercuri</option>
<option>Joi</option>
<option>Vineri</option>
</select>
<tr>
<td>Cantitatea
<td><input type="text" name="T1" size="7" value="0.0" onChange="validate(this,0,20);">
<tr>
<td><input type="button" value="Livreaza" onClick="trimite();">
</table>
</center>
</form>
<h3>Situatia Livrarilor</h3>
<table>
<tr><td><a href="javascript:void(0)" onMouseOver="afispartial(0);arata();"
onMouseOut="ascunde('R1');"> Rezervor R1</a>
<tr><td><a href="javascript:void(0)"
onMouseOver="afispartial(1);arata();"
onMouseOut="ascunde();">Rezervor R2
<tr><td><a href="javascript:void(0)" onMouseOver="afispartial(2);arata();"
onMouseOut="ascunde();">Rezervor R3
Figura 10.23
(continuare)
399
</tr>
</table>
<div id="r1" style="position: absolute;top: 120px;z-index: 2; visibility: hidden; top:190; left:
120px;">
<form name = "f2">
<center><p><b>SITUATIA LIVRARILOR REZERVOR
<input type="text" name="rnume" size="2"></b></p></center>
<center><table border=1 bgcolor=#efefff><tr>
<td><b>ZIUA</b><td><b>Livrare</b></td></tr>
<tr><td>Luni</td><td><input type="text" name="Z1" size="7" value="0.0"></td></tr>
<tr><td>Marti</td><td><input type="text" name="Z2" size="7" value="0.0"></td></tr>
<tr><td>Miercuri</td><td><input type="text" name="Z3" size="7" value="0.0"></td></tr>
<tr><td>Joi</td><td><input type="text" name="Z4" size="7" value="0.0"></td></tr>
<tr><td>Vineri</td><td><input type="text" name="Z5" size="7" value="0.0"></td></tr>
</table></center><p><p>
<center>
<table bgcolor=#efefff>
<tr><td><font color=green size=+1>Total Livrari</font><td><input type="text" name="Tot"
size="7" value="0.0"><tr>
<tr><td><font color=green size=+1>Media Zilnica</font><td><input type="text" name="Med"
size="7" value="0.0"> </table>
<table bgcolor=#efefff>
<tr><td><font color=green>Livrarea maxima:</font><td> <input type="text" name="emax"
size="7" value="0.0"> <td> <input type="text" name="zmax" size="7" value="Luni">
<tr><td><font color=green>Livrarea minima:</font> <td><input type="text" name="emin"
size="7" value="0.0"> <td> <input type="text" name="zmin" size="7" value="Luni">
</table>
</form>
</div>
</body>
</html>
Figura 10.23
(continuare)
Vizualizai documentul ntr-un browser i testai script-ul numai n Internet
Explorer. Se introduc livrrile; se poziioneaz mouse-ul deasupra legturii:
Rezervor R1/ Rezervor R2/ Rezervor R3.
n figura 10.24 se prezint rezultatele execuiei programului JavaScript pentru un
set de date.
400
Figura 10.24
401
Tem
Testai-v cunotinele
1. Cnd utilizai obiectele Fr ame?
2. Care este rolul obiectului Layer ?
3. Care sunt proprietile obiectului Layer ?
4. Care sunt metodele obiectului Layer ?
JavaScript
Vizitai site-urile
http://Javascript.internet.com/messages/description-layer.htm;
http://Javascript.internet.com/bgeffects/floating-transparent-slideshow.html
http://Javascript.internet.com/bgeffects/write-layer.html
http://www.dannyg.com/examples/ol2/index.htm
http://www.dannyg.com/examples/dh2/index.htm
t
Conversaia 11
Depanarea aplicaiilor JavaScript
n aceast conversaie:
Tipuri de erori JavaScrip . Aplica ii
Tehnici de depanare a script-urilor
Instrumente pentru depanarea script-urilor. Aplica ii
Instruc iunile throw i try catch. Aplica ii
Tem
Evitai erorile frecvente JavaScript
Trebuie s recunoatei, chiar dac nu v face plcere c, nu de puine ori, dar
mai ales atunci cnd ai mrit gradul de complexitate al aplicaiilor JavaScript ai
fcut i greeli! Este normal s fie aa!
n aceast conversaie, ne vom apropia cu respect fa de erorile curente
JavaScript, vom ncerca o clasificare a acestora urmnd ca apoi s precizm
regulile pentru evitarea acestor erori frecvente JavaScript.
De asemenea, nu vor lipsi din prezentarea noastr nici tehnicile i instrumentele
de depanare folosite curent n activitatea de testare i depanare a programelor
JavaScript.
Tipuri de erori JavaScript
Fiecare dintre noi poate comite erori particulare la scrierea unui program
JavaScript, dar foarte multe dintre acestea sunt curente.
404
Erorile JavaScript sunt identificate de browser la ncrcarea paginii Web. Ele pot
fi clasificate n urmtoarele categorii:
erori de sintax;
erori de logic;
erori generate de incompatibilitatea ntre navigatoare.
Erori de sintax
Erorile de sintax JavaScript sunt erorile cele mai frecvente i cele mai uor de
corectat. De cele mai multe ori, interpretorul JavaScript identific corect sursa
erorilor n programele pe care le-ai realizat, dar sunt i cazuri cnd lucrurile
nu stau chiar aa!
n general, erorile de sintax provin din:
greeli de tastare
confuzia ntre majuscule i minuscule;
inversarea literelor;
greeli de punctuaie
tag-uri i paranteze orfeline;
ghilimele i apostrofuri plasate greit;
greeli de plasare a instruciunilor JavaScript
confuzia ntre irurile de caractere i numere
numerele sunt tratate ca iruri de caractere;
irurile de caractere sunt tratate ca numere.
Aplicaie
Urmtoarele script-uri conin erori de sintax, dup cum urmeaz:
greeli de tastare, greeli de punctuaie
figura 11.1, figura 11.2, figura 11.3, figura 11.4, figura 11.5, figura 11.6,
figura 11.7, figura 11.8, figura 11.9
greeli de plasare a instruciunilor JavaScript
figura 11.10, figura 11.11, figura 11.12, figura 11.13, figura 11.14
greeli de tratare a irurilor de caractere i a numerelor
figura 11.15, figura 11.16, figura 11.17
405
Identificai i corectai erorile de sintax din toate aceste script-uri.
<script>
document.write (<font size=+5>);
document.write (La revedere!
x=8 y=3 z=120;
document.write (La revedere!+<br>);
</script>
<script>
DOCUMENT.write (S nu uitai s fii fericii!);
Document.Write (S nu uitai s fii fericii!);
Document.WRITE (S nu uitai s fii fericii!);
</script>
<script>
Salut=ir;
var Salut=ir_1;
</script>
<script>
onClick=alert(calculeaz);
onClick=alert(Afieaz);
</script>
<script>
a=new Array;
b=Array(5);
c=[2,5,7;
</script>
<script>
if (a==10);
alert (a=10);
if (b==5
alert (b=5);
if (c==7),
alert (c=7);
if (d=8)
alert (d=8);
if (m=7) this
alert (m=7);
Figura 11.1
Figura 11.2
Figura 11.3
Figura 11.4
Figura 11.5
Figura 11.6
406
<script>
if (c=3)
alert (c=3)
else; document.write (c!=3);
if (d=7) {
alert (d=7)
}
else (document.write (EROARE);
if (r=33)
alert (FELICITRI!)
else document.write (EROARE);
</script>
<script>
while (i<=7);{}
document.writeln(i);
++i;
while (j<=9; document.writeln(j) {
++j;
}
</script>
<script>
do while (i<7) {
} alert (La revedere!);
}
do { while (i<10)
alert (Bucla do while!);
}
do {
alert (FATALITATE!);
while (i<7)
}
</script>
<script>
for (var i=0, i<13, ++i)
alert (La muli ani frumoi!);
for {
alert (La revedere!);
} while (var i=0; i<13; ++i)
for (i=0; i<7);
alert (La revedere!);
++i;
</script>
<script>
s=O; //iniializare cu litera O!
for (i=0; i<=10; i++) {
s=s+i;
}
</script>
Figura 11.7
Figura 11.11
Figura 11.8
Figura 11.9
Figura 11.10
407
<script>
s=0;
for (i=0; I<=10; i++) {
s=s+i;
}
</script>
}
<script>
for (i=0; i<=10; i++) {
p_2=i*i;
p_3=i*i*i;
document.write (p_2);
document.write (p_3);
<script>
s=0;
for (i=0; i<=10; ++i++) {
s=s+i;
}
write(s);
</script>
<script>
function demo (Valoare) {
document.write (valoare.bold()+<br/>)
}
</script>
</head>
<body>
<form>
<input type=button value=BOLD
onClick=demo(3.14)>
</form>
</body>
</html>
<html>
<head>
<title> aplicaie </title>
<script>
function test (valoare) {
alert (Valoare)
}
</script>
function adunare (unu, doi) {
return unu+doi
}
</head>
</body>
</html>
Figura 11.12
Figura 11.13
Figura 11.14
Figura 11.15
Figura 11.16
408
<script>
function TVA (valoare) {
return valoare*0.19
}
</script>
</head>
<body>
<form>
<input type=button value=calcul TVA
onClick=alert (TVA:+TVA(treisprezece))>
</form>
</body>
</html>
Erori de logic
Erorile de logic se genereaz atunci cnd nu se obin rezultatele scontate! Dei
codul surs JavaScript este corect din punct de vedere sintactic, dei nu sunt
generate erori n timpul execuiei programului (apeluri de funcii incorecte;
atribuiri de valori pentru variabile nedeclarate; imposibiliti aritmetice mprire
la zero etc.), totui programul conine erori de logic (semantice)!
Identificarea erorilor de logic constituie o piatr grea de ncercare pentru
nceptori, dar nu trebuie s disperai!
Foarte multe erori de logic sunt generate de o analiz superficial a aplicaiei, o
proiectare defectuoas a programului JavaScript, i ca urmare de un cod surs
JavaScript incorect!
Aplicaie
Identificai i corectai erorile de logic din urmtoarele script-uri (vezi figurile 11.18,
11.19, 11.20, 11.21).
<script>
stud=parseInt (prompt(Introducei numrul de studeni, 0));
teste=parseInt (prompt(Introducei numrul de teste, 0));
for (i=1; i<=stud; i++) {
nt=0;
media=0;
for (j=1; j<=teste; j++) {
nota=parseInt (rezultate[i][j]);
if(nota) {
media+=nota;
}
}
media=media/nt;
media=Math.flor(media*100)/100;
}
Figura 11.17
Figura 11.18
409
Remarci:
Aplicaia ilustreaz o eroare generat n timpul execuiei script-ului, datorat de o
mprire la zero:
media=media/nt
unde, nt=0.
Corectai eroarea, introducnd n instruciunea if, instruciunea nt++ (figura 11.19).
nt=0;
media=0;
for (j=1; j<=teste; j++){
nota=parseInt (rezultate [i][j]) ;
if nota {
media+=nota;
nt++;
}
}
media=media/nt;
}
<script>
//Conversatia 3
function rotunjeste (x) {
}
//Calculul mediilor pe zile
//Calculul mediilor pe rezervoare
d=new Array (4);
st=0;
for (i=0; i<3; i++) {
s=0;
for (j=0; j<5; j++) {
s=s+a[i][j];
st=st+a[i][j];
}
d[i]=s/5;
}
d[3]=st/14;
Remarci:
Eroarea de logic provine de la numitorul fraciei, din enunul de atribuire
d[3]=st/14;
Enunul trebuie corectat, dup cum urmeaz:
d[3]=st/15;
De ce 15? Rspunsul este simplu: 5 zile (luni, mari, miercuri, joi, vineri) * 3 rezervoare
(R1, R2, R3), (vezi Conversaia 3).
<script>
var Constant=13;
i=7;
for (i<=7; i>0; i--) {
document.write (i+++Constant+=+
(i+Constant)+<br>);
}
</script>
Figura 11.19
Figura 11.20
Figura 11.21
410
Remarci:
Rezultatele afiate (vezi figura 11.22) sunt incorecte, chiar dac execuia s-a ncheiat
fr incidente.
JavaScript evalueaz rezultatul expresiei (i+Constant) ca ir i concateneaz cei doi
operanzi.
Erori generate de incompatibilitatea ntre navigatoare
Nimic nu este mai neplcut dect s constai c dup ce ai reuit s creezi (cu
efort!) script-uri pe care le consideri nemaipomenite, s primeti ntr-o bun zi un
mesaj din partea unui vizitator care s-i semnaleze faptul c script-urile tale nu
merg cu navigatorul acelui vizitator.
Nu uitai c exist un turn Babel al navigatoarelor!
Morala:
testai script-urile dumneavoastr cu mai multe browser-e, nainte de a
le plasa pe server-ul Web;
consultai manualele de utilizare a celor mai importante browser-e:
http://developer.netscape.com/docs/manuals/jsref/
http://msdn.microsoft.com/scripting/jsscripting/jsscript/ default.htm
detectai tipul de navigator utilizat de ctre vizitatorii dumneavoastr.
Figura 11.22
411
n vremurile mai de demult programatorii ncepeau depanarea prin a desena
scheme logice complicate pentru a urmri secvenial, logica programului.
n prezent, schemele logice au fost nlocuite cu pseudocodul, care este o
combinaie de JavaScript i limbaj natural structurat. Acest mod de descriere a
unui algoritm s-a dovedit a fi indispensabil atunci cnd dorii s localizai zona n
care ar putea fi eroarea generat.
Utilizai comentariile
Pentru a v crea primele reflexe JavaScript inserai ct mai multe comentarii n
script-urile dumneavoastr.
Observaie. Comentariile JavaScript (// sau /* i */) au fost prezentate n Conversaia 2).
Pentru a elimina anumite poriuni din codul JavaScript (pn la eliminarea
erorilor) utilizai comentariile conform procedurii de mai jos [1]:
Tehnici de depanare a script-urilor
transformai n comentariu una sau mai multe linii ale programului;
salvai programul;
rencrcai pagina Web n browser;
analizai rezultatul (efectul);
modificai codul surs sau transformai n comentariu mai multe linii de
cod;
repetai aceast procedur pn cnd ai eliminat eroarea.
Afiai valorile variabilelor
O alt tehnic de depanare frecvent folosit este aceea de a aduga instruciuni
JavaScript pentru a putea cunoate strile script-ului.
n acest sens, utilizai metoda al er t ( ) pentru a:
afia valorile variabilelor, matricelor i valorile returnate de funcii;
afia rezultatele expresiilor.
412
De asemenea, putei afia mesaje n bara de stare cu ajutorul proprietii
st at us.
Putei de asemenea afia informaii din procesul de depanare, ntr-o alt
fereastr a navigatorului sau ntr-un cadru anume.
n anumite cazuri, folosii document . wr i t e, dar atenie (!), aceast
metod nu funcioneaz dect atunci cnd documentul a fost complet ncrcat!
Descompunei script-urile complexe n mai multe funcii
Pentru a mri gradul de reutilizare a codului JavaScript este bine s limitai
dimensiunea funciilor pe care urmeaz s le creai. Cu ct dimensiunile unei
funcii sunt mai mici cu att mai mult cresc ansele de reutilizare a acesteia n
diferite zone ale programului.
Verificai documentul (X)HTML
Nu trebuie s uitai c JavaScript nu este singurul limbaj pe care trebuie s-l
utilizai; el interacioneaz de obicei cu codul surs (X)HTML.
Morala este urmtoarea: asigura i-v c documentul (X)HTML nu con ine erori
Este foarte simplu de a comite erori n documentul (X)HTML care con ine
script-ul. A uita tag-ul de nchidere </table> sau </script> este o eroare
frecvent (X)HTML.
!
,
,
Dei (X)HTML nu reprezint obiectul de studiu al nostru (vezi L. Dumitracu
(X)HTML Editura Universitii din Ploieti, 2003) este bine s tii c o eroare
(X)HTML poate genera erori n programul JavaScript.
Verificai codul JavaScript
Atribuire i egalitate. n JavaScript una din erorile cele mai frecvente comise
de ctre nceptori este confuzia ntre operatorul de afectare (=) i operatorul de
egalitate (==). Aceste erori sunt cteodat dificil de identificat n msura n care
ele nu genereaz ntotdeauna un mesaj de eroare.
413
Dac nu tii ce operator s folosii, amintii-v simplu c = servete la
schimbarea valorii unei variabile, iar == servete la compararea a dou valori.
Iat o instruciune eronat (figura 11.23).
<script>
if (x=7) alert (La revedere!);
</script>
Aceast instruciune pare logic la prima vedere, dar x=7 va avea ca efect
atribuirea valorii 7 variabilei x, i nu compararea celor dou. Netscape detecteaz
de cele mai multe ori acest tip de eroare i afieaz un mesaj la consol. Eroarea
invers (== n loc de =) nu va fi niciodat detectat!
Variabile globale i locale. O alt eroare frecvent este confuzia ntre
variabilele globale i locale, atunci cnd se dorete de exemplu a utiliza n
exteriorul unei funcii o variabil care a fost declarat n interiorul unei funcii.
Remarc. Diferena dintre variabilele locale i globale este explicat n Conversaia 2.
Facei referiri corecte la obiecte. Nu de puine ori se fac referiri la obiecte n
mod incorect. Este important de a utiliza numele exacte ale obiectelor i de a
numi explicit prinii unui obiect.
Astfel, este posibil de a ne referi la metoda wi ndow. al er t scriind simplu
al er t . Dar sunt i cazuri cnd utilizarea lui wi ndow. al er t este obligatorie.
O alt eroare frecvent const n neglijarea utilizrii numelui obiectului
Document , scriind de exemplu wr i t e n loc de document . wr i t e.
Instrumente pentru depanarea script-urilor
Figura 11.23
Depanarea codului surs ocup un loc deosebit de important n dezvoltarea
aplicaiilor JavaScript.
Dac ai verificat absena erorilor clasice n script-urile dumneavoastr, care
totui nu funcioneaz este momentul s trecei la depanare, adic la cutarea i
eliminarea erorilor din program, utiliznd instrumentele simple de depanare pe
care le prezentm n continuare.
414
Consola JavaScript
Primul lucru pe care trebuie s-l facei atunci cnd script-ul dumneavoastr nu
funcioneaz este consultarea mesajelor de erori afiate. n Netscape, ncepnd
cu versiunea 4.5, mesajele de eroare nu se afieaz direct, ele fiind nregistrate
n consola JavaScript.
Iat cum procedm pentru a accesa consola JavaScript.
1. Introducei JavaScript n cmpul Address (figura 11.24).
sau,
2. Executai clic pe Tools Web Development JavaScript
Console (figura 11.25).
Remarc. Consola JavaScript afieaz ultimele mesaje de eroare (figura 11.26).
Figura 11.24
Figura 11.25
Figura 11.26
Consola JavaScript nu permite numai vizualizarea erorilor, ea permite de
asemenea introducerea unei instruciuni/expresii, pentru a vedea apoi rezultatul.
415
Aceast funcie este util pentru a verifica existena erorilor de sintax n liniile
de cod ale script-ului dumneavoastr.
Afiarea mesajelor de eroare cu Internet Explorer
Internet Explorer i versiunile mai recente nu afieaz n mod implicit mesajele
de eroare.
Iat cum procedm pentru a afia mesajele de eroare n Internet Explorer.
1. Executai clic pe Tools Internet Options Advanced
(figura 11.27).
Figura 11.27
2. Dezactivai Disable script debugging i activai opiunea Display a
notification about every script error (figura 11.28).
416
Figura 11.28
Figura 11.29
417
Remarci:
Dac nu ai activat afiarea mesajelor de erori, Internet Explorer afieaz n bara de
stare un icon atunci cnd se genereaz o eroare. Executai dublu clic pe acest icon
pentru a afia mesajul de eroare (figura 11.29).
Dup cum ai putut constata i Microsoft dispune de un instrument de depanare la fel de
eficient ca i consola Netscape. Indiferent de preferinele dumneavoastr, testai
script-urile cu cele dou navigatoare.
Alte instrumente de depanare
Mesajele de avertizare (vezi metoda alert()) i puin fler v pot ajuta s
gsii cu uurin cauza unei erori ntr-un script simplu dar aceste metode sunt
insuficiente pentru depanarea script-urilor de dimensiuni mari.
n consecin, v recomandm s utilizai unul din instrumentele specializate,
prezentate mai jos:
W3C validator, instrument de depanare a documentelor (X)HTML, care
poate fi descrcat gratuit, de la adresa:
http://validator.W3.org/
Remarc. Consultai lucrarea L. Dumitracu (X)HTML, Editura Universitii din Ploieti
2003.
Netscape JavaScript Debugger, instrument de depanare a aplicaiilor
JavaScript, care poate fi descrcat gratuit, de la adresa:
http://developer.netscape.com/software/jsdebug.html
sau,
http://www.mozilla.org/projector/venkman/
Remarc. Principalele caracteristici [1] ale instrumentului Netscape JavaScript
Debugger sunt: fereastra Source View; ntrerupere; puncte de ntrerupere;
parcurgerea pas cu pas a codului surs; omiterea liniilor din procedurile apelate;
parcurgerea liniilor din procedurile apelate; fereastra Console; Object Inspector;
fereastra de dialog Error Reporter.
Microsoft Script Debugger (MSSD), instrument de depanare a
script-urilor, parte integrant din Internet Explorer, care poate fi
descrcat gratuit, de la adresa:
http://msdn.microsoft.com/library/en-us/sdbug/html/sdbug_1.asp
Remarc. Principalele caracteristici [1] ale instrumentului Microsoft Script
Debugger sunt: imagine dinamic a structurii (X)HTML; integrarea mai multor limbaje
(JavaScript, VBScript i Java din acelai document); puncte de ntrerupere; parcurgerea
pas cu pas a codului surs; omiterea liniilor din procedurile apelate; parcurgerea liniilor
din procedurile apelate; stiv de apeluri integrat; fereastra de expresii evaluate imediat.
Editoarele de text i de (X)HTML sunt foarte bune instrumente pentru
procesarea de baz; ele v pot de asemenea asista n timpul depanrii,
418
afind numerele de linii i punnd n relief tag-urile corecte cu ajutorul
codurilor de culori.
Aplicaie
Scriei un program JavaScript care calculeaz i afieaz determinantul unei matrice de
dimensiune 3*3.
Indicaie.
i h g
f e d
c b a
= a*(e*if*h)b*(d*if*g)+c*(d*he*g)
Iat cum procedm pentru a scrie programul JavaScript care calculeaz i
afieaz determinantul matricei
9 8 7
6 5 4
3 2 1
.
1. Creai documentul (X)HTML (figura 11.30).
2. Plasai script-ul de calcul al determinantului n documentul (X)HTML
(figura 11.31).
Figura 11.30
419
3. Validai documentul (X)HTML cu aplicaia validator
(http://validator.w3.org).
n figura 11.32 este prezentat rezultatul validrii obinut cu aplicaia
validator.
Figura 11.31
Figura 11.32
420
Remarc. Nimic nu este perfect! Ai identificat eroarea? Dei l pronun bine pe r, n loc de r am
tastat l (</sclipt>). Se ntmpl, nu-i aa! Corectai </ scr i pt >!
4. Corectai eroarea i validai documentul (X)HTML cu aplicaia
validator (http://validator.w3.org), figura 11.33.
5. Inserai codul HTML care afieaz icon-ul de conformitate (figura 11.34).
Figura 11.33
Figura 11.34
6. Vizualizai pagina Web ntr-un browser (Internet Explorer), figura 11.35.
421
Remarc. Internet Explorer afieaz icon-ul de conformitate la baza paginii.
7. Testai script-ul (figura 11.36).
Instruciunea throw genereaz o eroare. Un bloc try conine instruciuni
JavaScript; la apariia unei erori, programul execut blocul catch.
Instruciunea throw
Sintaxa instruciunii throw este prezentat n figura 11.37.
Instruciune Sintax
t hr ow t hr ow mesaj eroare
Remarc. Instruciunea t hr ow este utilizat frecvent ntr-o instruciune t r y cat ch; ea
transfer eroarea blocului cat ch.
Instruciunile throw i try catch
Figura 11.36
Figura 11.37
Figura 11.35
422
Iat cum procedm pentru a genera dou mesaje de eroare: Eroare 1,
Eroare 2 n situaia n care numrul de rezervoare cilindrice echilaterale care
a fost introdus de la tastatur este zero, respectiv negativ (vezi EXEMPLELE
JAVASCRIPT).
n figura 11.38 este prezentat script-ul aplicaiei.
<script>
try {
n=prompt (Introducei numrul de rezervoare (n),0);
if (n==0)
throw Eroare 1
else
if (n<0> throw Eroare 2
}
catch (er) {
if (er==Eroare 1) alert (Eroare 1 numr rezervoare=0)
if (er==Eroare 2) alert(Eroare 2 numr rezervoare negativ)
}
</script>
Comentarii:
Programul execut blocul t r y.
n situaia n care n nu este egal cu zero i nici negativ, nu se genereaz nici o eroare iar
blocul cat ch nu este executat. Pentru utilizator nu se ntmpl absolut nimic.
n cazul n care valoarea variabilei n a fost fixat la 0 n cursul instruciunilor executate
anterior, eroarea Eroare 1 este generat (aceast eroare este de acelai tip cu erorile
de sintax). Programul prsete blocul t r y i execut blocul cat ch, furnizndu-i ca
parametru tipul de eroare returnat prin throw. n definitiv, el afieaz un mesaj
al er t ( ) .
Instruciunea try catch
Tr y cat ch servete la testarea unei poriuni de cod JavaScript i la
depistarea eventualelor erori. Ea este alctuit din trei blocuri: t r y, cat ch i
f i nal l y.
Sintaxa instruciunii este prezentat n figura 11.39.
Instruciune Sintax
t r y . . . cat ch t r y {
cod1
}
cat ch ( Eroare) {
cod2
}
f i nal l y {
cod3
}
Figura 11.38
Figura 11.39
423
Remarci:
Tr y conine instruciuni (cod1) JavaScript care ar putea fi sursa problemei. n cazul
apariiei unei erori, script-ul sare imediat n blocul catch transmindu-i ca parametru
obiectul Er r or generat.
Dac instruciunile din blocul t r y nu depisteaz nici o eroare, script-ul trece imediat la
blocul f i nal l y, evitnd blocul cat ch.
Iat cum calculm aria unui rezervor sferic ( ) cu raza de 3m utiliznd
2
4 R a =
funcia intern eval(). Dac eval() recunoate instruciunea JavaScript
a=4*Math.PI*Math.pow(3,2) atunci ea evalueaz textul primit ca
argument i returneaz rezultatul. n caz contrar, navigatorul afieaz un mesaj
de eroare.
n figura 11.40 este prezentat script-ul aplicaiei.
<script>
try {
a=prompt (Introducei a=4*Math.PI*Math.pow(3,2),);
aeval=eval(a);
alert (Aria rezervorului sferic cu raza de 3m este:+aeval);
}
catch(err) {
if (err.name==SyntaxError) alert (Eroare de sintax!)
else alert (Expresia nu poate fi evaluat)
}
</script>
Comentarii:
t r y ateapt o eroare!
eval ( ) accept un ir de instruciuni JavaScript i l evalueaz ca fiind cod surs.
Dac utilizatorul introduce a=4*Math.PI*Math.pow(3,2), JavaScript poate
evalua expresia i va afia 113.097.
Dac utilizatorul introduce a=4*Math.PI*pow(3,2)+, spunem c avem de-a
face cu o eroare de sintax.
n sfrit, dac utilizatorul introduce Droopy, JavaScript ncearc s evalueze
valoarea variabilei Droopy, care nu exist. Nu este vorba de o eroare de sintax ci de o
eroare de referin. Expresia nu poate fi evaluat se va afia n acest
caz pe ecran.
JavaScript recunoate ase tipuri de erori (vezi figura 11.41).
Numele erorii Descriere
Eval Er r or Utilizare greit a metodei eval ( )
RangeEr r or O valoare numeric este foarte important
Ref er enceEr r or Referin la o variabil, sau referin necunoscut sau
invalid
Synt axEr r or Eroare de sintax
TypeEr r or Tipul de variabil este greit
URLEr r or Utilizare greit a URL-ului
Remarc. Nu uitai c i dumneavoastr putei genera cu t hr owpropriile erori. Succes!
Figura 11.40
Figura 11.41
424
Tem
Testai-v cunotinele
1. Dac la crearea unui script, comitei greeli de tastare, ce tip de eroare este
generat?
eroare de sintax
eroare de logic
eroare de intrare/ieire
2. De regul, greelile de punctuaie care se comit la crearea unui script sunt:
confuzia ntre majuscule i minuscule
paranteze orfeline
inversarea literelor
3. Foarte multe erori de logic sunt generate de:
o proiectare defectuoas a programului JavaScript
confuzia ntre irurile de caractere i numere
greeli de plasare a instruciunilor JavaScript
4. Inserarea comentariilor n programele JavaScript contribuie la:
crearea unor reflexe JavaScript
eliminarea erorilor de sintax
eliminarea erorilor de logic
5. n JavaScript una din erorile cele mai frecvente comise de nceptori este
confuzia dintre:
operatorul de atribuire i operatorul de egalitate
operatorul == i operatorul ===
operatorul || i operatorul &&
6. Consola JavaScript este:
un instrument simplu pentru afiarea mesajelor de eroare cu Netscape
un instrument simplu pentru afiarea mesajelor de eroare cu Internet
Explorer
un buton ncastrat
7. W3C validator este un instrument de depanare a documentelor:
(X)HTML
XML
JavaScript
JavaScript
425
8. Instruciunea t hr owgenereaz:
o eroare
un tabel
un formular
9. JavaScript recunoate urmtoarele tipuri de erori:
Eval Er r or
Si nt axEr r or
TypeEr r or
For mat Er r or
Logi cal Er r or
Vizitai site-urile
http://developer.netscape.com/docs/manuals/jsref/objintro.htm
http://msdn.microsoft.com/scripting/jsscript/default.htm
tr
Conversaia 12
Crearea obiectelor personalizate
n aceast conversaie:
Utilizarea obiectelor personalizate pentru simplificarea script-urilor
Defini i un obiect
Defini i o metod pen u un obiect
Crea i o instan a unui obiect
Aplica ii
EXEMPLUL 12 JAVASCRIPT
Tem
Utilizarea obiectelor personalizate pentru simplificarea
script-urilor
Fr s greim, putem afirma c avei deja o experien (un background) n
utilizarea obiectelor predefinite ale limbajului JavaScript.
Suntei de asemenea familiarizai cu obiectele DOM-ului (Document Object
Model) care permit manipularea documentelor Web. Aceste obiecte sunt cele mai
frecvente n programarea JavaScript.
Dar ... putei de asemenea s creai propriile dumneavoastr obiecte, ceea ce
trebuie s recunoatem este ceva nemaipomenit!
Dac variabilele i matricile permit stocarea datelor sub diverse forme, uneori
este necesar s facem apel la structuri mai sofisticate! S presupunem c dorii
s creai un script care s gestioneze coordonatele persoanelor de contact
(nume, adresa site, adresa email) din activitatea dumneavoastr profesional.
428
n situaia n care utilizai variabile normale vei fi obligat s definii o variabil
pentru fiecare coordonat a fiecrei persoane (pentru fiecare nume, fiecare
adres site i fiecare adres email) ceea ce este foarte complicat!
Utilizarea matricilor simplific puin lucrurile, dar nu este ideal!
Obiectele (aici am vrut s ajungem!) permit stocarea informaiilor bazei de date
ntr-o manier mult mai logic.
Fiecare persoan este reprezentat printr-un obiect Contact care dispune de
proprietile: nume, adres site i adres email.
Putei aduga dup aceea obiectului Contact, metode pentru
afiarea/manipularea informaiilor coninute.
Prima etap n crearea unui obiect const n a-i da un nume. Am decis s numim
obiectul Contact. Fiecare obiect Contact conine urmtoarele proprieti:
nume;
site (adresa de site (personal));
email (adresa de email (personal)).
Pentru a putea utiliza obiectul, va trebui mai nti s crem o funcie
Constructor care are rolul de a crea noi obiecte Contact.
Iat cum crem n JavaScript o funcie Constructor (Contact) cu trei
parametri pentru iniializarea noului obiect i atribuirea proprietilor
corespunztoare.
n figura 12.1 este prezentat codul JavaScript al funciei Constructor.
Definii un obiect
Figura 12.1
429
Remarci:
Constructorul este o funcie simpl care accept mai muli parametri ale cror valori sunt
atribuite proprietilor obiectului.
Obiectul are acelai nume ca i funcia Contact.
Cuvntul cheie this se refer la obiectul curent, acela creat cu ajutorul funciei.
Obiectele devin cu adevrat interesante i comode atunci cnd ele sunt dotate cu
metode.
n JavaScript, definirea unei metode pentru un obiect se realizeaz n dou
etape:
Definii metoda n funcia Constructor ntr-o linie de cod n care vei
atribui metodei un nume, apoi asociai-i funcia de prelucrare.
Scriei funcia de prelucrare.
Iat cum definim metoda afiareContact n funcia Constructor Contact.
n figura 12.2 este prezentat codul complet JavaScript al funciei
Constructor.
Remarci:
Funcia afiareContact afieaz coordonatele de contact ale unei persoane.
Instruciunea care a fost adugat seamn cu o definiie a proprietii, dar se refer la
funcia afiareContact. Putei utiliza aceast sintax din momentul n care funcia
afiareContact a fost definit.
Funcia afiareContact este utilizat ca metod, fr parametri!
Cuvntul cheie this se refer la obiectul curent.
Iat cum scriem n JavaScript funcia de prelucrare afiareContact asociat
metodei cu acelai nume.
Definii o metod pentru un obiect
Figura 12.2
n figura 12.3 este prezentat codul JavaScript al funciei afiareContact.
430
Remarc. Cuvntul cheie this se refer la proprietile obiectului.
Creai o instan a unui obiect
Figura 12.3
n continuare, vom utiliza definiia obiectului pe care urmeaz s-l crem. Pentru
a utiliza o definiie a obiectului va trebui s crem un nou obiect cu ajutorul
cuvntului cheie new(vezi obiectele Ar r ay, Dat e, St r i ng).
n figura 12.4 se prezint codul JavaScript care creeaz un nou obiect Contact
numit Droopy.
Remarci:
Crearea unui obiect nu este o operaie complicat. Tot ceea ce trebuie fcut este
apelarea funciei Contact(), care este funcia de definire a obiectului, i indicarea
coordonatelor n aceeai ordine ca n definiie.
Odat executat instruciunea din figura 12.4, un nou obiect a fost creat, care conine
informaii despre Droopy. Acest obiect (Droopy) este o instan a obiectului
Contact.
n figura 12.5 se prezint o secven de cod JavaScript care creeaz un obiect
Contact vid (Romic) i definete apoi proprietile sale.
Figura 12.4
Figura 12.5
431
Odat creat instana obiectului Contact cu ajutorul uneia din metodele
prezentate, utilizai metoda afiareContact pentru a afia informaiile
corespunztoare. Proprietile persoanei de contact Droopy sunt afiate ca n
figura 12.6.
Aplicaii
Creai un document (X)HTML care afieaz n Internet Explorer lista de contact a trei
persoane (vezi figura 12.7).
Indicaie. Utilizai obiectul Contact.
Figura 12.6
Figura 12.7
432
n figura 12.8 este prezentat documentul XHTML complet n care s-a inserat
script-ul aplicaiei.
Remarc. n cadrul acestei aplicaii baza de date utilizat are dimensiuni extrem de reduse. Un
obiect asemntor poate stoca date care provin dintr-o baz de date extern care conine mii de
nregistrri.
Figura 12.8
Modificai definiia obiectului Contact pentru a include o proprietate adresa care
permite stocarea adresei persoanei de contact. Modificai funcia afiareContact.
433
Definirea problemei
Aplicaia pe care urmeaz s o realizai n cadrul acestei ultime conversaii (!) este o mic
baz de date care conine notele obinute la mai multe materii, de ctre studenii unei
grupe.
Pentru gestionarea automat a acestor date, vom folosi facilitile JavaScript (tabelul pe
parte de client), pentru a rspunde cerinelor conducerii unei instituii de nvmnt.
Cerine de prelucrare
Se vor avea n vedere cerinele de prelucrare prezentate mai jos:
studenii sunt identificai prin: cod, nume, prenume;
materiile de studiu sunt identificate prin: cod, denumire;
nota 0 (zero) semnific absena studentului de la examen sau verificare.
rapoartele generate sunt de unul din urmtoarele tipuri:
raport general studenii sunt afiai n ordine alfabetic (nume, prenume i
notele obinute la toate materiile);
raport pe materii pentru o materie selectat din lista de materii, studenii
sunt listai n dou moduri:
ordine alfabetic;
ordine descresctoare a notelor;
raport restanieri pentru fiecare materie se afieaz studenii care nu au
obinut nota 5 de promovare;
cererile de cutare n baza de date sunt:
identificarea unui student i afiarea notelor obinute la toate materiile;
identificarea studenilor restanieri pentru o materie selectat.
EXEMPLUL 12 JAVASCRIPT
434
Proiectarea programului
Crearea tabelelor de cutare
Se vor utiliza obiecte personalizate care s simuleze o baz de date. Documentul
(X)HTML va conine informaii despre dou entiti:
materie conine atributele: cod (numrul de identificare al materiei),
denumirea materiei (ir de caractere);
student conine atributele: numele i prenumele studentului; notele obinute la
materiile de studiu.
Remarc. A fost aleas o soluie simplificat care prezint dezavantajul unei flexibiliti reduse la
modificarea numrului materiilor de studiu i la adugarea mai multor ani de studiu, dar ... din
punct de vedere didactic este mult mai uor de neles.
Tabelul entiti materii pe parte de client i tabelul entiti student pe parte de client se
vor implementa dup cum urmeaz:
tabelul materii se va utiliza un vector ir de caractere; codul de identificare al
materiei va fi indicele materiei iar elementele vectorului, un ir de caractere ce
reprezint denumirea materiei.
tabelul student se va utiliza un vector de obiecte personalizate n care indicele
vectorului va reprezenta numrul de identificare al studentului iar obiectul
personalizat va fi format din dou iruri de caractere:
Nume, Prenume reprezint numele i prenumele studentului;
Note vector de numere ntregi reprezentnd notele obinute de student
(dimensiunea vectorului de note trebuie s fie egal cu dimensiunea
vectorului materii care definete numele materiilor de studiu).
Definii obiectul student (vezi metoda constructor, def_student (Nume,
Prenume, Note) din figura 12.9) i creai instane de acest tip.
Pentru aceasta va trebui s creai mai nti lista cu note i apoi s apelai metoda
constructor (def_student) a obiectului student (vezi figura 12.10).
function def_student(Nume,Prenume,note){
this.Nume=Nume;
this.Prenume=Prenume;
this.Note=Note;
}
...
var lista_stud=new Array();
var note1=new Array(5,6,7,10,10);
lista_stud[0]=new def_student(Avram,Nicolae,note1);
}
Figura 12.9
Figura 12.10
435
Crearea interfeei cu utilizatorul
Interfaa cu utilizatorul trebuie s asigure afiarea facil a tuturor cerinelor de prelucrare.
Pentru a afia simultan opiunile de prelucrare, criteriile i rezultatele prelucrrii cererilor
de cutare se va folosi o fereastr cu mai multe (4) cadre (vezi figura 12.11).
Cadrul titlu
Cadrul inputd Cadrul subrap
Cadrul fraport
Vom prezenta n cele ce urmeaz funciile celor patru cadre n care a fost mprit
fereastra browser-ului.
Cadrul titlu
Cadrul titlu afieaz textul Intranet Baza de Date cu Studeni (vezi
figura 12.12).
Figura 12.11
Figura 12.12
Cadrul inputd
Cadrul inputd afieaz tipul prelucrrii. Se afieaz dou butoane radio (Rapoarte,
Cutare) cu ajutorul crora utilizatorul poate selecta tipul de raport (General, Pe
Materii, Restanieri) i tipul cutrii (Dup studeni, Restanieri).
n figura 12.13 se prezint cadrul inputd al ferestrei interfeei cu utilizatorul cu tipul
prelucrrii RAPOARTE iar n figura 12.14 se prezint acelai cadru cu tipul prelucrrii:
CUTARE.
436
Cadrul subrap
Cadrul subrap este cadrul prin intermediul cruia se introduc datele necesare efecturii
prelucrrilor cerute de utilizator prin selecia unei opiuni din cadrul inputd. El este generat
dinamic.
n figurile 12.15, 12.16, 12.17, 12.18, 12.19 este prezentat coninutul cadrului subrap
pentru opiunile RAPOARTE i CUTARE.
Figura 12.13
Figura 12.14
Figura 12.15
437
Figura 12.16
Figura 12.17
Figura 12.18
438
Remarc. Observai n figurile 12.15, 12.16, 12.17, 12.18, 12.19 prezena butonului EXECUT.
Cadrul fraport
Cadrul fraport este cadrul n care se afieaz rezultatele prelucrrilor. Coninutul acestuia
este dinamic, fiind generat n funcie de cererea de cutare selectat.
n figura 12.20 este prezentat cadrul fraport al ferestrei interfeei cu utilizatorul pentru
RAPORT GENERAL (Rapoarte General, n cadrul inputd).
Figura 12.19
Figura 12.20
439
Crearea funciilor de prelucrare a datelor
Aplicaia poate genera trei rapoarte i execut dou cereri de cutare. Tipul raportului
sau al cutrii este selectat de utilizator prin intermediul cadrului inputd.
Corespunztor seleciei utilizatorului, n cadrul subrap se vor modifica zonele de
interaciune cu utilizatorul. Astfel, dac utilizatorul selecteaz generarea raportului
general atunci cadrul subrap va afia un buton pentru a lansa n execuie
prelucrarea (vezi figura 12.18). Cadrul inputd permite i schimbarea tipului de
prelucrare (raport sau cutare) prin afiarea a dou butoane radio prin care
utilizatorul poate realiza selecia. Acionarea unuia din aceste butoane radio lanseaz n
execuie funcia afisrap care modific opiunile listei tiprap.
n figura 12.21 este prezentat pseudocodul funciei afisrap().
Pseudocodul AFISRAP
AFISRAP BEGIN
Parametrii: t- valoare intreaga
IFAFIS IF (t==0)
//afisare tip raport
//fixeaza trei optiuni in lista tiprap
tiprap.optiune[0]=General
tiprap.optiune[1]=Materii
tiprap.optiune[2]=Restantieri
IFAFIS ELSE
tiprap.optiune[0]=Student
tiprap.optiune[1]=Restantieri
IFAFIS ENDIF
AFISRAP END
Selectarea unei opiuni din lista tiprap va duce la afiarea n cadrul subrap a
elementelor de interfa ce asigur introducerea informaiilor necesare pentru fiecare tip
de prelucrare i lansarea n execuie a prelucrrii respective. Astfel, se gestioneaz
evenimentul onChange care va executa funcia afis_subopt. Pseudocodul funciei
afis_subopt() este prezentat n figura 12.22.
Pseudocodul AFIS_SUBOPT
AFIS_SUBOPT BEGIN
//determinarea indexului optiunii selectate
ir=tiprap.selectedIndex
IF1 IF (raport[0].checked)
CASE1 CASE (ir)
0:DO afis_subrap0
1:DO afis_subrap1
2:DO afis_subrap2
CASE1 ENDCASE
IF1 ELSE
CASE2 CASE (ir)
0:DO afis_subrap3
1:DO afis_subrap4
CASE2 ENDCASE
IF1 ENDIF
AFIS_SUBOPT END
Figura 12.21
Figura 12.22
440
Funcia afis_subrap0 construiete interfaa cu utilizatorul pentru prelucrarea datelor
n cazul generrii raportului general (figura 12.20). Interfaa va fi afiat n
frame-ul subrap i conine ca element de aciune doar butonul Executa care prin
apsare va apela funcia executaRG() care va afia raportul general (vezi
pseudocodul din figura 12.23).
Pseudocodul AFIS_SUBRAPO, EXECUTARG
AFIS_SUBRAP0 BEGIN
//afiarea informaiilor despre raport
subrap.WRITE Raport General
subrap.WRITE Afiseaza toata grupa si toate notele
genereaza html pentru form f2 ce contine butonul executa
IF1 IF (clic pe butonul Executa)
DO executaRG
IF1 ENDIF
AFIS_SUBRAP0 END
EXECUTARG BEGIN
//afiarea studentilor din grupa
subrap.WRITE Raport General
subrap.WRITE Nume prenume
FOR1 FOR(i=0;i<materii.length;i++)
subrap.WRITE materii[i]
FOR1 ENDFOR
FOR2 FOR(i=0;i<lista_stud.length;i++)
subrap.WRITE lista_stud[i].nume lista_stud[i].prenume
FOR3 FOR(j=0;j<materii.length;j++)
subrap.WRITE lista_stud[i].Note[j]
FOR3 ENDFOR
FOR2 ENDFOR
EXECUTARG END
Funcia afis_subrap1 construiete interfaa cu utilizatorul pentru generarea
raportului pe materii (figura 12.24).
Interfaa va fi afiat n frame-ul subrap i conine dou liste de opiuni i butonul
Executa. Lista de opiuni smaterii conine lista materiilor, iar lista sordine
permite selecia modului de ordonare al studenilor: ordinea alfabetic sau ordinea dat
de notele la materia respectiv.
Figura 12.23
Figura 12.24
441
Butonul Execut prin apsare va apela funcia executaRM() care va afia
raportul pe materii (vezi figura 12.25). Afiarea studenilor se va face n funcie
de ordinea impus de vectorul asociat vord. Pentru afiarea studenilor n funcie de
nume, ordinea este cea n care sunt pstrate n vectorul lista_stud informaiile
despre studeni. n cazul ordonrii descresctoare dup note, vord va conine indicii
studenilor din vectorul list_stud n ordinea descresctoare a notelor. Astfel, vord[0] va
conine indicele elementului din lista_stud al studentului care are nota cea mai mare
la materia respectiv. Algoritmul de sortare implementat este un algoritm clasic
bubble-sort (vezi pseudocodul din figura 12.26).
Pseudocodul AFIS_SUBRAP1, EXECUTARM
AFIS_SUBRAP1 BEGIN
//afiarea informaiilor despre raport
subrap.WRITE Raport pe Materii
generaza html pentru forma f2
IF1 IF (clic pe butonul Executa)
DO executaRG
IF1 ENDIF
AFIS_SUBRAP1 END
EXECUTARM BEGIN
//afiarea raportului pe materii al studentilor din grupa
subrap.WRITE Raport pe Materii
//determina selectiile utilizatorului
imat=smaterii.selectedIndex;
iord=sordine.selectedIndex;
//aloca spatiu pentru vectorul vord
new vord
//se plaseaza ordinea initiala in vector
FOR1 FOR(i=0;i<vord.length;i++)
vord[i]=i;
FOR1 ENDFOR
Figura 12.25
Figura 12.26
442
IF2 IF(iord==1)
//ordinea in functie de note
// ordoneaza lista_stud descrescator dupa note
// se aplica algoritmul de sortate bubble_sort
neordonat=true;
WHILE1 WHILE (neordonat)
neordonat=false;
FOR2 FOR(i=0;i<lista_stud.length-1;i++)
IF3 IF(lista_stud[vord[i]].Note[imat]<
lista_stud[vord[i+1]].Note[imat])
j=vord[i];
vord[i]=vord[i+1];
vord[i+1]=j;
neordonat=true;
IF3 ENDIF
FOR2 ENDFOR
WHILE1 ENDWHILE
// afiseaza studenti
FOR3 FOR(i=0;i<lista_stud.length;i++)
subrap.WRITE lista_stud[vord[i]].nume
subrap.WRITE lista_stud[vord[i]].prenume
subrap.WRITE lista_stud[i].Note[imat]
FOR3 ENDFOR
IF2 ENDIF
EXECUTARM END
Funcia afis_subrap2 construiete interfaa cu utilizatorul pentru generarea raportului
ce afieaz studenii restanieri (figura12.27).
Figura 12.26
( continuare)
Figura 12.27
Interfaa conine doar butonul Executa care prin apsare va apela funcia
executaRR() care va afia raportul studenilor restanieri (vezi figura 12.28).
443
Pentru afiarea studenilor pe materii se apeleaz funcia afis_restantieri care
are ca parametru indicele materiei ce urmeaz a fi prelucrat (vezi pseudocodul din
figura 12.29).
Pseudocodul AFIS_SUBRAP2
AFIS_SUBRAP2 BEGIN
//afiarea informaiilor despre raport
subrap.WRITE Raport Restantieri
generaza html pentru forma f2 ce conine butonul Executa
IF1 IF (clic pe butonul Executa)
DO EXECUTARR
IF1 ENDIF
AFIS_SUBRAP2 END
EXECUTARR BEGIN
//afiarea raportului restantieri pe materii
subrap.WRITE Raport Restantieri
FOR1 FOR(j=0;j<materii.length;j++)
fraport.WRITE "Materia:",materii[j],
DO afis_restantieri(j);
FOR1 ENDFOR
EXECUTARR END
AFIS_RESTANTIERI BEGIN
Parametrii
imat- indicele materiei
nrest=0;
//determina numarul de restantieri
FOR2 FOR(i=0;i<lista_stud.length;i++)
IFF IF (lista_stud[i].Note[imat]<5)
nrest++;
IFF ENDIF
FOR2 ENDFOR
IF2 IF(nrest>0)
//afiseaza in tabel studentii restantieri
fraport.WRITE "Numar restantieri:",nrest
fraport.WRITE "NR. Nume Prenume Nota
Figura 12.28
Figura 12.29
444
k=0;
FOR3 FOR(i=0;i<lista_stud.length;i++)
IF3 IF(lista_stud[i].Note[imat]<5)
fraport.WRITE i+1, lista_stud[i].Nume
fraport.WRITE lista_stud[i].Prenume
IF4 IF(lista_stud[i].Note[imat]==0)
fraport.WRITE"absent"
IF4 ELSE
fraport.WRITE
lista_stud[i].Note[imat]
IF4 ENDIF
IF3 ENDIF
FOR3 ENDFOR
IF2 ELSE
fraport.WRITE "Nu esista restantieri"
IF2 ENDIF
AFIS_RESTANTIERI END
Funcia afis_subrap3 construiete interfaa cu utilizatorul pentru cutarea unui
student dup nume, prenume (figura 12.30).
Interfaa conine dou zone de editare (Nume student, Prenume student)
pentru specificarea numelui, respectiv prenumelui studentului cutat i butonul
Executa. Prin acionarea butonului Executa se va apela funcia executaCS()
(vezi pseudocodul prezentat n figura 12.31) care va afia rezultatele studentului dorit sau
un mesaj de eroare dac acesta nu exist n baza de date (vezi figura 12.32).
Pseudocodul AFIS_SUBRAP3, EXECUTACS
AFIS_SUBRAP3 BEGIN
//afiarea informaiilor despre raport
subrap.WRITE Cautare rezultate student
generaza html pentru forma f2
IF1 IF (clic pe butonul Executa)
DO EXECUTACS
IF1 ENDIF
AFIS_SUBRAP3 END
EXECUTACS BEGIN
//afiarea rezultatelor unui student
//transferul datelor introduse in zonele de editare
sn=snume.value;
pn=spnume.value;
fraport.WRITE"Cautare rezultate student"
IF2 IF(sn!="")
Figura 12.29
(continuare)
Figura 12.30
Figura 12.31
445
IF3 IF(pn!="")
// determina numarul de studenti ce au numele
// si prenumele specificat
nr=0;
FOR1 FOR(i=0;i<lista_stud.length;i++)
IF4 IF((lista_stud[i].Nume==sn)&&
(lista_stud[i].Prenume==pn))
Nr=nr+1
IF4 ENDIF
FOR1 ENDFOR
IF5 IF(nr>0)
fraport.WRITE "NR. Nume Prenume
FOR2 FOR(i=0;i<materii.length;i++)
fraport.WRITE materii[i]
FOR3 FOR(i=0;i<lista_stud.length;i++)
IF6 IF((lista_stud[i].Nume==sn)&&
(lista_stud[i].Prenume==pn))
fraport.WRITE i+1, lista_stud[i].Nume
fraport.WRITE lista_stud[i].Prenume
FOR4 FOR(j=0;j<materii.length;j++)
fraport.WRITE lista_stud[i].Note[j]
FOR4 ENDFOR
IF6 ENDIF
FOR3 ENDFOR
FOR2 ENDFOR
IF5 ELSE
fraport.WRITE "Nu exista nici un student cu numele:",
sn," Prenumele:",pn
IF5 ENDIF
IF3 ELSE
//determina numarul de studenti cu numele sn
nr=0;
FOR5 FOR(i=0;i<lista_stud.length;i++)
IF7 IF(lista_stud[i].Nume==sn)
nr=nr+1
IF7 ENDIF
FOR5 ENDFOR
IF8 IF(nr>0)
fraport.WRITE "Numar Studenti:",nr
fraport.WRITE "NR. Nume Prenume "
FOR6 FOR(i=0;i<materii.length;i++)
fraport.WRITE materii[i]
FOR6 ENDFOR
FOR7 FOR(i=0;i<lista_stud.length;i++)
IF9 IF(lista_stud[i].Nume==sn)
fraport.WRITE i+1, lista_stud[i].Nume,
fraport.WRITE lista_stud[i].Prenume
FOR8 FOR(j=0;j<materii.length;j++)
fraport.WRITE lista_stud[i].Note[j]
FOR8 ENDFOR
IF9 ENDIF
FOR7 ENDFOR
IF8 ELSE
fraport.WRITE "Nu exista nici un student
cu numele:", sn
IF8 ENDIF
IF3 ENDIF
IF2 ENDIF
EXECUTACS END
Figura 12.31
(continuare)
446
sau
Funcia afis_subrap4 construiete interfaa cu utilizatorul pentru generarea afirii
studenilor restanieri la o singur materie(figura 12.33).
Interfaa conine o list de opiuni, (smaterii), pentru selecia materiei dorite i
butonul Executa care prin apsare va apela funcia executaCR() ce va afia
raportul studenilor restanieri la materia respectiv(vezi figura 12.34).
Pentru afiarea studenilor restanieri la o materie se apeleaz funcia
afis_restantieri pe care am prezentat-o anterior (vezi pseudocodul prezentat n
figura 12.35).
Pseudocodul AFIS_SUBRAP4, EXECUTACR
Figura 12.32
Figura 12.33
Figura 12.34
447
AFIS_SUBRAP4 BEGIN
//afiarea informaiilor despre raport
subrap.WRITE Restantieri la o Materie
generaza html pentru forma f2
IF1 IF (clic pe butonul Executa)
DO EXECUTACR
IF1 ENDIF
AFIS_SUBRAP4 END
EXECUTACR BEGIN
//determinarea indexului materiei selectate
imat=smaterii.selectedIndex;
subrap.WRITE CAUTARE RESTANTIERI LA MATERIA:
subrap.WRITE materii[imat]
DO afis_restantieri(imat);
EXECUTACR END
Codificarea n limbajul JavaScript
n figurile 12.36, 12.37, 12.38, 12.39, 12.40 sunt prezentate, pentru fiecare cadru
n parte, documentele HTML complete.
Codul HTML pentru interfaa cu utilizatorul
<html>
<head>
<title>Intranet baza de date cu studenti</title>
<script language="JavaScript">
<!---
//CREAREA TABELULUI CU MATERII
var materii = new Array("Algebra superioara", "Fizica","Chimie","Informatica", "Analiza
Functionala");
//CREAREA TABELULUI DE STUDENTI
var lista_stud=new Array();
//DEFINIREA CONSTRUCTORULUI OBIECTULUI PERSONALIZAT
function def_student(Nume,Prenume,Note){
this.Nume=Nume;
this.Prenume=Prenume;
this.Note=Note;
}
//CREEAZA LISTA DE STUDENTI
var note1=new Array(5,6,7,10,10);
lista_stud[0]=new def_student("Avram","Nicolae", note1);
note1=new Array(4,9,5,7,8);
lista_stud[1]=new def_student("Berbecaru","Catalin", note1);
note1=new Array(10,9,8,10,10);
lista_stud[2]=new def_student("Botea","Ion", note1);
note1=new Array(6,8,7,7,5);
lista_stud[3]=new def_student("Cazacu","Marin", note1);
note1=new Array(9,8,0,7,8);
lista_stud[4]=new def_student("Ciufu","Gheorge", note1);
Figura 12.35
Figura 12.36
448
note1=new Array(8,6,8,6,5);
lista_stud[5]=new def_student("Codescu","Petre", note1);
note1=new Array(4,4,0,5,5);
lista_stud[6]=new def_student("Dinu","Mihaela", note1);
note1=new Array(5,6,5,4,4);
lista_stud[7]=new def_student("Dobre","Magdalena", note1);
note1=new Array(9,4,7,0,5);
lista_stud[8]=new def_student("Georgescu","Dragos", note1);
note1=new Array(6,8,9,6,6);
lista_stud[9]=new def_student("Ionescu","Ludovic", note1);
note1=new Array(4,0,4,4,5);
lista_stud[10]=new def_student("Mihail","Gheorghe", note1);
note1=new Array(8,7,7,8,6);
lista_stud[11]=new def_student("Nastase","Stefan", note1);
note1=new Array(7,5,8,7,8);
lista_stud[12]=new def_student("Neagu","Constanta", note1);
note1=new Array(9,9,8,8,9);
lista_stud[13]=new def_student("Oprea","Tudor", note1);
note1=new Array(8,8,6,9,9);
lista_stud[14]=new def_student("Panait","Gabriel Andrei", note1);
note1=new Array(5,8,5,6,7);
lista_stud[15]=new def_student("Patrichi","Mihai Ioan", note1);
note1=new Array(9,8,6,5,8);
lista_stud[16]=new def_student("Radoiu","Alin", note1);
note1=new Array(6,5,8,6,8);
lista_stud[17]=new def_student("Savu","Ion Mihut", note1);
note1=new Array(7,5,5,5,7);
lista_stud[18]=new def_student("Stanescu","Stelian", note1);
note1=new Array(8,5,5,4,6);
lista_stud[19]=new def_student("Stoian","Daniel", note1);
note1=new Array(6,9,8,7,8);
lista_stud[20]=new def_student("Trifu","Mihaela Elena", note1);
note1=new Array(7,5,8,7,6);
lista_stud[21]=new def_student("Ungureanu","Eliza", note1);
note1=new Array(6,6,5,6,7); lista_stud[22]=new def_student("Zaharescu","Danut", note1);
function rotunjeste(x) {
var s=""+x;
i=s.indexOf(".");
if(i!=-1){
s=s.substring(0,i+3);
}
return s;
}
//FUNCTIA CARE REALIZEAZA RAPORTUL GENERAL
function executaRG(){
VAR I,J,K;
//AFISARE REZULTATE PENTRU RAPORT GENERAL
fraport.document.open();
fraport.document.writeln("<center><p><b>RAPORT GENERAL </b></p></center>");
fraport.document.writeln("<center><table border=1 bgcolor=#efefff><tr>");
fraport.document.writeln("<td bgcolor=#8bd3e9><b>NR.</b>",
Figura 12.36
(continuare)
449
"<td bgcolor=#8bd3e9><b>Nume Prenume </b></td>");
for(i=0;i<materii.length;i++) {
fraport.document.writeln("<td bgcolor=#8bd3e9><b>"+ materii[i]+" </b></td>");
}
for(i=0;i<lista_stud.length;i++) {
k=i+1;
if(i%2){bgc="#c0e7ed";}else{bgc="#d9f0f4";}
fraport.document.writeln("<tr><td bgcolor="+bgc+"><b>"+k+" </b></td>");
fraport.document.writeln("<td bgcolor="+bgc+"><b>"+lista_stud[i].Nume+"
"+lista_stud[i].Prenume+"</b></td>");
for(j=0;j<materii.length;j++)
{fraport.document.writeln("<td bgcolor="+bgc+"><b>"+lista_stud[i].Note[j]+" </b></td>");
}
}
fraport.document.writeln("</tr></table>");fraport.document.close();
}
//FUNCTIA CE REALIZEAZA RAPORTUL PE MATERII
function executaRM(){
var i,j,k;
//AFISARE REZULTATE PENTRU RAPORT MATERIE
var imat=subrap.f2.smaterii.selectedIndex;
var iord=subrap.f2.sordine.selectedIndex;
fraport.document.open();
fraport.document.writeln("<center><p><b>RAPORT NOTE MATERIA:");
fraport.document.writeln(materii[imat]," </b></p></center>");
vord=new Array(lista_stud.length);
for(i=0;i<lista_stud.length;i++)vord[i]=i;
if(iord==1) {
//ORDONEAZA VECTORUL DUPA NOTE
neordonat=true;
while (neordonat) {
neordonat=false;
for(i=0;i<lista_stud.length-1;i++)
if(lista_stud[vord[i]].Note[imat]< lista_stud[vord[i+1]].Note[imat]) {
j=vord[i]; vord[i]=vord[i+1];
vord[i+1]=j;
neordonat=true;
}
}
}
fraport.document.writeln("<center><table border=1 bgcolor=#efefff><tr>");
fraport.document.writeln("<td bgcolor=#8bd3e9><b>NR.</b>",
"<td bgcolor=#8bd3e9><b>Nume Prenume </b></td>");
fraport.document.writeln("<td bgcolor=#8bd3e9><b> Nota </b></td>");
for(i=0;i<lista_stud.length;i++) {
k=i+1;
if(i%2){bgc="#c0e7ed";}else{bgc="#d9f0f4";}
fraport.document.writeln("<tr><td bgcolor="+bgc+"><b>"+k+" </b></td>");
fraport.document.writeln("<td bgcolor="+bgc+"><b>"+lista_stud[vord[i]].Nume+"
"+lista_stud[vord[i]].Prenume+"</b></td>");
fraport.document.writeln("<td bgcolor="+bgc+"><b>"+lista_stud[vord[i]].Note[imat]+" </b></td>");
}
Figura 12.36
(continuare)
450
fraport.document.writeln("</tr></table>");
fraport.document.close();
}
// FUNCTIA CE REALIZEAZA AFISAREA RESTANTIERILOR LA O MATERIE
function afis_restantieri(imat){
var i,j,k,nrest;
nrest=0;
//DETERMINA NUMARUL DE RESTANTIERI
for(i=0;i<lista_stud.length;i++)
if(lista_stud[i].Note[imat]<5)nrest++;
if(nrest>0) {
//AFISEAZA IN TABEL STUDENTII RESTANTIERI
fraport.document.writeln("<center>Numar restantieri:",nrest,"<br></center>");
fraport.document.writeln("<center><table border=1 bgcolor=#efefff><tr>");
fraport.document.writeln("<td bgcolor=#8bd3e9><b>NR.</b>",
"<td bgcolor=#8bd3e9><b>Nume Prenume </b></td>");
fraport.document.writeln("<td bgcolor=#8bd3e9><b> Nota </b></td>");
k=0;
for(i=0;i<lista_stud.length;i++)
if(lista_stud[i].Note[imat]<5) {
if(k%2){bgc="#c0e7ed";}else{bgc="#d9f0f4";}
k++;
fraport.document.writeln("<tr><td bgcolor="+bgc+"><b>"+k+" </b></td>");
fraport.document.writeln("<td bgcolor="+bgc+"><b>"+lista_stud[i].Nume+"
"+lista_stud[i].Prenume+"</b></td>");
if(lista_stud[i].Note[imat]==0)
fraport.document.writeln("<td bgcolor="+bgc+"><b> absent </b></td>");
else
fraport.document.writeln("<td bgcolor="+bgc+"><b>"+lista_stud[i].Note[imat]+" </b></td>");
}
fraport.document.writeln("</tr></table>");
}
else fraport.document.writeln("<p> Nu esista restantieri");
}
//RAPORT RESTANTIERI
function executaRR(){
var i,j,k;
var nrest;
fraport.document.open();
fraport.document.writeln("<center><p><b>RAPORT RESTANTIERI </b></p></center>");
for(j=0;j<materii.length;j++){
fraport.document.writeln("<center><p><b>Materia:",materii[j]," </b></p></center>");
afis_restantieri(j);
}//de la for j
fraport.document.close();
}
//CAUTARE DUPA STUDENT
function executaCS(){
var i,j,k,nr;
Figura 12.36
(continuare)
451
var sn=subrap.f2.snume.value;
var pn=subrap.f2.spnume.value;
fraport.document.open();
fraport.document.writeln("<center><p><b>Cautare rezultate student </b></p></center>");
if(sn!=""){
if(pn!="") {
nr=0;
for(i=0;i<lista_stud.length;i++)
if((lista_stud[i].Nume==sn)&&(lista_stud[i].Prenume==pn))nr++;
if(nr>0) {
fraport.document.writeln("<center><table border=1 bgcolor=#efefff><tr>");
fraport.document.writeln("<td bgcolor=#8bd3e9><b>NR.</b>",
"<td bgcolor=#8bd3e9><b>Nume Prenume </b></td>");
for(i=0;i<materii.length;i++)
fraport.document.writeln("<td bgcolor=#8bd3e9><b>"+ materii[i]+" </b></td>");
k=0;
for(i=0;i<lista_stud.length;i++)
if((lista_stud[i].Nume==sn)&&(lista_stud[i].Prenume==pn)) {
if(k%2) bgc="#c0e7ed"; else bgc="#d9f0f4";
k++;
fraport.document.writeln("<tr><td bgcolor="+bgc+"><b>"+k+" </b></td>");
fraport.document.writeln("<td bgcolor="+bgc+"><b>"+lista_stud[i].Nume+"
"+lista_stud[i].Prenume+"</b></td>");
for(j=0;j<materii.length;j++)
fraport.document.writeln("<td bgcolor="+bgc+"><b>"+lista_stud[i].Note[j]+" </b></td>");
}
fraport.document.writeln("</tr></table>");
}
else
fraport.document.writeln("<center><p>Nu exista nici un student cu numele:", sn,"
Prenumele:",pn);
}
else { //DETERMINA NUMARUL DE STUDENTI CU NUMELE SN
nr=0;
for(i=0;i<lista_stud.length;i++)
if(lista_stud[i].Nume==sn)nr++;
if(nr>0) {
fraport.document.writeln("<center>Numar Studenti:",nr);
fraport.document.writeln("<center><table border=1 bgcolor=#efefff><tr>");
fraport.document.writeln("<td bgcolor=#8bd3e9><b>NR.</b>",
"<td bgcolor=#8bd3e9><b>Nume Prenume </b></td>");
for(i=0;i<materii.length;i++)
fraport.document.writeln("<td bgcolor=#8bd3e9><b>"+ materii[i]+" </b></td>");
k=0;
for(i=0;i<lista_stud.length;i++)
if(lista_stud[i].Nume==sn) {
if(k%2)bgc="#c0e7ed";else bgc="#d9f0f4";
k++;
fraport.document.writeln("<tr><td bgcolor="+bgc+"><b>"+k+" </b></td>");
fraport.document.writeln("<td bgcolor="+bgc+"><b>"+lista_stud[i].Nume+"
"+lista_stud[i].Prenume+"</b></td>");
for(j=0;j<materii.length;j++)
fraport.document.writeln("<td bgcolor="+bgc+"><b>"+lista_stud[i].Note[j]+" </b></td>");
Figura 12.36
(continuare)
452
}
fraport.document.writeln("</tr></table>");
}
else
fraport.document.writeln("<center><p>Nu exista nici un student cu numele:", sn);
}
}// if sn
fraport.document.close();
}
// CAUTAREA RESTANTIERILOR LA O MATERIE
function executaCR(){
var i,j,k;
var nrest;
var imat=subrap.f2.smaterii.selectedIndex;
fraport.document.open();
fraport.document.writeln("<center><p><b>CAUTARE RESTANTIERI LA MATERIA: ");
fraport.document.writeln(materii[imat]," </b></p></center>");
afis_restantieri(imat);
fraport.document.close();
}
// -->
</script>
</head>
<frameset rows="10%,30%,60%">
<frame scrolling="no" noresize src="btitlu.html" name="titlu">
<frameset cols="30%,70%">
<frame scrolling="no" noresize src="tipraport.html" name="inputd">
<frame src="btiprap0.html" name="subrap">
</frameset>
<frame src="bsit.html" name="fraport">
</frameset>
</html>
Codul HTML pentru cadrul titlu
<html>
<head>
</head>
<body>
<center>
<font size=+3 color=green> Intranet- Baza de Date cu Studenti</font>
</center>
</body>
</html>
Codul HTML pentru cadrul inputd
Figura 12.36
( continuare)
Figura 12.37
453
<html>
<head>
<script language="JavaScript">
<!---
var sel=0;
function afis_subrap0(){
parent.subrap.document.open();
//AFISAREA DATELOR GENERALE
parent.subrap.document.writeln("<font color=green size=+1>Raport general</font>");
parent.subrap.document.writeln("<hr>");
parent.subrap.document.writeln("<p>Afiseaza toata grupa si toate notele</p>");
parent.subrap.document.writeln("<p>");
//FORMAREA ELEMENTELOR DE INTERFATA -BUTONUL DE EXECUTIE AL RAPORTULUI
parent.subrap.document.writeln("<form name=\"f2\">");
parent.subrap.document.writeln("<p><input type=\"button\" value=\"Executa\"
onClick=\"parent.executaRG();\">");
parent.subrap.document.writeln("</form>");
parent.subrap.document.close();
}
function afis_subrap1(){
parent.subrap.document.open();
parent.subrap.document.writeln("<font color=green size=+1>Raport pe Materii</font>");
parent.subrap.document.writeln("<hr>");
parent.subrap.document.writeln("<table border=\"0\"><tr><td>Selecteaza materia");
parent.subrap.document.writeln(" <td> Ordonare rezultate dupa</td></tr>");
//FORMA F2 DE INTERFATA CU UTILIZATORUL
parent.subrap.document.writeln("<form name=\"f2\">");
parent.subrap.document.writeln("<tr><td><select size=\"1\" name=\"smaterii\">");
for(i=0;i<parent.materii.length;i++)
parent.subrap.document.writeln("<option>",parent.materii[i],"</option>");
parent.subrap.document.writeln("</select>");
parent.subrap.document.writeln("<td><select size=\"1\" name=\"sordine\">");
parent.subrap.document.writeln("<option>Alfabetica studenti</option>");
parent.subrap.document.writeln("<option> Descrescatoare Note</option>");
parent.subrap.document.writeln("</select>");
parent.subrap.document.writeln("<tr><td colspan=2><input type=\"button\" value=\"Executa\"
onClick=\"parent.executaRM();\">");
parent.subrap.document.writeln("</form>");
parent.subrap.document.writeln("</table>");
parent.subrap.document.close();
}
function afis_subrap2(){
parent.subrap.document.open();
parent.subrap.document.writeln("<font color=green size=+1>Raport Restantieri</font>");
parent.subrap.document.writeln("<hr>");
parent.subrap.document.writeln("<p>Afiseaza Studentii Restantieri din Grupa</p>");
parent.subrap.document.writeln("<p>");
parent.subrap.document.writeln("<form name=\"f2\">");
parent.subrap.document.writeln("<p><input type=\"button\" value=\"Executa\"
onClick=\"parent.executaRR();\">");
parent.subrap.document.writeln("</form>");
Figura 12.38
454
parent.subrap.document.close();
}
function afis_subrap3(){
parent.subrap.document.open();
parent.subrap.document.writeln("<font color=green size=+1>Cautare Rezultate Student</font>");
parent.subrap.document.writeln("<hr>");
parent.subrap.document.writeln("<p>");
parent.subrap.document.writeln("<form name=\"f2\">");
parent.subrap.document.writeln("<table border=\"0\"><tr><td>Nume student:");
parent.subrap.document.writeln("<td><input type=\"text\" name=\"snume\" size=\"20\">");
parent.subrap.document.writeln("<tr><td>Prenume student:");
parent.subrap.document.writeln("<td><input type=\"text\" name=\"spnume\" size=\"20\">");
parent.subrap.document.writeln("<tr><td colspan=2><input type=\"button\" value=\"Executa\"
onClick=\"parent.executaCS();\">");
parent.subrap.document.writeln("</form>");
parent.subrap.document.writeln("</table>");
parent.subrap.document.close();
}
function afis_subrap4(){
parent.subrap.document.open();
parent.subrap.document.writeln("<font color=green size=+1>Cautare Restantieri la o
Materie</font>");
parent.subrap.document.writeln("<hr>");
parent.subrap.document.writeln("<table border=\"0\"><tr><td>Selecteaza materia");
parent.subrap.document.writeln("</td></tr>");
parent.subrap.document.writeln("<form name=\"f2\">");
parent.subrap.document.writeln("<tr><td><select size=\"1\" name=\"smaterii\">");
for(i=0;i<parent.materii.length;i++)
parent.subrap.document.writeln("<option>",parent.materii[i],"</option>");
parent.subrap.document.writeln("</select>");
parent.subrap.document.writeln("<tr><td colspan=2><input type=\"button\" value=\"Executa\"
onClick=\"parent.executaCR();\">");
parent.subrap.document.writeln("</form>");
parent.subrap.document.writeln("</table>");
parent.subrap.document.close();
}
function afisrap(t) {
if(t==0) {
f1.tiprap.options[0].text ="General";
f1.tiprap.options[1].text ="Pe Materii";
f1.tiprap.options[2].text ="Restantieri";
}
else {
f1.tiprap.options[0].text ="Dupa Student";
f1.tiprap.options[1].text ="Restantieri";
f1.tiprap.options[2].text ="";
}
f1.tiprap.selectedIndex=0;
afis_subopt(this);
}
Figura 12.38
(continuare)
455
function afis_subopt(t){
var ir=f1.tiprap.selectedIndex;
if(f1.raport[0].checked) { // ESTE SELECTAT RAPORT
switch(ir) {
case 0:
afis_subrap0();
break;
case 1:
afis_subrap1();
break;
case 2:
afis_subrap2();
}
window.status="Tip Raport";
}
else { // ESTE SELECTAT CAUTARE
switch(ir) {
case 0:
afis_subrap3();
break;
case 1:
afis_subrap4();
break;
}
window.status=Tip Cautare;
}
}
//
</script>
</head>
<body>
<center>
<form name=f1>
<p><font size=+2 color=green>Tipul Prelucrarii</font>
<p>
<table border=0>
<tr><td><input type=radio name=raport checked value=0 onClick=if (this.checked)
{afisrap(0)} >
<b>RAPOARTE</b>
<td>
<input type=radio name=raport value=1 onClick=if (this.checked) {afisrap(1)} >
<b>CAUTARE</b></tr>
<tr><td colspan=2><select size=3 name=tiprap onChange=afis_subopt(this)>
<option selected>General</option>
<option>Pe Materii</option>
<option>Restantieri</option>
</select>
</table>
</center>
</form>
</body>
</html>
Figura 12.38
(continuare)
456
Codul HTML pentru cadrul subrap
<html>
<head>
<title>Aplicatie</title>
<head>
<body>
<font color=green size=+1>Raport general</font>
<hr>
<p>Afiseaza toata grupa si toate notele</p>
<form name="f2">
<input type="button" value="Executa" onClick="parent.executaRG();">
</form>
</body>
</html>
Codul HTML pentru cadrul fraport
<html>
<head>
</head>
<body>
<h3>Rezultatele studentilor</h3></body>
</html>
Tem
Testai-v cunotinele
1. Cum creai obiecte fiu personalizate. Exemple.
2. Cum creai matrici de obiecte personalizate?
3. Care sunt navigatoarele care recunosc obiectele personalizate?
4. Care este cuvntul cheie JavaScript care permite crearea unei instane a unui
obiect:
instance;
object;
new.
5. Care este semnificaia cuvntului cheie this?
obiect curent;
script curent;
nici a, nici b.
6. Care este diferena dintre o funcie constructor i o funcie ordinar?
JavaScript
Figura 12.39
Figura 12.40
457
7. Cum putei avea acces la obiectele pe care le-ai creat?
8. Care este diferena dintre o metod i o funcie?
9. Care sunt etapele pe care trebuie s le parcurgei pentru a defini o metod
pentru un obiect personalizat?
Vizitai site-urile
http://www.wdvl.com
http://msdn.microsoft.com/library
http://www.databasejournal.com
http://hotwired.lycos.com/webmonkey/programing
,
t
,
BIBLIOGRAFIE
1. Richard Wagner, R. Allen Wyke, JavaScript, traducere de Cora Radulian i Dan
Pavelescu, Editura Teora, 2001, Bucureti
2. Jean-Paul Mesters, Aide-mmoire JavaScript, OEM-Eyrolles, Paris, 2003
3. Michael Moncur, JavaScript 1.5, CampusPress, Paris, 2002
4. Jean-Paul Mesters, JavaScript Exercices et corriges, Collection LAtelier,
EM-Eyrolles, Paris, 2003
5. Cdric Nilly, Jean-Christophe Gigniac, JavaScript, MicroApplication, Paris, 2003
6. Jean-Christophe Gigniac, Cdric Nilly, JavaScript, e-Poche, Paris, 2002
7. Emily A. Vander Veer, JavaScript pour les nuls, Editions First Interactive, Paris,
2002
8. Steven W. Disbrow, JavaScript Web Tr@ining, OEM, Paris, 2002
9. Mike Robertshaw, Web Site Design (U234), The Open University of Hong Kong,
2002
10. Liviu Dumitracu, nvm ... BASIC conversnd cu calcula orul, Editura Tehnic,
2 volume, 1989
11. Floarea Nstase, Pavel Nstase, Tehnologia aplica iilor Web (XML-DOM-ASP),
Editura Economic, 2002
12. Liviu Dumitracu, (X)HTML, Editura Universitii din Ploieti, 2003
13. Liviu Dumitracu, Dreamweaver MX, Editura Universitii din Ploieti, 2003
14. Liviu Dumitracu, XML Editura Universitii din Ploieti, 2003
15. Michel Drewfus, HTML 4, Student Edition, Campus Press, Paris, 2003