Sunteți pe pagina 1din 125

Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare

Curs Programare Web, anul 4 C5 Curs 5 1


Ciprian Dobre
ciprian.dobre@cs.pub.ro
Programare web client-side,
JavaScript
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
2
Obiective
Introducere n JavaScript i a noiunilor de
programare pe care limbajul le suport
Exist numeroase documente i cri
publicate (inclusiv n limba romn) care
conin informaii suplimentare.
Prezentm n continuare doar o trecere n
revist a limbajului.
Curs Programare Web, anul 4 C5 Curs 5
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
3
Sumar
JavaScript fundamente
JavaScript i HTML - gestiunea simpl a
evenimentelor
Exemple JavaScript
Mai multe despre JavaScript
JavaScript i AJAX
Curs Programare Web, anul 4 C5 Curs 5
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
4
JavaScript
Fundamentele Limbajului
Curs Programare Web, anul 4 C5 Curs 5
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Despre JavaScript
JavaScript nu este Java, nici mcar nu este nrudit
cu Java
Numele original al JavaScript a fost LiveScript
Numele a fost modificat cnd Java a devenit popular
Astzi cnd Microsoft nu mai ndrgete Java propriul
nume acordat dialectului JavaScript este Active Script
Instruciunile n JavaScript seamn cu instruciuni
din Java deoarece ambele limbaje au mprumutat
multe elemente chiar din limbajul C
JavaScript este relativ uor de nvat de ctre
programatorii familiarizai cu Java
Totui JavaScript este un limbaj de sine stttor, complet
i complex
Curs Programare Web, anul 4 C5 Curs 5 5
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Despre JavaScript
JavaScript este rar folosit pentru a scrie
programe complete
Mici blocuri de instruciuni JavaScript sunt n general
folosite pentru a aduga funcionalitate paginilor HTML
JavaScript este adesea folosit n conjuncie cu
formulare HTML
JavaScript este ntr-o bun msur independent
de platform (nu SO, ct mai ales de browser)
Curs Programare Web, anul 4 C5 Curs 5 6
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
7
Folosirea JavaScript ntr-un browser
Codul JavaScript este inclus ntre taguri <script>:
<script type="text/javascript">
document.write("<h1>Hello World!</h1>") ;
</script>
Observaii:
Atributul type permite folosirea altor limbaje de scripting (chiar
dac JavaScript este limbajul implicit)
Acest exemplu simplu face acelai lucru ca a scrie <h1>Hello
World!</h1> n acelai loc n documentul HTML
Punct i virgul de la finalul instruciunii JavaScript este opional
Sfritul liniei marcheaz sfritul instruciunii, dac linia poate
fi interpretat ca o instruciune complet
Se poate folosi punct i virgul pentru separarea mai multor
instruciuni ce apar pe aceeai linie
Este indicat totui folosirea n permanen a caracterului punct
i virgul
Curs Programare Web, anul 4 C5 Curs 5
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
8
JavaScript nu este ntotdeauna disponibil
Unele browsere mai vechi nu recunosc tag-ul script
Aceste browsere vor ignora tag-ul script dar vor afia ce este
inclus n interiorul tag-ului (codul JavaScript inclus)
Pentru a face aceste browsere s ignore coninutul putem folosi:
<script type="text/javascript">
<!--
document.write("Hello World!")
//-->
</script>
Caracterul <!-- introduce un comentariu HTML
Pentru a face ca JavaScript s ignore codul de sfrit de
comentariu HTML, -->, secvena // marcheaz un comentariu
JavaScript, ce ine pn la sfritul liniei respective
Unii utilizatori opresc JavaScript
Folosii <noscript>mesaj</noscript> pentru a afia un mesaj
indiferent dac n interiorul acestuia apare i cod JavaScript
Curs Programare Web, anul 4 C5 Curs 5
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
9
Exemplu
<script language=javascript>
<!--
var name = "ciprian.dobre"
var host1 = "cs."
var host2 = "pub.ro"
document.write("PWeb: send emails to ")
document.write("<a href=mai" + "lto:" + name +
"&#64;" + host1 + host2 + "?subject=PWeb:"
+ ">" + "Ciprian Dobre" + "</a>")
//-->
</script>
<noscript>
ciprian.dobre at cs
</noscript>
Curs Programare Web, anul 4 C5 Curs 5
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Rezultat
Curs Programare Web, anul 4 C5 Curs 5 10
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Curs Programare Web, anul 4 C5 Curs 5 11
Demo 1
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
12
Unde apare codul JavaScript
Codul JavaScript poate apare fie n seciunea
<head>, fie n seciunea <body> a unui document
HTML
Funciile JavaScript ar trebui s fie definite n
seciunea <head>
Acest lucru ne asigur c funciile sunt ncrcate
chiar nainte ca ele s fie cerute
Codul JavaScript din <body> este executat atunci
cnd este ncrcat pagina
Curs Programare Web, anul 4 C5 Curs 5
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Unde apare codul JavaScript
Funciile JavaScript pot fi plasate i n fiiere
separate avnd n general extensia .js
<script src="myJavaScriptFile.js"></script>
Codul acesta se plaseaz n seciunea <head>
Un fiier extern .js permite folosirea aceluiai cod
JavaScript n mai multe pagini HTML
Fiierul extern .js nu poate conine la rndul su alt
tag <script>
Codul JavaScript poate fi plasat i mpreun cu
un obiect al unui formular, ca de exemplu un
buton
Codul JavaScript va fi executat atunci cnd respectivul
obiect este folosit
Curs Programare Web, anul 4 C5 Curs 5 13
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
14
Tipuri de date primitive
JavaScript are trei tipuri primitive: number, string i
boolean, i dou valori speciale, null i undefined
Orice altceva este un obiect
Numerele sunt ntotdeauna stocate ca valori de tip float
Numerele hexazecimale ncep cu 0x
Unele platforme trateaz 0123 ca octal, altele l trateaz ca
zecimal
Pentru c nu putei fi siguri, e mai indicat s evitai cu totul folosirea
valorilor in octal!
Valorile String pot fi delimitate prin caractere apostrof sau
ghilimele
String-urile pot conine \n (newline), \" (double quote), etc.
Valorile boolean sunt fie true, fie false
0, "0", stringul gol, undefined, null i NaN sunt false, restul
valorilor sunt true
Curs Programare Web, anul 4 C5 Curs 5
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
15
Variabile
Variabilele pot fi declarate folosind var:
var pi = 3.1416, x, y, name = "Dr. Dave" ;
Numele de variabile trebuie sa nceap cu o litera sau cu underscore
Numele de variabile sunt case-sensitive
Variabilele nu au tip (ele pot conine valori de orice tip)
Exist doar dou scopuri ale variabilelor: local i global
Variabilele declarate ntr-o funcie sunt locale respectivei funcii
(accesibile numai din interiorul respectivei funcii)
Variabilele declarate n afara unei funcii sunt globale (accesibile de
oriunde din pagin)
Variabilele pot fi declarate implicit prin simpla adugare a
unei valori unor variabile
Variabilele declarate implicit sunt ntotdeauna globale
Curs Programare Web, anul 4 C5 Curs 5
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
16
Operatori (1)
Majoritatea sintaxei JavaScript este mprumutat din C (i
seamn cu cea din Java):
Operatori aritmetici (toate numerele sunt n virgul
mobil):
+ - * / % ++ --
Operatori de comparaie:
< <= == != >= >
Operatori logici:
&& || !
Operatori la nivel de bii:
& | ^ ~ << >> >>>
Operatori de asignare:
+= -= *= /= %= <<= >>= >>>= &= ^= |=
Curs Programare Web, anul 4 C5 Curs 5
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
17
Operatori (2)
Concatenare de string-uri:
+
Operatorul condiiomal:
condition ? value_if_true : value_if_false
Teste de egalitate:
== i != ncearc convertirea operatorilor la acelai
tip naintea efecturii testului
Nu ca n C sau Java: === i !== consider operanzii
inegali dac acetia sunt de tipuri diferite
Operatori suplimentari:
new typeof void delete
Curs Programare Web, anul 4 C5 Curs 5
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
18
Comentarii
Comentariile sunt similare C sau Java:
ntre // i sfritul liniei
ntre /* i */
Comentariile de tip javadoc din Java, /** ...
*/, sunt tratate similar comentariilor de tip
/* ... */; ele nu au nici o semnificaie
special n JavaScript
Curs Programare Web, anul 4 C5 Curs 5
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Majoritatea sintaxelor de instruciuni JavaScript sunt
mprumutate din C
Atribuirea: greeting = "Hello, " + name;
Instruciunea compus:
{ statement; ...; statement }
Instruciunea If:
if (condition) statement;
if (condition) statement; else statement;
Instruciuni de iterare:
while (condition) statement;
do statement while (condition);
for (initialization; condition; increment) statement;
19
Instruciuni (1)
Curs Programare Web, anul 4 C5 Curs 5
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
20
Instruciuni (2)
Instruciunea switch:
switch (expression) {
case label :
statement;
break;
case label :
statement;
break;
...
default : statement;
}
Alte instruciuni familiare:
break;
continue;
Instruciunea vid, precum;; sau { }
Curs Programare Web, anul 4 C5 Curs 5
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
21
JavaScript vs. Java
Deja realizai c tii destul de multe despre
JavaScript
Pn acum am vzut aspecte ce sunt similare precum n
Java
JavaScript are unele construcii ce seamn cu
construciile corespondente din Java:
JavaScript folosete Obiecte i tipuri de date primitive
JavaScript folosete evenimente i gestiunea
evenimentelor (event handlers)
Gestiunea excepiilor n JavaScript este aproape similar
cu cea din Java
Curs Programare Web, anul 4 C5 Curs 5
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Totui JavaScript nu este Java
Totui JavaScript are unele construcii diferite de
cele din Java:
Numele de variabile nu au tip: tipul unei variabile
depinde de valoarea curent pe care respectiva
variabila o deine
Obiectele i array-urile sunt definite ntr-o manier
diferit de cea din Java
JavaScript are instruciunea with i o nou form a
instruciunii for
Curs Programare Web, anul 4 C5 Curs 5 22
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Gestiunea exceptiilor in JavaScript este aproape la
fel ca cea din Java:
throw expresie creeaz i arunc o excepie
expresie este valoarea excepiei i poate fi de orice tip
(adesea este un string)
try {
instructiuni
} catch (e) { // Atenie: nu avem declaraie de tip pentru e
instructiuni pentru tratarea exceptiei
} finally { // opional, similar Java
codul executat intotdeauna
}
Folosind aceast abordare exist o singur clauz catch
23
Gestiunea excepiilor (1)
Curs Programare Web, anul 4 C5 Curs 5
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
24
Gestiunea excepiilor (2)
try {
instructiuni
} catch (e if test1) {
tratarea exceptiei pentru cazul test1 = true
} catch (e if test2) {
tratarea exceptiei pentru cazul test1 = false si test2 = true
} catch (e) {
tratarea exceptiei pentru cazul test1si test2 sunt false
} finally {
codul executat intotdeauna
}
Testul poate fi:
e == "InvalidNameException
dar poate fi orice alt tip de test
Curs Programare Web, anul 4 C5 Curs 5
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
25
Obiecte
n Java clasele descriu obiecte i toate instantele unei clase
au exact aceleai cmpuri i metode
Obiectele JavaScript sunt mai flexibile dect obiectele Java
JavaScript lucreaz cu object literals, scrii conform
urmtoarei sintaxe:
{ name1 : value1 , ... , nameN : valueN }
Exemplu:
car = {myCar: "Saturn", 7: "Mazda",
getCar: CarTypes("Honda"), special: Sales}
Cmpurile sunt myCar, getCar, 7 (este chiar un nume legal de
cmp) i special
"Saturn" i "Mazda" sunt cmpuri de tip String
CarTypes este un apel de funcie
Sales este o variabil ce a fost definit anterior
Exemplu de folosire: document.write("I own a " + car.myCar);
Curs Programare Web, anul 4 C5 Curs 5
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
26
Trei moduri de a crea un obiect
1. Putei folosi un object literal:
var course = { name: PWeb", teacher: Ciprian Dobre" }
2. Putei folosi new pentru a crea un obiect blank
cruia s i adugai cmpuri ulterior:
var course = new Object();
course.name = PWeb";
course.teacher = Ciprian Dobre";
3. Putei scrie i folosi un constructor:
function Course(n, t) { // functia ar trebui definita in sectiunea <head>
this.name = n; // cuvantul cheie "this" este necesar, nu optional
this.teacher = t;
}
var course = new Course(PWeb", Ciprian Dobre");
Curs Programare Web, anul 4 C5 Curs 5
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
27
Array
JavaScript permite definirea de tablouri, declarate
folosind paranteze drepte i virgule
Exemplu: color = ["red", "yellow", "green", "blue"];
Variabilele tablou sunt iniializate ncepnd de la poziia 0
color[0] are valoarea "red"
Dac folosim dou virgule succesive, variabila
tablou va avea un element empty n respectiva
poziie
Exemplu: color = ["red", , , "green", "blue"];
color are 5 elemente
Totui, o virgul la final este ignorat
Exemplu: color = ["red", , , "green", "blue,]; are tot 5 elemente
Curs Programare Web, anul 4 C5 Curs 5
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
28
Patru moduri de a crea un array
1. Putei folosi un array literal:
var colors = ["red", "green", "blue"];
2. Putei folosi new Array() pentru a crea un tablou gol:
var colors = new Array();
Putei aduga elemente ulterior n acel tablou:
colors[0] = "red"; colors[2] = "blue"; colors[1]="green";
3. Putei folosi new Array(n) cu un singur argument numeric
pentru a crea un tablou avnd respectiva dimensiune
var colors = new Array(3);
4. Putei folosi new Array() cu dou sau mai multe
argumente pentru a crea un tablou coninnd respectivele
valori:
var colors = new Array("red","green", "blue");
Curs Programare Web, anul 4 C5 Curs 5
var myArray = [];
var myArray = [];
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Iniializare
Crearea unui tablou dimensionat deja
pentru 10 elemente:
var badArray = new Array(10);
vs.
Crearea unui tablou avnd un singur
element, cu valoarea 10:
var goodArray= [10];
Curs Programare Web, anul 4 C5 Curs 5 29
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
<script language=javascript>
<!--
var myArray = [ 'January', 'February', 'March' ];
document.writeln('0> '+myArray[0]+'<br>');
document.writeln('1> '+myArray[1]+'<br>');
document.writeln('2> '+myArray[2]+'<br>');
//-->
</script>
<noscript>
problema cu JavaScript
</noscript>
Exemplu
Curs Programare Web, anul 4 C5 Curs 5 30
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Un alt exemplu
var myArray = [];
myArray[0] = 'January';
myArray[1] = 'February';
myArray[5] = 'March';
document.writeln('0> '+myArray[0]+'<br>');
document.writeln('1> '+myArray[1]+'<br>');
document.writeln('2> '+myArray[2]+'<br>');
document.writeln('3> '+myArray[3]+'<br>');
document.writeln('4> '+myArray[4]+'<br>');
document.writeln('5> '+myArray[5]+'<br>');
Curs Programare Web, anul 4 C5 Curs 5 31
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
32
Lungimea unui tablou
Dac myArray este un tablou, lungimea acestuia este
obinute folosind myArray.length
Dimensiunea unui tablou poate fi modificat prin
adugarea de elemente peste lungimea curent a
acestuia
Exemplu: var myArray = new Array(5); myArray[10] = 3;
Tablourile sunt structuri de date risipite, spaiul este alocat
doar pentru elementele crora le-a fost cu asignat o
valoare
Exemplu: myArray[50000] = 3; este perfect OK
Indicii trebuie s fie ntre 0 i 2
32
-1
Similar ca n C i Java, nu exist tablouri bidimensionale;
dar exist tablou de tablou: myArray[5][3]
Curs Programare Web, anul 4 C5 Curs 5
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
33
Tablouri vs. obiecte
Variabilele de tip array sunt obiecte
car = { myCar: "Saturn", 7: "Mazda" }
car[7] este echivalent cu car.7
car.myCar este acelai cu car["myCar"]
Dac cunoatei numele unei proprieti putei
folosi notaia cu punct: car.myCar
Daca nu cunoatei numele proprietii dar l avei
ntr-o variabil (sau l putei calcula), folosii
notaia de tip array: car["my" + "Car"]
Curs Programare Web, anul 4 C5 Curs 5
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Stocarea datelor ntr-un tablou
Un tablou poate stoca orice: boolean, numere, string-uri,
funcii, obiecte, alte tablouri, chiar expresii regulate:
var myArray = [ 3, 'hello!', function() { return 5 }, { 'color':'blue',
'budget':25 }, /[e11]/i ];
document.writeln('0> '+myArray[0]+'<br>');
document.writeln('1> '+myArray[1]+'<br>');
document.writeln('2> '+myArray[2]+'<br>');
document.writeln('3> '+myArray[3].color+'<br>');
document.writeln('3> '+myArray[3].budget+'<br>');
document.writeln('4> '+myArray[4].test(myArray[1])+'<br>');
Curs Programare Web, anul 4 C5 Curs 5 34
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
35
Functii aplicabile tablourilor
Dac myArray este un tablou,
myArray.sort() sorteaz tablou (alfabetic)
myArray.sort(function(a, b) { return a - b; }) sorteaz
numeric tabloul
myArray.reverse() inverseaz elementele tabloului
myArray.push() adaug orice numr de elemente la
finalul tabloului i crete dimensiunea acestuia
myArray.pop() nltur i ntoarce ultimul element al
tabloului i decrementeaz dimensiunea acestuia
myArray.toString() ntoarce un string coninnd
elementele tabloului, separate prin virgul
Curs Programare Web, anul 4 C5 Curs 5
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Exemplu
var myarray=[7, 40, 300];
myarray.sort();
// ordine lexicografica
document.writeln("0> "+myarray+"<br>");
myarray.sort(function(a, b) { return a - b; });
// ordine numerica
document.writeln("1> "+myarray+"<br>");
myarray.reverse();
// elementele in ordine inversa
document.writeln("2> "+myarray+"<br>");
Curs Programare Web, anul 4 C5 Curs 5 36
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Similar instruciunii iterative din Java for (type var :
collection)
Putei itera printre proprietile unui obiect folosind
for (variable in object) statement;
Exemplu: for (var prop in course) {
document.write(prop + ": " + course[prop]);
}
Posibil output: teacher: Ciprian Dobre
name: PWeb
Proprietile sunt accesate ntr-o ordine nedefinit
Dac adugai sau tergei proprieti obiectului din bucl este
nedefinit dac instruciunea iterativ va traversa i proprietile nou
definite sau nu
Tablourile sunt obiecte; aplicat unui tablou, forin va vizita
proprietile 0, 1, 2,
Observai c course["teacher"] este echivalent cu course.teacher
Trebuie s folosii paranteze drepte dac numele proprietii este
ntr-o variabil
37
Instruciunea for in
Curs Programare Web, anul 4 C5 Curs 5
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
38
Instruciunea with
with (object) statement
Folosete object ca prefix implicit al variabilelor din
statement
Dac cmpurile accesate nu exist prefixul nu va fi
folosit
De exemplu, urmtoarele sunt echivalente:
with (document.myForm) {
result.value = compute(myInput.value) ;
}
document.myForm.result.value =
compute(document.myForm.myInput.value);
Instruciunea with este util atunci cnd avei de
fcut mai multe manipulri asupra unui acelai
obiect
Instruciunea with poate conduce ns la confuzii i din
acest motiv trebuie folosit cu atenie
Curs Programare Web, anul 4 C5 Curs 5
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
39
Funcii
Funciile trebuie definite n seciunea <head> a
paginii HTML pentru a fi siguri c ele sunt ncrcate
primele
Sintaxa pentru definirea unei funcii este:
function name(arg1, , argN) { statements }
Funcia poate conine instruciuni de tipul return value;
Orice variabil declarat n interiorul unei funcii este
local respectivei funcii
Sintaxa pentru apelarea unei funcii este
name(arg1, , argN)
Parametrii simpli sunt transmii prin valoare,
obiectele sunt transmise prin referin
Curs Programare Web, anul 4 C5 Curs 5
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
O expresie regulat poate fi scris n oricare din
urmtoarele forme:
Folosind un constructor, precum n re = new RegExp("ab+c")
Folosind slash-uri, precum n re = /ab+c/
Expresiile regulate sunt aproape la fel ca n Perl sau Java
(doar cteva elemente mai puin folosite lipsesc)
string.match(regexp) are rolul de a cuta n string apariii
ale regexp
ntoarce null dac nu este gsit nimic
Dac regexp are setat flag-ul g (global search), match ntoarce un
tablou cu toate substringurile ce se potrivesc expresiei
Dac g nu este setat, match ntoarce un tablou al crui element de
pe poziia 0 reprezint textul ce se potrivete expresiei, iar restul
elementelor sunt subexpresiile paranterizate.
40
Expresii regulate
Curs Programare Web, anul 4 C5 Curs 5
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Exemplu
<head>
<script language=javascript>
function checkpostal(){
var re5digit=/^\d{5}$/ // expresie regulata ce defineste un numar din 5 cifre
if (document.myform.myinput.value.search(re5digit)==-1) // daca nu se potriveste
alert("Please enter a valid 5 digit number inside form")
else
alert("Number valid")
}
</script>
</head>
<body>
<form name="myform">
<input type="text" name="myinput" size=15>
<input type="button" onClick="checkpostal()" value="check">
</form>
</body>
Curs Programare Web, anul 4 C5 Curs 5 41
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Rezultat
Curs Programare Web, anul 4 C5 Curs 5 42
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Curs Programare Web, anul 4 C5 Curs 5 43
Demo 2
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
44
JavaScript
JavaScript este un limbaj complex
Au fost prezentate doar elemente de la suprafaa
acestuia
JavaScript nu este total independent de platform
Trebuie s v ateptai ca pe diverse browsere codul s
se comporte n mod diferit
Scrierea i testarea programelor necesit un pic de efort
din partea echipei de dezvoltare
Browserele n general nu raporteaz erori
Nu v ateptai s primii multe mesaje ajuttoare care
s v ajute n munca de depanare a codului JavaScript
Curs Programare Web, anul 4 C5 Curs 5
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
45
Quiz
Scriei codul corespunztor unei pagini
HTML n care s avei un obiect Car, un
constructor declarat n <head> i care s
afieze valoarea curent a cmpului type n
document.
Curs Programare Web, anul 4 C5 Curs 5
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Soluie
<head>
<script language=javascript>
function obiectCar() {
this.type = Dacia
}
</script>
</head>
<body>
<script language=javascript>
car = new obiectCar();
document.writeln(car.type);
</script>
</body>
Curs Programare Web, anul 4 C5 Curs 5 46
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
47
JavaScript i HTML
Gestiunea Simpl a Evenimentelor
Curs Programare Web, anul 4 C5 Curs 5
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
48
JavaScript i DOM
JavaScript se bazeaz pe un Document Object
Model (DOM) ce descrie structura paginii web
Nu reprezint acelai lucru ca XML DOM
Putei face multe lucruri nelegnd conceptul de
DOM
Putei folosi DOM pentru a accesa elementele paginii
Web
Putei capta evenimente fr s fii deloc familiarizai cu
conceptul DOM dar .
Avei nevoie de DOM pentru a face eventuale modificri
n pagina Web
Curs Programare Web, anul 4 C5 Curs 5
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
49
Evenimente
Unele (dar nu toate) elementele paginii web
rspund la interactivitatea din partea utilizatorului
(keystrokes, mouse clicks) prin crearea de
evenimente
Diverse tipuri de elemente produc evenimente diferite
Browserele nu seamn nici cnd vine vorba de tipurile de
evenimente pe care le produc
Ne vom concentra pe evenimente ce in de elementele
specifice unor formulare HTML
Putei folosi handlere asociate unor elemente de
formulare HTML
Dac evenimentul nu este generat handlerul nu face
nimic
Un handler ar trebui s fie redus ca dimensiune
Majoritatea handlerelor apeleaz o funcie n care se produce
toat funcionalitatea specific evenimentului
Curs Programare Web, anul 4 C5 Curs 5
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
50
Un handler de evenimente simplu
<form method="post" action="">
<input type="button"
name="myButton"
value="Click me"
onclick="alert('You clicked the button!');">
</form>
Butonul este ncorporat ntr-un formular
Tag-ul este input, avnd atributul type="button"
Atributul name poate fi folosit din codul JavaScript
onclick este numele evenimentului ce se vrea a fi
gestionat
Valoarea elementului onclick este codul JavaScript care va fi
executat
alert are rolul de a declana o fereastr de pop-up de tip
alert cu un mesaj furnizat ca argument
Curs Programare Web, anul 4 C5 Curs 5
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
51
Convenii de scriere
JavaScript este case sensitive
HTML nu este case sensitive
onclick="alert('You clicked the button!');"
Prile subliniate in de codul HTML
Stringul este cod JavaScript
Vei vedea adesea metoda onclick scris i sub forma
onClick
Conveniile de nume Java sunt mai uor de citit
Acest lucru este permis n HTML, dar dac este folosit n cod
JavaScript conduce automat la eroare
Observaie: Deoarece avem un string n interiorul
altui string avem nevoie de att varianta cu
ghilimele,ct i de cea cu apostroafe pentru
reprezentarea stringurilor
Curs Programare Web, anul 4 C5 Curs 5
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
52
Evenimente comune
Majoritatea elementelor HTML produc urmtoarele
evenimente:
onClick pe elementul respectiv se execut un click de mouse
onDblClick pe elementul respectiv se execut dublu-click ntr-o
succesiune rapid
onMouseDown butonul de mouse este apsat cnd cursorul era
deasupra elementului
onMouseOver cursorul mouse-ului este mutat deasupra elementului
onMouseOut cursorul mouse-ului este scos n afara ariei de
acoperire a elementului
onMouseUp butonul mouse-ului este eliberat cnd cursorul era nc
deasupra elementului
onMouseMove mouse-ul este mutat
n JavaScript, aceste funcii trebuie scrise cu litere mici
Curs Programare Web, anul 4 C5 Curs 5
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
53
Exemplu: un rollover simplu
Urmtorul cod va face textul Hello
red atunci cnd cursorul mouse-ului trece
deasupra lui i
blue atunci cnd cursorul mouse-ului iese din
suprafaa elementului
<h1 onMouseOver="style.color='red';"
onMouseOut="style.color='blue';">Hello </h1>
Un rollover aplicabil unei imagini:
<img src="../Images/duke.gif"
width="55" height="68"
onMouseOver="src='../Images/duke_wave.gif';"
onMouseOut="src='../Images/duke.gif';">
Curs Programare Web, anul 4 C5 Curs 5
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Curs Programare Web, anul 4 C5 Curs 5 54
Demo 3
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
55
Evenimente i gestionarea de evenimente (1)
Urmtoarele tabele sunt preluate de la:
http://developer.netscape.com/docs/manuals/js/client
/jsguide/index.htm
Eveniment Se aplic Apare atunci cnd Handler
Load Corpul documentului Utilizatorul ncarc pagina
n browser
onLoad
Unload Corpul documentului Utilizatorul prsete
pagina
onUnload
Error Imagini, ferestre Eroare la ncrcarea unei
imagini sau a unei ferestre
onError
Abort Imagini Utilizatorul renun la
ncrcarea unui imagini
onAbort
Curs Programare Web, anul 4 C5 Curs 5
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
56
Evenimente i gestionarea de evenimente (2)
Eveniment Se aplic Apare atunci
cnd
Handler
KeyDown Documente, imagini,
legturi, zone text
Utilizatorul apas
o tast
onKeyDown
KeyUp Documente, imagini,
legturi, zone text
Utilizatorul
elibereaz o tast
onKeyUp
KeyPress Documente, imagini,
legturi, zone text
Utilizatorul apas
o tast
onKeyPress
Change Cmpuri text, zone text,
liste de selecie
Utilizatorul
modific valoarea
unui element
onChange
Curs Programare Web, anul 4 C5 Curs 5
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
57
Evenimente i gestionarea de evenimente (3)
Eveniment Se aplic Apare atunci
cnd
Handler
MouseDown Documente, butoane,
legturi
Utilizatorul
termin de
apsat un buton
de mouse
onMouseDown
MouseUp Documente, butoane,
legturi
Utilizatorul
elibereaz un
buton de mouse
onMouseUp
Click Butoane, butoane
radio, checkbox-uri,
butoane de submit,
butoane de reset,
legturi
Utilizatorul face
click de mouse
pe un element
din formular sau
o legtur
onClick
Curs Programare Web, anul 4 C5 Curs 5
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
58
Evenimente si gestionare de evenimente (4)
Eveniment Se aplic Apare atunci cnd Handler
MouseOver Legturi Utilizatorul mut
cursorul deasupra
unei legturi
onMouseOver
MouseOut Zone, legturi Utilizatorul mut
cursorul n afara
zonei unei imagini
sau legturi
onMouseOut
Select Cmpuri text, zone
text
Utilizatorul
selecteaz zona de
input a
elementului din
formular
onSelect
Curs Programare Web, anul 4 C5 Curs 5
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
59
Evenimente si gestionare de evenimente (5)
Eveniment Se aplic Apare atunci cnd Handler
Move Ferestre Utilizatorul sau script-
ul mut o fereastr
onMove
Resize Ferestre Utilizatorul sau script-
ul redimensioneaz o
fereastr
onResize
DragDrop Ferestre Utilizatorul plaseaz
un obiect n fereastra
din browser
onDragDrop
Curs Programare Web, anul 4 C5 Curs 5
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
60
Evenimente si gestionare de evenimente (6)
Eveniment Se aplic Apare atunci
cnd
Handler
Focus Ferestre i toate
elementele unui
formular
Utilizatorul face
focus pe element
onFocus
Blur Ferestre i toate
elementele unui
formular
Utilizatorul mut
focusul pe alt
element
onBlur
Reset Formulare Utilizatorul face
click pe butonul
de Reset
onReset
Submit Formulare Utilizatorul face
click pe butonul
de Submit
onSubmit
Curs Programare Web, anul 4 C5 Curs 5
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
61
napoi la DOM
Putei ataa handlere de evenimente elementelor HTML
avnd puine cunotine legate de DOM
Totui, pentru a schimba ceea ce este afiat n cadrul
paginii avei nevoie s cunoatei modul n care putei
referi diversele elemente ale paginii
DOM-ul este un standard W3C
Elementul de pe nivelul cel mai nalt (n cazul
paginii curente) este window, i orice altceva
descinde de la acesta
n DOM, toate variabilele se presupune ca pornesc cu
window.
Toate celelalte elemente pot fi accesate mergnd n
jos pornind de la acest element de nivel cel mai nalt
Curs Programare Web, anul 4 C5 Curs 5
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
62
Ierarhia
DOM
Sursa:
http://sislands.com/coin70/week1/dom.htm
Curs Programare Web, anul 4 C5 Curs 5
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
window
Fereastra curenta (nu se folosete direct prea des).
self
Acelai lucru ca i window.
parent
Dac ne referim la un frame, fereastra imediat superioar n care
acesta este inclus.
top
Dac ne referim la un frame, fereastra cea mai superioar dpdv
ierarhic n care acesta este inclus.
frames[ ]
Un tablou de frame-uri (dac exist) din cadrul ferestrei curente.
Frame-urile sunt i ele la rndul lor ferestre.
length
Numrul de frame-uri coninute n fereastra curent.
63
Cmpurile lui window (1)
Curs Programare Web, anul 4 C5 Curs 5
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
64
Cmpurile lui window (2)
document
Documentul HTML ce este curent afiat n fereastr.
location
URL-ul documentului ce este curent afiat n fereastr.
Daca setai aceast proprietate la un nou URL, respectivul URL va fi
ncrcat n fereastra curent.
Apelnd location.reload() vei face refresh la fereastr.
navigator
O referin la obiectul Navigator (browser). Unele proprieti ale
obiectului Navigator sunt:
appName numele browserului, precum Mozilla Firefox"
platform numele platformei pe care ruleaz browserul, precum "Win32"
status
Un string ce poate fi citit/scris i care este afiat n zona de status a
ferestrei browserului. Poate fi modificat cu o simpl instruciune de
atribuire.
Curs Programare Web, anul 4 C5 Curs 5
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
alert(string)
Afieaz un dialog ce conine string-ul primit ca
argument i un buton OK.
confirm(string)
Afieaz o fereastr de dialog coninnd string-ul primit
ca argument mpreun cu dou butoane Cancel i OK.
ntoarce true dac a fost apsat butonul OK i false
dac a fost apsat butonul Cancel.
prompt(string)
Afieaz un dialog de confirmare coninand string-ul
primit ca argument, un cmp de tip text i dou
butoane Cancel i OK.
ntoarce string-ul introdus de ctre utilizator daca a fost
apsat OK i null dac a fost apsat butonul Cancel.
65
Metodele lui window (1)
Curs Programare Web, anul 4 C5 Curs 5
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
66
Metodele lui window (2)
open(URL)
Deschide o noua fereastr coninnd
documentul specificat de la adresa URL dat
ca argument.
close()
nchide o fereastr.
Curs Programare Web, anul 4 C5 Curs 5
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Trebuie s prefixai aceste cmpuri cu
document.
anchors[ ]
Un tablou de obiecte Anchor (obiecte
reprezentnd tag-uri de forma <a name=...>)
applets[ ]
Un tablou de obiecte Applet
Proprietile sunt cmpurile publice definite pentru
respectivele appleturi
Metodele sunt metodele publice ale appleturilor
67
Cmpurile lui document (1)
Curs Programare Web, anul 4 C5 Curs 5
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
forms[ ]
Un tablou de elemente de tip Form
Dac documentul conine un singur formular, acesta
este ntors in forms[0]
images[ ]
Un tablou de obiecte Image
Pentru schimbarea unei imagini asignai un nou
URL proprietii src
links[ ]
Un tablou de obiecte Link
Un link are cteva proprieti, incluznd href, ce
conine URL-ul complet al legturii
68
Campurile lui document (2)
Curs Programare Web, anul 4 C5 Curs 5
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
69
Campurile lui document (3)
bgColor
Culoarea de fundal a documentului
Poate fi schimbata oricnd
title
Un string read-only ce conine titlul
documentului
URL
Un string read-only ce conine adresa URL de
unde a fost ncrcat documentul
Curs Programare Web, anul 4 C5 Curs 5
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
70
Cmpurile obiectului form
elements[ ]
Un tablou coninnd elementele formularului
Curs Programare Web, anul 4 C5 Curs 5
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Exemplu DOM
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<title>Acesta este titlul documentului</title>
</head>
<body>
<h1 id="titlu_doc">Acesta este titlul documentului</h1>
<p>Acesta este un paragraf de text <img src="bullet.gif" alt="Bullet" /></p>
<p>Acesta este un alt paragraf de text</p>
</body>
</html>
Curs Programare Web, anul 4 C5 Curs 5 71
<script type="text/javascript">
titlu = document.getElementById('titlu_doc');
</script>
<script type="text/javascript">
// localizam imaginea
imagine = document.getElementsByTagName('img')[0];
// modificam atributul "src"
imagine.src = 'ceva.gif';
// localizam paragraful
paragraf = document.getElementsByTagName('p')[1];
// modificam atributul CSS font-style
paragraf.style.fontStyle = 'italic';
</script>
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
72
Exemple JavaScript
Curs Programare Web, anul 4 C5 Curs 5
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
73
Obinerea datei
<script type="text/javascript">
var d = new Date()
document.write(d.getDate() + "/")
document.write((d.getMonth() + 1) + "/")
document.write(d.getFullYear())
</script>
Rezultatul:
25/03/2010
Curs Programare Web, anul 4 C5 Curs 5
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
74
Obinerea i formatarea datei
<script type="text/javascript">
var d=new Date()
var weekday=new Array("Sunday", "Monday", "Tuesday",
"Wednesday", "Thursday", "Friday","Saturday")
var monthname=new Array("Jan", "Feb", "Mar","Apr",
"May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec")
document.write(weekday[d.getDay()] + ", ")
document.write(monthname[d.getMonth()] + " " +
d.getDate() + ", ")
document.write(d.getFullYear())
</script>
Thursday, Mar 25, 2010
Curs Programare Web, anul 4 C5 Curs 5
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
75
Obinerea unui numr aleator
Codul genereaz un numr aleator n
virgul mobil cuprins ntre 0 i 1:
<script type="text/javascript">
document.write(Math.random())
</script>
Rezultatul:
0.728762788388911
Curs Programare Web, anul 4 C5 Curs 5
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
76
Obinerea unei valori ntregi
aleatoare
Codul genereaz un numr aleator ntreg cuprins
ntre 0 i 10:
<script type="text/javascript">
var max = 10;
number=Math.random()*max + 1;
document.write(Math.floor(number));
</script>
Rezultatul:
5
Curs Programare Web, anul 4 C5 Curs 5
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
77
Afiarea unui mesaj de tip alert
Codul afieaz un mesaj de alert atunci cnd un
buton este apsat:
<form>
<input type="button" name="Submit"
value="Alert!
onclick="alert(Something happened!');">
</form>
Curs Programare Web, anul 4 C5 Curs 5
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
78
Depanare
Urmtorul cod arat ce evenimente au fost
declanate atunci cnd utilizatorul a ntreprins
diverse aciuni
n seciunea <head> a paginii HTML definim:
<script>
<!--
function tell(a, b) {
document.forms[0].result.value+="\n"+a+": " + b;
}
//-->
</script>
Pentru fiecare element al formularului adugm
un handler pentru oricare eveniment (plauzibil)
Curs Programare Web, anul 4 C5 Curs 5
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
79
Depanarea (pentru un Buton)
<input type="button" name="plainButton" value="Plain
Button"
onMouseDown="tell(this.name, 'onmousedown');"
onMouseUp="tell(this.name, 'onmouseup');"
onClick="tell(this.name,'onclick');"
onDblClick="tell(this.name,'ondblclick');"
onFocus="tell(this.name, 'onfocus');"
onBlur="tell(this.name, 'onblur');"
onMouseOver="tell(this.name, 'onmouseover');"
onMouseOut="tell(this.name, 'onmouseout');"
onChange="tell(this.name, 'onchange');"
onKeyPress="tell(this.name, 'onkeypress');"
onKeyDown="tell(this.name, 'onkeydown');"
onKeyUp="tell(this.name, 'onkeyup');"
onSelect="tell(this.name, 'onselect');"
onReset="tell(this.name, 'onreset');"
>
Curs Programare Web, anul 4 C5 Curs 5
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Curs Programare Web, anul 4 C5 Curs 5 80
Demo 4
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
81
JavaScript elemente
suplimentare
Curs Programare Web, anul 4 C5 Curs 5
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
82
Suportul browserului
JavaScript funcioneaz pe aproape toate
browserele
Internet Explorer folosete JScript (referit n
meniuri ca Active Scripting), ce reprezint
dialectul Microsoft-ului de JavaScript
Browserele mai vechi nu suport unele construcii
JavaScript
Vom presupune suportul unui browser modern
Activarea i dezactivarea JavaScript:
Dac nu tii cum s facei asta din browser, vedei i
http://www.mistered.us/tips/javascript/browsers.shtml
Curs Programare Web, anul 4 C5 Curs 5
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
83
Ce NU putei face
Pentru protecia vizitatorilor la paginile voastre,
folosind JavaScript nu putei:
Executa alte programe
S v conectai la alte computere, exceptnd
download-ul altor pagini HTML sau trimiterea de e-mail
S determinai ce alte site-uri a vizitat utilizatorul
Citi sau scrie fiiere locale
Totui, JScript n IE permite scripting ASP, modalitatea prin
care viermele foarte distructiv JS.Gigger.A@mm s-a rspndit
de exemplu
Implicit, Outlook Express permite ca mail-ul primit s ruleze
scripturi
Pentru a dezactiva scripting-ul n Outlook Express, vedei
http://support.microsoft.com/support/kb/articles/Q192/8/46.ASP
Curs Programare Web, anul 4 C5 Curs 5
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
84
Numere
n JavaScript, toate numerele sunt de tip floating
point
Numere speciale predefinite:
Infinity, Number.POSITIVE_INFINITY rezultatul
mpririi unui numr pozitiv la zero
Number.NEGATIVE_INFINITY rezultatul mpririi unui
numr negativ la zero
NaN, Number.NaN (Not a Number) rezultatul
mpririi 0/0
NaN este diferit de orice, chiar i de sine nsui
Exist o funcie globala isNaN()
Number.MAX_VALUE cel mai mare numr
reprezentabil
Number.MIN_VALUE cel mai mic (apropiat de zero)
numr reprezentabil
Curs Programare Web, anul 4 C5 Curs 5
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
85
String-uri i caractere
n JavaScript, string este un tip primitiv
Stringurile sunt ncadrate de ghilimele sau
apostroafe
Nu exist tipul character
Caractere speciale:
\0 NUL
\b backspace
\f form feed
\n newline
\r carriage return
\t horizontal tab
\v vertical tab
\' single quote
\" double quote
\\ backslash
\xDD Unicode hex DD
\xDDDD Unicode hex DDDD
Curs Programare Web, anul 4 C5 Curs 5
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
86
Cteva metode de lucru cu string-uri
charAt(n)
ntoarce al n-lea caracter din string
concat(string1, ..., stringN)
Concateneaz string-urile primite ca argumente
indexOf(substring)
ntoarce poziia primului caracter al substring n string-ul recipient
sau -1 daca nu este gsit
indexOf(substring, start)
ntoarce poziia primului caracter al substring n stringul dat ca
argument ncepnd de la poziia start, sau -1 dac nu este gsit
lastIndexOf(substring), lastIndexOf(substring, start)
Similar indexOf, dar caut string-ul ncepnd de la sfrit spre
nceput
Curs Programare Web, anul 4 C5 Curs 5
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
87
Variabile
Orice variabil este o proprietate a unui obiect
Atunci cnd JavaScript pornete, creaz un obiect global
obiectul window
Poate fi referit ca window sau ca this
Pot exista mai mult de un singur obiect global
De exemplu, un frame poate referi un alt frame printr-un cod precum
parent.frames[1]
Elementele HTML form pot fi referite prin
document.forms[formNumber].elements[elementNumber]
Orice element HTML form are un atribut name
Numele poate fi folosit in locul referinei de tip tablou
De exemplu, dac presupunem:
<form name="myForm">
<input type="button" name="myButton" ...>
Atunci n loc de document.forms[0].elements[0]
Putem folosi i document.myForm.myButton
Curs Programare Web, anul 4 C5 Curs 5
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
n Java, metodele sunt asociate cu obiecte
n JavaScript, o funcie este un obiect
Funciile pot fi recursive:
function factorial(n) {
if (n <= 1) return 1;
else return n * factorial(n - 1);
}
Funciile pot fi imbricate:
function hypotenuse(a, b) {
function square(x) { return x * x; }
return Math.sqrt(square(a) + square(b));
}
88
Funcii
Curs Programare Web, anul 4 C5 Curs 5
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Deoarece funciile sunt obiecte, ele au i un constructor:
Function(arg1, arg2, ..., argN, body)
Toate argumentele constructorului sunt string-uri
Exemplu:
var f = new Function("x", "y", "return x * y;");
Funcia nu are nici un nume
Dar se poate asigna unei variabile i folosi respectivul
nume
Numele poate fi folosit pentru apelarea funciei in modul
uzual
Se pot construi funcii n mod dinamic n JavaScript (ele
sunt automat compilate)
Totui, compilarea este o activitate computaional-
intensiv
Funciile definite n acest fel sunt ntotdeauna globale
89
Constructorul Function()
Curs Programare Web, anul 4 C5 Curs 5
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
90
Funcii
O funcie poate fi definit prin folosirea unui
constructor:
var f = new Function("x", "y", "return x * y;");
O funcie poate fi scris sub form literal,
precum n urmtorul exemplu:
var f = function(x, y) { return x * y; }
Aceast funcie nu este n mod necesar global
Pentru a scrie o funcie recursiv, se poate
proceda astfel:
var f = function fact(n) { if (n <= 1) return n;
else return n * fact(n - 1) ; };
Numele nu persist dup ce funcia este creat
Curs Programare Web, anul 4 C5 Curs 5
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
91
Nume de funcii
Numele unei funcii este o variabil ce
conine respectiva funcie
var square = function(x) { return x * x; };
var a = square(4); // a ia valoarea 16
var b = square; // b ia valoarea square
var c = b(5); // c ia valoarea 25
var d = [ b ]; // d este un tablou
var e = d[0](6); // e ia valoarea 36
Curs Programare Web, anul 4 C5 Curs 5
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
92
Proprieti ale funciilor
Deoarece o funcie este un obiect i putei
i aduga proprieti
Proprietile funciilor sunt adesea o bun
alternativ la variabilele globale
Exemplu:
uniqueInteger.counter = 0;
function uniqueInteger() {
return uniqueInteger.counter++;
}
Proprietile funciilor sunt cumva similare
variabilelor statice din Java
Curs Programare Web, anul 4 C5 Curs 5
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
O variabil este local unei funcii dac
Este un parametru formal al funciei
Este declarat cu var n interiorul funciei (e.g.
var x = 5)
Altfel, variabilele sunt globale
Mai exact, o variabil este global dac
Este declarat n afara oricrei funcii (cu sau
fr var)
Este declarat prin asignare n interiorul unei
funcii (e.g. x = 5)
93
Variabile locale i globale
Curs Programare Web, anul 4 C5 Curs 5
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
94
Funcii i metode
Atunci cnd o funcie reprezint o proprietate a
unui obiect, o numim metod
O metod poate fi invocat fie
call(object, arg1, ..., argN) fie
apply(object, [arg1, ..., argN])
call i apply sunt definite pentru toate funciile
call primete orice numr de argumente
apply primete un tablou de argumente
Ambele permit invocarea funciei ca i cum ar fi o
metod a unui alt obiect, object
n interiorul unei funcii cuvntul cheie this se refer la
object
Curs Programare Web, anul 4 C5 Curs 5
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Exemplu
var x = 10;
var o = { x: 15 };
function f() {
alert(this.x);
}
f();
f.call(o);
Curs Programare Web, anul 4 C5 Curs 5 95
Afieaz 10 (this = obiectul global)
Afieaz 15 (this = o)
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Putem apoi transforma funcia ntr-o metod:
myPoint.dist = distance;
this n interiorul unei funcii se refer la myPoint,
deci putem spune:
document.write("The distance is " + myPoint.dist(6,
9));
Dac nu dorim s asociem permanent funcia cu
myPoint, putem spune:
document.write("The distance is " +
distance.call(myPoint, 6, 9));
Sau:
document.write("The distance is " +
distance.apply(myPoint, [6, 9]));
96
Metode (2)
Curs Programare Web, anul 4 C5 Curs 5
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
97
JavaScript i AJAX
Curs Programare Web, anul 4 C5 Curs 5
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
98
Ce este AJAX?
AJAX = Asynchronous JavaScript and XML
Grup de tehnologii ce permit o mai bun
interaciune i prezentare, precum i actualizarea
incremental a paginilor Web.
Bazat pe tehnologii standard web - HTTP,
(X)HTML, CSS, JavaScript, Document Object
Model (DOM), XML
Folosit de multe companii populare astzi
Google Suggests, Google & Yahoo! Maps
Amazon A9 Search
Flickr, BaseCamp, Kayak
Yahoo! AJAX Library
Curs Programare Web, anul 4 C5 Curs 5
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
99
Exemplu Yahoo! Sports
Curs Programare Web, anul 4 C5 Curs 5
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
100
Interaciunea Web Tradiional
Clientul face o cerere http
Web server
Serverul intoarce o noua pagina
Curs Programare Web, anul 4 C5 Curs 5
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
101
Cum funcioneaz AJAX
Web server
Clientul face o cerere http pentru informatii
Serverul intoarce informatiile cerute
Mai multe cereri sunt servite
Curs Programare Web, anul 4 C5 Curs 5
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
102
De ce ne intereseaz AJAX?
Permite construirea de aplicaii Rich
Internet Applications (RIA)
Permite interaciunea dinamic pe Web
mbuntete performanele
Actualizri real-time
Nu necesit plug-in-uri
Curs Programare Web, anul 4 C5 Curs 5
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
103
Cod Simplu pentru Schimbarea Stilului
<style type="text/css">
.notice {
background-color:#FFFFCC;
}
.roInput {
border:none;
background-color:#FFFFFF;
}
</style>
<script type="text/javascript">
// get the element to hold updated data
var priceLoc = document.getElementById('priceLoc");
// update the data in price loc
priceLoc.value = "new data";
// set the style so change will be noticed
priceLoc.className = "notice";
// create timer to call clearActive() with element id and style name
setTimeout("clearActive('priceLoc','roInput');", 5000);
function clearActive(activeId, resetStyle) {
var curActive = document.getElementById(activeId);
curActive.className = resetStyle;
}
</script>
Curs Programare Web, anul 4 C5 Curs 5
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
AJAX
Primul pas: crearea unei instane
if (window.XMLHttpRequest) {
reqObj = new XMLHttpRequest(); // Firefox, Safari, ...
} else if (window.ActiveXObject) { // ActiveX version
reqObj = new ActiveXObject("Microsoft.XMLHTTP");
// IE
}
Pasul doi: Ateptm primirea rspunsului
reqObj.onreadystatechange = function() {
processResponse(reqObj);
};
Curs Programare Web, anul 4 C5 Curs 5 104
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
AJAX
Pasul 3: cererea propriu-zis
Se pot folosi dou metode ale XMLHttpRequest
open: parametrii sunt tipul cererii (GET sau POST),
URL-ul documentului, true pentru cerere asincrona
send: merge doar cu POST, accept datele de trimis
ctre server
Exemplu
reqObj.open('GET',
'http://www.example.com/example.xml', true);
Curs Programare Web, anul 4 C5 Curs 5 105
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
AJAX
Pasul 4: Gestiunea rspunsului
function processResponse(reqObj) {
if (reqObj.readyState == 4) {// Received, OK
if (reqObj.status == 200) { // perfect!
}
else {
// there was a problem with the request
}
}
else {
// Wait...
}
}
Curs Programare Web, anul 4 C5 Curs 5 106
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Cuprins
Ce este jQuery?
Ce face jQuery?
Scurt istoric
Cum se foloseste?
jQuery API
Selectori
Atribute
Parcurgeri
Evenimente
Ajax
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Ce este jQuery?
jQuery este o biblioteca JavaScript , rapida
si compacta, ce simplifica parcurgerea
documentelor html, tratarea evenimentelor,
realizarea de animatii, interactiunile Ajax.
Ajuta deci la o dezvoltare mai rapida de
pagini web
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Ce face jQuery?
Accesarea elementelor dintr-un document
Modificarea aspectului unei pagini web
Modificarea continutului unui document
Gestionarea evenimentelor
Aducerea de informatii de pe server fara a
face refresh la pagina
Realizare de animatii
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Scurt istoric
Public Development Phase - John Resig
anunta o noua biblioteca JS ce venea ca o
imbunatatire a Prototype. E lansata sub
numele de jQuery la 14 ianuarie 2006
jQuery 1.0 (August 2006) prima versiune
stabila; are deja implementata suport pentru
selectori CSS, tratare de evenimente si
interactiuni AJAX
jQuery 1.1 (January 2007) devine mai
compacta
jQuery 1.2 (September 2007) se scot
selectorii Xpath, se adauga evenimente legate
de namespace
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Scurt istoric
jQuery UI (Septembrie 2007) destinat sa
inlocuiasca plugin-ul Interface existent. Contine o
colectie bogata de widget-uri si tool-uri cu care se
pot construi elemente complexe
jQuery 1.3 (Ianuarie 2009) imbunatatiri la modulul
de selectie (Sizzle)
jQuery 1.4(Ianuarie 2010) imbunatatiri de
performanata
jQuery 1.5(Ianuarie 2011) modulul AJAX a fost
rescris, imbunatatiri in parcurgerea elementelor
jQuery 1.5.2 versiunea curenta
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Cum se foloseste ?
Se gaseste pe site-ul oficial la adresa
http://docs.jquery.com/Downloading_jQuery
Nu necesita instalare
<script type="text/javascript" src="jquery.js"></script>
Disponibial in doua versiuni
Minified (29 kB la versiunea 1.5.2)
Regular (214 kB la versiunea 1.5.2)
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Alti selectori
$("#orderedlist > li").addClass("blue");
$("#orderedlist").find("li"). addClass("blue");
$("#orderedlist li"). addClass("blue");
$("#orderedlist #child"). addClass("blue");
$("#orderedlist .child"). addClass("blue");
$("#orderedlist li:last"). addClass("blue");
$("#orderedlist li:first"). addClass("blue");
$("input:image"). addClass("blue");
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Alti selectori
:lt si :gt
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Alti selectori
Selectori Multipli
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Atribute
.addClass() adauga clasa specificate elementelor selectate
.attr() valoarea atributului specificat al primului element ce
indeplineste conditiile de selectie
.hasClass() determina daca vreunul din elementele
selectate au clasa specificata
.html() - intoarce sau seteaza continutul html al primului
element din setul selectat
.removeAttr() elimina un atribut pentru toate elementele
selectate
.removeClass() elimina una sau mai multe clase specificate
pentru fiecare element din setul selectat
.toggleClass() adauga sau sterge una sau mai multe clase
pentru fiecare element din set, in functie de exiestenta clasei
date ca argument
.val() intoarce valoare primului element din setul selectat
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Parcurgeri
.find() cauta printre descendentii
elementelor selectate elementul dat de
selector
$("p").find("span").css('color','red');
.each() pentru fiecare element selectat
executa o functie
$("li").each(function(){
doSomething();
});
.children() copii fiecarui element selectat
$("div").children(".selected").css("color", "blue");
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Parcurgeri
.parent() parintele fiecarui element din setul
selectat
$("p").parent(".selected").css("background",
"yellow")
.prev() fratele anterior fiecarui element din
set
$("p").prev(#myId").css("background", "yellow");
.next() fratele urmator al fiecarui element din
set
$("p").next(".selected").css("background",
"yellow");
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Evenimente
.change() ataseaza un handler
evenimentului de change sau il
declanseaza;
.click() - ataseaza un handler
evenimentului de click sau il declanseaza;
.hover() ataseaza doua functii handler ce
vor fi apelate cand cursorul trece pe
deasupra elementului
.resize() - ataseaza un handler
evenimentului de resize sau il
declanseaza;
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Ajax
jQuery.ajax() face o cerere HTTP
asincrona la server
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Ajax
.ajaxComplete() ataseaza un handler ce
se va apela dupa trimiterea cererii Ajax
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Ajax
jQuery.post() -cerere HTTP POST
.serialize() encodeaza date dintr-un
formular pentru a fi trimise la server
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Sumar
Fundamentele JavaScript noiuni de baz
ale limbajului i construciile specifice
acestuia
JavaScript i HTML - gestiunea simpl a
evenimentelor folosind DOM
Exemple JavaScript
Noiuni avansate de JavaScript funcii,
metode, obiecte, etc.
O introducere n JavaScript i AJAX
Curs Programare Web, anul 4 C5 Curs 5 125