+ All Categories
Home > Documents > PW5 JavaScript

PW5 JavaScript

Date post: 29-Apr-2017
Category:
Upload: roxana-branzoi
View: 268 times
Download: 2 times
Share this document with a friend
125
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare Curs Programare Web, anul 4 C5 – Curs 5 1 Ciprian Dobre [email protected] Programare web client-side, JavaScript
Transcript
Page 1: PW5 JavaScript

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

Page 2: PW5 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

Page 3: PW5 JavaScript

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

Page 4: PW5 JavaScript

Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare

4

JavaScript

Fundamentele Limbajului

Curs Programare Web, anul 4 C5 – Curs 5

Page 5: PW5 JavaScript

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

Page 6: PW5 JavaScript

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

Page 7: PW5 JavaScript

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

Page 8: PW5 JavaScript

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

Page 9: PW5 JavaScript

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

Page 10: PW5 JavaScript

Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare

Rezultat

Curs Programare Web, anul 4 C5 – Curs 5 10

Page 11: PW5 JavaScript

Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare

Curs Programare Web, anul 4 C5 – Curs 5 11

Demo 1

Page 12: PW5 JavaScript

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

Page 13: PW5 JavaScript

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

Page 14: PW5 JavaScript

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

Page 15: PW5 JavaScript

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

Page 16: PW5 JavaScript

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

Page 17: PW5 JavaScript

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

Page 18: PW5 JavaScript

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

Page 19: PW5 JavaScript

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

Page 20: PW5 JavaScript

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

Page 21: PW5 JavaScript

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

Page 22: PW5 JavaScript

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

Page 23: PW5 JavaScript

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

Page 24: PW5 JavaScript

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

Page 25: PW5 JavaScript

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

Page 26: PW5 JavaScript

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

Page 27: PW5 JavaScript

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

Page 28: PW5 JavaScript

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 = [];

Page 29: PW5 JavaScript

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

Page 30: PW5 JavaScript

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

Page 31: PW5 JavaScript

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

Page 32: PW5 JavaScript

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

Page 33: PW5 JavaScript

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

Page 34: PW5 JavaScript

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

Page 35: PW5 JavaScript

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

Page 36: PW5 JavaScript

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

Page 37: PW5 JavaScript

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

Page 38: PW5 JavaScript

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

Page 39: PW5 JavaScript

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

Page 40: PW5 JavaScript

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

Page 41: PW5 JavaScript

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

Page 42: PW5 JavaScript

Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare

Rezultat

Curs Programare Web, anul 4 C5 – Curs 5 42

Page 43: PW5 JavaScript

Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare

Curs Programare Web, anul 4 C5 – Curs 5 43

Demo 2

Page 44: PW5 JavaScript

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

Page 45: PW5 JavaScript

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

Page 46: PW5 JavaScript

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

Page 47: PW5 JavaScript

Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare

47

JavaScript și HTML

Gestiunea Simplă a Evenimentelor

Curs Programare Web, anul 4 C5 – Curs 5

Page 48: PW5 JavaScript

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

Page 49: PW5 JavaScript

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

Page 50: PW5 JavaScript

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

Page 51: PW5 JavaScript

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

Page 52: PW5 JavaScript

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

Page 53: PW5 JavaScript

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

Page 54: PW5 JavaScript

Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare

Curs Programare Web, anul 4 C5 – Curs 5 54

Demo 3

Page 55: PW5 JavaScript

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

Page 56: PW5 JavaScript

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

Page 57: PW5 JavaScript

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

Page 58: PW5 JavaScript

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

Page 59: PW5 JavaScript

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

Page 60: PW5 JavaScript

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

Page 61: PW5 JavaScript

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

Page 62: PW5 JavaScript

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

Page 63: PW5 JavaScript

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

Page 64: PW5 JavaScript

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

Page 65: PW5 JavaScript

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

Page 66: PW5 JavaScript

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

Page 67: PW5 JavaScript

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

Page 68: PW5 JavaScript

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

Page 69: PW5 JavaScript

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

Page 70: PW5 JavaScript

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

Page 71: PW5 JavaScript

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>

Page 72: PW5 JavaScript

Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare

72

Exemple JavaScript

Curs Programare Web, anul 4 C5 – Curs 5

Page 73: PW5 JavaScript

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

Page 74: PW5 JavaScript

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

Page 75: PW5 JavaScript

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

Page 76: PW5 JavaScript

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

Page 77: PW5 JavaScript

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

Page 78: PW5 JavaScript

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

Page 79: PW5 JavaScript

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

Page 80: PW5 JavaScript

Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare

Curs Programare Web, anul 4 C5 – Curs 5 80

Demo 4

Page 81: PW5 JavaScript

Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare

81

JavaScript – elemente suplimentare

Curs Programare Web, anul 4 C5 – Curs 5

Page 82: PW5 JavaScript

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

Page 83: PW5 JavaScript

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

Page 84: PW5 JavaScript

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

Page 85: PW5 JavaScript

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

Page 86: PW5 JavaScript

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

Page 87: PW5 JavaScript

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

Page 88: PW5 JavaScript

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

Page 89: PW5 JavaScript

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

Page 90: PW5 JavaScript

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

Page 91: PW5 JavaScript

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

Page 92: PW5 JavaScript

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

Page 93: PW5 JavaScript

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

Page 94: PW5 JavaScript

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

Page 95: PW5 JavaScript

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)

Page 96: PW5 JavaScript

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

Page 97: PW5 JavaScript

Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare

97

JavaScript și AJAX

Curs Programare Web, anul 4 C5 – Curs 5

Page 98: PW5 JavaScript

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

Page 99: PW5 JavaScript

Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare

99

Exemplu – Yahoo! Sports

Curs Programare Web, anul 4 C5 – Curs 5

Page 100: PW5 JavaScript

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

Page 101: PW5 JavaScript

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

Page 102: PW5 JavaScript

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

Page 103: PW5 JavaScript

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

Page 104: PW5 JavaScript

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

Page 105: PW5 JavaScript

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

Page 106: PW5 JavaScript

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

Page 107: PW5 JavaScript

Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare

Page 108: PW5 JavaScript

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

Page 109: PW5 JavaScript

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

Page 110: PW5 JavaScript

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

Page 111: PW5 JavaScript

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

Page 112: PW5 JavaScript

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

Page 113: PW5 JavaScript

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)

Page 114: PW5 JavaScript

Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare

Page 115: PW5 JavaScript

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");

Page 116: PW5 JavaScript

Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare

Alti selectori :lt si :gt

Page 117: PW5 JavaScript

Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare

Alti selectori

Selectori Multipli

Page 118: PW5 JavaScript

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

Page 119: PW5 JavaScript

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");

Page 120: PW5 JavaScript

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");

Page 121: PW5 JavaScript

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;

Page 122: PW5 JavaScript

Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare

Ajax

jQuery.ajax() – face o cerere HTTP asincrona la server

Page 123: PW5 JavaScript

Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare

Ajax.ajaxComplete() –ataseaza un handler ce

se va apela dupa trimiterea cererii Ajax

Page 124: PW5 JavaScript

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

Page 125: PW5 JavaScript

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


Recommended