Date post: | 29-Apr-2017 |
Category: |
Documents |
Upload: | roxana-branzoi |
View: | 268 times |
Download: | 2 times |
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Curs Programare Web, anul 4 C5 – Curs 5 1
Ciprian [email protected]
Programare web client-side, JavaScript
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
2
Obiective
• Introducere în JavaScript și a noțiunilor de programare pe care limbajul le suportă
• Există numeroase documente şi cărţi publicate (inclusiv în limba română) care conţin informaţii suplimentare.
• Prezentăm î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 măcar nu este înrudit
cu Java– Numele original al JavaScript a fost “LiveScript”– Numele a fost modificat când Java a devenit popular– Astăzi când Microsoft nu mai îndrăgește Java propriul
nume acordat dialectului JavaScript este “Active Script”• Instrucțiunile în JavaScript seamănă cu instrucțiuni
din Java deoarece ambele limbaje au împrumutat multe elemente chiar din limbajul C– JavaScript este relativ ușor de învățat de către
programatorii familiarizați cu Java– Totuși JavaScript este un limbaj de sine stătător, 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 instrucțiuni JavaScript sunt în general
folosite pentru a adăuga funcționalitate paginilor HTML
– JavaScript este adesea folosit în conjuncție cu formulare HTML
• JavaScript este într-o bună măsură independent de platformă (nu SO, cât 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>
• Observații:– Atributul type permite folosirea altor limbaje de scripting (chiar
dacă JavaScript este limbajul implicit)– Acest exemplu simplu face același lucru ca a scrie <h1>Hello
World!</h1> în același loc în documentul HTML– Punct și virgulă de la finalul instrucțiunii JavaScript este opțional
• Sfârșitul liniei marchează sfârșitul instrucțiunii, dacă linia poate fi interpretată ca o instrucțiune completă
• Se poate folosi punct și virgulă pentru separarea mai multor instrucțiuni ce apar pe aceeași linie
• Este indicat totuși 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 afișa ce este inclus în interiorul tag-ului (codul JavaScript inclus)
– Pentru a face aceste browsere să ignore conținutul 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 sfârșit de
comentariu HTML, -->, secvența // marchează un comentariu JavaScript, ce ține până la sfârșitul liniei respective
• Unii utilizatori opresc JavaScript– Folosiți <noscript>mesaj</noscript> pentru a afișa 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 +
"@" + 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 secțiunea
<head>, fie în secţiunea <body> a unui document HTML– Funcțiile JavaScript ar trebui să fie definite în
secțiunea <head>• Acest lucru ne asigură că funcțiile sunt încărcate
chiar înainte ca ele să fie cerute– Codul JavaScript din <body> este executat atunci
când este încărcată pagina
Curs Programare Web, anul 4 C5 – Curs 5
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Unde apare codul JavaScript• Funcțiile JavaScript pot fi plasate și în fișiere
separate având în general extensia .js<script src="myJavaScriptFile.js"></script>
– Codul acesta se plasează în secțiunea <head>– Un fișier extern .js permite folosirea aceluiași cod
JavaScript în mai multe pagini HTML– Fișierul extern .js nu poate conţine la rândul său 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 când 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 puteți fi siguri, e mai indicat să evitați cu totul folosirea
valorilor in octal!
• Valorile String pot fi delimitate prin caractere apostrof sau ghilimele– String-urile pot conține \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 conține valori de orice tip)
• Există doar două scopuri ale variabilelor: local și global– Variabilele declarate într-o funcție sunt locale respectivei funcții
(accesibile numai din interiorul respectivei funcții)– Variabilele declarate în afara unei funcții sunt globale (accesibile de
oriunde din pagină)
• Variabilele pot fi declarate implicit prin simpla adăugare 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
seamănă cu cea din Java):
• Operatori aritmetici (toate numerele sunt în virgulă mobilă):
+ - * / % ++ --• Operatori de comparație:
< <= == != >= >• Operatori logici:
&& || !• Operatori la nivel de biți:
& | ^ ~ << >> >>>• 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 condițiomal:
condition ? value_if_true : value_if_false• Teste de egalitate:
– == și != încearcă convertirea operatorilor la același tip înaintea efectuării testului
– Nu ca în C sau Java: === și !== consideră operanzii inegali dacă aceștia 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 sfârșitul liniei
– Între /* și */
• Comentariile de tip javadoc din Java, /** ... */, sunt tratate similar comentariilor de tip /* ... */; ele nu au nici o semnificație specială în JavaScript
Curs Programare Web, anul 4 C5 – Curs 5
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
• Majoritatea sintaxelor de instrucțiuni JavaScript sunt împrumutate din C– Atribuirea: greeting = "Hello, " + name;
– Instrucțiunea compusă:
{ statement; ...; statement }– Instrucțiunea If:
if (condition) statement;if (condition) statement; else statement;
– Instrucțiuni de iterare:while (condition) statement;do statement while (condition);for (initialization; condition; increment) statement;
19
Instrucțiuni (1)
Curs Programare Web, anul 4 C5 – Curs 5
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
20
Instrucțiuni (2)• Instrucțiunea switch:
switch (expression) {case label :
statement;break;
case label :statement;break;
...default : statement;
}
• Alte instrucțiuni familiare:– break;– continue;– Instrucțiunea vidă, precum;; sau { }
Curs Programare Web, anul 4 C5 – Curs 5
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
21
JavaScript vs. Java• Deja realizați că știți destul de multe despre
JavaScript– Până acum am văzut aspecte ce sunt similare precum în
Java• JavaScript are unele construcții ce seamănă cu
construcțiile corespondente din Java:– JavaScript folosește Obiecte și tipuri de date primitive– JavaScript folosește evenimente și gestiunea
evenimentelor (event handlers)– Gestiunea excepțiilor î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
Totuși JavaScript nu este Java
• Totuși JavaScript are unele construcții diferite de cele din Java:– Numele de variabile nu au tip: tipul unei variabile
depinde de valoarea curentă pe care respectiva variabila o deține
– Obiectele și array-urile sunt definite într-o manieră diferită de cea din Java
– JavaScript are instrucțiunea with și o nouă formă a instrucțiunii 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 excepție– expresie este valoarea excepției și poate fi de orice tip
(adesea este un string)try {
instructiuni} catch (e) { // Atenţie: nu avem declaraţie de tip pentru e
instructiuni pentru tratarea exceptiei} finally { // opţional, similar Java
codul executat intotdeauna}– Folosind această abordare există o singură clauză catch
23
Gestiunea excepțiilor (1)
Curs Programare Web, anul 4 C5 – Curs 5
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
24
Gestiunea excepțiilor (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 aceleași câmpuri și metode– Obiectele JavaScript sunt mai flexibile decât obiectele Java
• JavaScript lucrează cu “object literals”, scriși conform următoarei sintaxe:– { name1 : value1 , ... , nameN : valueN }
• Exemplu:– car = {myCar: "Saturn", 7: "Mazda",
getCar: CarTypes("Honda"), special: Sales}• Câmpurile sunt myCar, getCar, 7 (este chiar un nume legal de
câmp) și special• "Saturn" și "Mazda" sunt câmpuri de tip String• CarTypes este un apel de funcţie• 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 obiect1. Puteți folosi un object literal:
var course = { name: “PWeb", teacher: “Ciprian Dobre" }
2. Puteți folosi new pentru a crea un obiect “blank” căruia să îi adăugați câmpuri ulterior:
var course = new Object();course.name = “PWeb";course.teacher = “Ciprian Dobre";
3. Puteți 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 optionalthis.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 inițializate începând de la poziția 0 color[0] are valoarea "red"
• Dacă folosim două virgule succesive, variabila tablou va avea un element “empty” în respectiva poziție– Exemplu: color = ["red", , , "green", "blue"];
• color are 5 elemente
– Totuși, 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 array1. Puteți folosi un array literal:
var colors = ["red", "green", "blue"];
2. Puteți folosi new Array() pentru a crea un tablou gol:var colors = new Array();
– Puteți adăuga elemente ulterior în acel tablou:colors[0] = "red"; colors[2] = "blue"; colors[1]="green";
3. Puteți folosi new Array(n) cu un singur argument numeric pentru a crea un tablou având respectiva dimensiune
var colors = new Array(3);
4. Puteți folosi new Array(…) cu două sau mai multe argumente pentru a crea un tablou conţinând 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
Inițializare• Crearea unui tablou dimensionat deja
pentru 10 elemente:var badArray = new Array(10);
vs.
• Crearea unui tablou având 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 exempluvar 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
obținute folosind myArray.length• Dimensiunea unui tablou poate fi modificată prin
adăugarea de elemente peste lungimea curentă a acestuia– Exemplu: var myArray = new Array(5); myArray[10] = 3;
• Tablourile sunt structuri de date risipite, spațiul este alocat doar pentru elementele cărora le-a fost cu asignată o valoare– Exemplu: myArray[50000] = 3; este perfect OK– Indicii trebuie să fie între 0 și 232-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 obiectecar = { myCar: "Saturn", 7: "Mazda" }
– car[7] este echivalent cu car.7
– car.myCar este același cu car["myCar"]
• Dacă cunoașteți numele unei proprietăți puteți folosi notația cu punct: car.myCar
• Daca nu cunoașteți numele proprietății dar îl aveți într-o variabilă (sau îl puteți calcula), folosiți notația 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,
funcții, 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 număr de elemente la finalul tabloului și crește dimensiunea acestuia
– myArray.pop() înlătură și întoarce ultimul element al tabloului și decrementează dimensiunea acestuia
– myArray.toString() întoarce un string conținând 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 lexicograficadocument.writeln("0> "+myarray+"<br>"); myarray.sort(function(a, b) { return a - b; });// ordine numericadocument.writeln("1> "+myarray+"<br>"); myarray.reverse();// elementele in ordine inversadocument.writeln("2> "+myarray+"<br>");
Curs Programare Web, anul 4 C5 – Curs 5 36
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
• Similară instrucțiunii iterative din Java for (type var : collection)
• Puteți itera printre proprietățile unui obiect folosindfor (variable in object) statement;– Exemplu: for (var prop in course) {
document.write(prop + ": " + course[prop]);}
– Posibil output: teacher: Ciprian Dobrename: PWeb
– Proprietățile sunt accesate într-o ordine nedefinită– Dacă adăugați sau ștergeți proprietăți obiectului din buclă este
nedefinit dacă instrucțiunea iterativă va traversa și proprietățile nou definite sau nu
– Tablourile sunt obiecte; aplicată unui tablou, for…in va vizita “proprietățile” 0, 1, 2, …
– Observați că course["teacher"] este echivalent cu course.teacher• Trebuie să folosiți paranteze drepte dacă numele proprietății este
într-o variabilă37
Instrucțiunea for … in
Curs Programare Web, anul 4 C5 – Curs 5
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
38
Instrucțiunea withwith (object) statement
– Folosește object ca prefix implicit al variabilelor din statement
– Dacă câmpurile accesate nu există prefixul nu va fi folosit
• De exemplu, următoarele sunt echivalente:– with (document.myForm) {
result.value = compute(myInput.value) ;}
– document.myForm.result.value =compute(document.myForm.myInput.value);
• Instrucțiunea with este utilă atunci când aveţi de făcut mai multe manipulări asupra unui același obiect– Instrucțiunea with poate conduce însă la confuzii și din
acest motiv trebuie folosită cu atențieCurs Programare Web, anul 4 C5 – Curs 5
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
39
Funcții
• Funcțiile trebuie definite în secțiunea <head> a paginii HTML pentru a fi siguri că ele sunt încărcate primele
• Sintaxa pentru definirea unei funcții este:function name(arg1, …, argN) { statements }– Funcția poate conține instrucțiuni de tipul return value; – Orice variabilă declarată în interiorul unei funcții este
locală respectivei funcții• Sintaxa pentru apelarea unei funcții este
name(arg1, …, argN)• Parametrii simpli sunt transmiși 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 următoarele 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 câteva elemente mai puțin folosite lipsesc)
• string.match(regexp) are rolul de a căuta în string apariții ale regexp– Întoarce null dacă nu este găsit 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 cărui element de
pe poziția 0 reprezintă textul ce se potrivește 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 cifreif (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 suprafața
acestuia• JavaScript nu este total independent de platformă
– Trebuie să vă așteptați 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ă așteptați să primiți multe mesaje ajutătoare 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
• Scrieți codul corespunzător unei pagini HTML în care să aveți un obiect Car, un constructor declarat în <head> și care să afișeze valoarea curentă a câmpului type în document.
Curs Programare Web, anul 4 C5 – Curs 5
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Soluție…<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ă același lucru ca XML DOM
• Puteți face multe lucruri înțelegând conceptul de DOM– Puteți folosi DOM pentru a accesa elementele paginii
Web
– Puteți capta evenimente fără să fiți deloc familiarizați cu conceptul DOM dar ….
– Aveți nevoie de DOM pentru a face eventuale modificări î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
răspund la interactivitatea din partea utilizatorului (keystrokes, mouse clicks) prin crearea de evenimente– Diverse tipuri de elemente produc evenimente diferite
• Browserele nu seamănă nici când vine vorba de tipurile de evenimente pe care le produc
– Ne vom concentra pe evenimente ce țin de elementele specifice unor formulare HTML
• Puteți 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 funcție în care se produce toată funcționalitatea 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, având 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 declanșa o fereastră de pop-up de tip
alertă cu un mesaj furnizat ca argumentCurs Programare Web, anul 4 C5 – Curs 5
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
51
Convenții de scriere• JavaScript este case sensitive• HTML nu este case sensitive• onclick="alert('You clicked the button!');"
– Părțile subliniate țin de codul HTML– Stringul este cod JavaScript– Veți vedea adesea metoda onclick scrisă și sub forma
onClick• Convențiile de nume Java sunt mai ușor de citit• Acest lucru este permis în HTML, dar dacă este folosit în cod
JavaScript conduce automat la eroare
• Observație: Deoarece avem un string în interiorul altui string avem nevoie de atât varianta cu ghilimele,cât ș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 următoarele
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 apăsat când 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 când cursorul era încă
deasupra elementului– onMouseMove –mouse-ul este mutat
• În JavaScript, aceste funcții 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
• Următorul cod va face textul Hellored atunci când cursorul mouse-ului trece
deasupra lui și blue atunci când cursorul mouse-ului iese din
suprafața 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)
• Următoarele tabele sunt preluate de la:http://developer.netscape.com/docs/manuals/js/client/jsguide/index.htm
Eveniment Se aplică Apare atunci când Handler
Load Corpul documentului Utilizatorul încarcă pagina în browser
onLoad
Unload Corpul documentului Utilizatorul părăsește pagina
onUnload
Error Imagini, ferestre Eroare la încărcarea unei imagini sau a unei ferestre
onError
Abort Imagini Utilizatorul renunță la încărcarea 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 când
Handler
KeyDown Documente, imagini, legături, zone text
Utilizatorul apasă o tastă
onKeyDown
KeyUp Documente, imagini, legături, zone text
Utilizatorul eliberează o tastă
onKeyUp
KeyPress Documente, imagini, legături, zone text
Utilizatorul apasă o tastă
onKeyPress
Change Cămpuri text, zone text, liste de selecție
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 când
Handler
MouseDown Documente, butoane, legături
Utilizatorul termină de apăsat un buton de mouse
onMouseDown
MouseUp Documente, butoane, legături
Utilizatorul eliberează un buton de mouse
onMouseUp
Click Butoane, butoaneradio, checkbox-uri, butoane de submit, butoane de reset, legături
Utilizatorul face click de mousepe un element din formular sau o legătură
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 când Handler
MouseOver Legături Utilizatorul mută cursorul deasupra unei legături
onMouseOver
MouseOut Zone, legături Utilizatorul mută cursorul în afara zonei unei imagini sau legături
onMouseOut
Select Câmpuri 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 când 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 când
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• Puteți atașa handlere de evenimente elementelor HTML
având puține cunoștințe legate de DOM• Totuși, pentru a schimba ceea ce este afișat în cadrul
paginii aveți nevoie să cunoașteți modul în care puteți 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 mergând î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 folosește direct prea des).
• self– Același 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 rândul lor ferestre.• length
– Numărul de frame-uri conținute în fereastra curentă.
63
Câmpurile lui window (1)
Curs Programare Web, anul 4 C5 – Curs 5
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
64
Câmpurile lui window (2)• document
– Documentul HTML ce este curent afișat în fereastră.
• location– URL-ul documentului ce este curent afișat în fereastră. – Daca setați această proprietate la un nou URL, respectivul URL va fi
încărcat în fereastra curentă. – Apelând location.reload() veți face refresh la fereastră.
• navigator– O referință la obiectul Navigator (browser). Unele proprietăți 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 afișat în zona de status a
ferestrei browserului. Poate fi modificat cu o simplă instrucțiune de atribuire.
Curs Programare Web, anul 4 C5 – Curs 5
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
• alert(string) – Afișează un dialog ce conține string-ul primit ca
argument și un buton OK. • confirm(string)
– Afișează o fereastră de dialog conținând string-ul primit ca argument împreună cu două butoane Cancel și OK.
– Întoarce true dacă a fost apăsat butonul OK și false dacă a fost apăsat butonul Cancel.
• prompt(string)– Afișează un dialog de confirmare conținand string-ul
primit ca argument, un câmp de tip text și două butoane Cancel și OK.
– Întoarce string-ul introdus de către utilizator daca a fost apăsat OK și null dacă a fost apăsat 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ă conținând
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ă prefixați aceste câmpuri cu document.
• anchors[ ] – Un tablou de obiecte Anchor (obiecte
reprezentând tag-uri de forma <a name=...>) • applets[ ]
– Un tablou de obiecte Applet• Proprietățile sunt câmpurile publice definite pentru
respectivele appleturi• Metodele sunt metodele publice ale appleturilor
67
Câmpurile 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 conține un singur formular, acesta este întors in forms[0]
• images[ ] – Un tablou de obiecte Image
• Pentru schimbarea unei imagini asignați un nou URL proprietății src
• links[ ] – Un tablou de obiecte Link
• Un link are câteva proprietăți, incluzând href, ce conține URL-ul complet al legăturii
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 oricând
• title – Un string read-only ce conține titlul
documentului
• URL – Un string read-only ce conține adresa URL de
unde a fost încărcat documentul
Curs Programare Web, anul 4 C5 – Curs 5
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
70
Câmpurile obiectului form
• elements[ ]– Un tablou conținând 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 imagineaimagine = document.getElementsByTagName('img')[0];// modificam atributul "src"imagine.src = 'ceva.gif';
// localizam paragrafulparagraf = document.getElementsByTagName('p')[1];// modificam atributul CSS font-styleparagraf.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
Obținerea 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
Obținerea ș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
Obținerea unui număr aleator• Codul generează un număr 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
Obținerea unei valori întregialeatoare
• Codul generează un număr 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
Afișarea unui mesaj de tip alertă
• Codul afișează un mesaj de alertă atunci când un buton este apăsat:
• <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
• Următorul cod arată ce evenimente au fost declanșate atunci când utilizatorul a întreprins diverse acțiuni
• în secțiunea <head> a paginii HTML definim:– <script>
<!--function tell(a, b) {
document.forms[0].result.value+="\n"+a+": " + b;}
//--></script>
• Pentru fiecare element al formularului adăugăm 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 funcționează pe aproape toate browserele
• Internet Explorer folosește JScript (referit în meniuri ca “Active Scripting”), ce reprezintă dialectul Microsoft-ului de JavaScript ☺
• Browserele mai vechi nu suportă unele construcții JavaScript– Vom presupune suportul unui browser modern
• Activarea și dezactivarea JavaScript:– Dacă nu știți cum să faceți asta din browser, vedeți ș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 puteți face
• Pentru protecția vizitatorilor la paginile voastre, folosind JavaScript nu puteți:– Executa alte programe– Să vă conectați la alte computere, exceptând
download-ul altor pagini HTML sau trimiterea de e-mail– Să determinați ce alte site-uri a vizitat utilizatorul– Citi sau scrie fișiere locale
• Totuși, JScript în IE permite scripting ASP, modalitatea prin care viermele foarte distructiv JS.Gigger.A@mm s-a răspândit de exemplu
• Implicit, Outlook Express permite ca mail-ul primit să ruleze scripturi
• Pentru a dezactiva scripting-ul în Outlook Express, vedeți 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 împărțirii unui număr pozitiv la zero
– Number.NEGATIVE_INFINITY – rezultatul împărțirii unui număr negativ la zero
– NaN, Number.NaN (Not a Number) – rezultatul împărțirii 0/0
• NaN este diferit de orice, chiar și de sine însuși• Există o funcție globala isNaN()
– Number.MAX_VALUE – cel mai mare număr reprezentabil
– Number.MIN_VALUE – cel mai mic (apropiat de zero) număr 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
Câteva 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 poziția primului caracter al substring în string-ul recipient sau -1 daca nu este găsit
• indexOf(substring, start)– Întoarce poziția primului caracter al substring în stringul dat ca
argument începând de la poziția start, sau -1 dacă nu este găsit• lastIndexOf(substring), lastIndexOf(substring, start)
– Similar indexOf, dar caută string-ul începând de la sfârșit 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 când JavaScript pornește, 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 referinței 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 funcție este un obiect• Funcțiile pot fi recursive:
function factorial(n) {if (n <= 1) return 1;else return n * factorial(n - 1);
}• Funcțiile pot fi imbricate:
– function hypotenuse(a, b) {function square(x) { return x * x; }return Math.sqrt(square(a) + square(b));
}88
Funcții
Curs Programare Web, anul 4 C5 – Curs 5
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
• Deoarece funcțiile 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;");• Funcția nu are nici un nume
– Dar se poate asigna unei variabile și folosi respectivul nume
– Numele poate fi folosit pentru apelarea funcției in modul uzual
• Se pot construi funcții în mod dinamic în JavaScript (ele sunt automat compilate)– Totuși, compilarea este o activitate computațional-
intensivă• Funcțiile 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
Funcții
• O funcție poate fi definită prin folosirea unui constructor:– var f = new Function("x", "y", "return x * y;");
• O funcție poate fi scrisă sub formă literală,precum în următorul exemplu:– var f = function(x, y) { return x * y; }– Această funcție nu este în mod necesar globală
• Pentru a scrie o funcție 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 funcția este creată
Curs Programare Web, anul 4 C5 – Curs 5
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
91
Nume de funcții• “Numele” unei funcții este o variabilă ce
conține respectiva funcție– 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
Proprietăți ale funcțiilor
• Deoarece o funcție este un obiect îi puteți și adăuga proprietăți– Proprietățile funcțiilor sunt adesea o bună
alternativă la variabilele globale– Exemplu:
uniqueInteger.counter = 0;function uniqueInteger() {
return uniqueInteger.counter++;}
– Proprietățile funcțiilor 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 funcții dacă– Este un parametru formal al funcției– Este declarată cu var în interiorul funcției (e.g.
var x = 5)• Altfel, variabilele sunt globale• Mai exact, o variabilă este globală dacă
– Este declarată în afara oricărei funcții (cu sau fără var)
– Este declarată prin asignare în interiorul unei funcții (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
Funcții și metode
• Atunci când o funcție reprezintă o proprietate a unui obiect, o numim “metodă”– O metodă poate fi invocată fie
call(object, arg1, ..., argN) fieapply(object, [arg1, ..., argN])
– call și apply sunt definite pentru toate funcțiile• call primește orice număr de argumente• apply primește un tablou de argumente
– Ambele permit invocarea funcției ca și cum ar fi o metodă a unui alt obiect, object
– În interiorul unei funcții cuvântul cheie this se referă la object
Curs Programare Web, anul 4 C5 – Curs 5
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Exempluvar x = 10;var o = { x: 15 };
function f() {alert(this.x);
}
f();f.call(o);
Curs Programare Web, anul 4 C5 – Curs 5 95
Afișează 10 (this = obiectul global)
Afișează 15 (this = o)
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
• Putem apoi transforma funcția într-o metodă:– myPoint.dist = distance;
• this în interiorul unei funcții se referă la myPoint, deci putem spune:– document.write("The distance is " + myPoint.dist(6,
9));• Dacă nu dorim să asociem permanent funcția 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ă
interacțiune ș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 astăzi– 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
Interacțiunea Web Tradițională
Clientul face o cerere http
Web serverServerul intoarce o noua pagina
Curs Programare Web, anul 4 C5 – Curs 5
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
101
Cum funcționează 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 aplicații Rich
Internet Applications (RIA)• Permite interacțiunea dinamică pe Web• Îmbunătățește performanțele• Actualizări 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 instanțeif (window.XMLHttpRequest) {
reqObj = new XMLHttpRequest(); // Firefox, Safari, ...} else if (window.ActiveXObject) { // ActiveX version
reqObj = new ActiveXObject("Microsoft.XMLHTTP"); // IE
}
• Pasul doi: Așteptăm primirea răspunsuluireqObj.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 către server
• ExemplureqObj.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 răspunsului
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
CuprinsCe este jQuery?Ce face jQuery?Scurt istoricCum 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 documentModificarea aspectului unei pagini webModificarea continutului unui documentGestionarea evenimentelorAducerea de informatii de pe server fara a
face refresh la paginaRealizare de animatii
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Scurt istoricPublic 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 versiunestabila; are deja implementata suport pentruselectori CSS, tratare de evenimente siinteractiuni AJAX
jQuery 1.1 (January 2007) – devine maicompacta
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 sainlocuiasca 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 modululde selectie (Sizzle)
jQuery 1.4(Ianuarie 2010) – imbunatatiri de performanata
jQuery 1.5(Ianuarie 2011) – modulul AJAX a fostrescris, 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_jQueryNu 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 claseidate 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 selectatexecuta 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 ildeclanseaza;
• .click() - ataseaza un handler evenimentului de “click” sau il declanseaza;
• .hover() – ataseaza doua functii handler cevor fi apelate cand cursorul trece pedeasupra elementului
• .resize() - ataseaza un handler evenimentului de “resize” sau ildeclanseaza;
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
AjaxjQuery.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 – noțiuni de bază
ale limbajului și construcțiile specifice acestuia
• JavaScript și HTML - gestiunea simplă a evenimentelor folosind DOM
• Exemple JavaScript• Noțiuni avansate de JavaScript – funcții,
metode, obiecte, etc.• O introducere în JavaScript și AJAX
Curs Programare Web, anul 4 C5 – Curs 5 125