Professional Documents
Culture Documents
Java Script
Šta ćete naučiti
• Postavljanje skripta sa JavaScript kodom
• Prikaz podataka “preko” JavaScripta
• JavaScript tipovi podataka
• JavaScript objekti
• Rezervisane reči
• Operatori
• Funkcije
• Petlje – ciklusi
• Break i continue rezervisane reči
• Labele
Šta ćete naučiti
• DOM
• Reference objekata u JavaScriptu
• Svojstva i metode objekata
• Događaji u JavaScript-u
• Nizovi
JavaScript
• JavaScript je skript jezik kojim Web dizajneri mogu da automatizuju postupke
unutar Web stranice
• Skript jezik - jer omogućava pisanje skripta (niza naredbi) koje će Web čitač izvršiti
• Ne koristi se za pravljenje spoljnog programa koji se izvršava nezavisno od čitača
• JavaScript se ugrađuje u HTML Web stranice – nije potreban poseban alat; može
se koristiti isti program za uređenje teksta koji se koristi za izradu Web stranice
• Najpopularniji čitači Weba imaju ugrađenu podršku za JavaScript – posetioci
lokacije ne moraju instalirati dodatne programe na svoje računare
• JavaScript iskazi postavljaju se između oznaka <script> i </script>, koje će ukazati
čitaču Weba da izvrši JavaScript iskaze umesto da prikaže tekst na ekranu
5
JavaScript
• JavaScript može menjati HTML sadržaj
• Jedna od velikog broja JavaScript HTML metoda je getElementById().
• Sledeći primer koristi ovaj metod da nađe HTML element (sa id="demo") i
promeni sadržaj tog elementa (innerHTML) u "Zdravo JavaScript":
• Primer 1
<!DOCTYPE html>
<html>
<body>
<h1>What Can JavaScript Do?</h1>
<p id="demo">JavaScript can change HTML content.</p>
<button type="button" onclick="document.getElementById('demo').innerHTML =
'Zdravo JavaScript!'">Klikni na mene!</button>
</body>
</html>
6
JavaScript
• JavaScript može promeniti HTML Styles (CSS)
• Promena stila HTML elementa, predstavlja, zapravo, promenu
HTML atributa:
document.getElementById("demo").style.fontSize = "25px";
• JavaScript može sakriti HTML element ili ga prikazati
document.getElementById("demo").style.display = "none";
document.getElementById("demo").style.display = "block";
7
Pozicije oznaka
Skriptovi u zaglavlju dokumenta Skriptovi u telu dokumenta
<html> <html>
<head> <head>
<title> Dokument</title> <title> Dokument</title>
<script type="text/javascript"> </head>
//naredbe <body>
</script> <script type="text/javascript">
</head> //naredbe
<body> </script>
</body> </body>
</html> </html>
8
Pozicije oznaka
Skriptovi u zaglavlju i telu dokumenta Dva skripta u telu dokumenta
<html> <html>
<head><title> Dokument</title> <head><title> Dokument</title>
<script type="text/javascript"> </head>
//naredbe <body>
</script> <script type="text/javascript">
</head> //naredbe
<body> </script>
<script type="text/javascript"> <more html>
//naredbe <script type="text/javascript">
</script> //naredbe
</body> </script>
</html> </body>
</html>
9
<HEAD> vs <BODY>
• Scripte u head sekciij:
– Izvršavaju se kad se pozovu.
– Kada postavimo skript u head sekciju, osiguraćemo da se skript učita pre nego
ga bilo ko bude koristio.
– Funkcija će se izvršiti samo ako se pozove ili aktivira od strane nekog događaja.
Kad je funkcija u head sekciji, bićemo sigurni da će se učitati funkcija pre nego
što posetilac izazove događaj s kojim je funkcija povezana.
• Scripte u body sekciji:
– Izvršavaju se dok se stranica učitava.
– Postavljanje skripta u body sekciju generiše sadržaj strane.
10
JavaScript
• Novije verzije Java Scripta koriste samo tagove <script> i
</script>
12
Mogućnosti prikaza
• JavaScript može "prikazati" podatke na različite načine:
– Ispisivanje u alert box, korišćenjem window.alert().
– Ispisivanje u HTML dokument pomoću document.write().
– Ispisivanje u HTML element, preko innerHTML.
– Ispisivanje u browser konzolu, preko console.log().
13
Mogućnosti prikaza
window.alert document.write
<!DOCTYPE html> <!DOCTYPE html>
<html> <html>
<body> <body>
<h1>My First Web Page</h1> <h1>My First Web Page</h1>
<p>My first paragraph.</p> <p>My first paragraph.</p>
<script> <button onclick="document.write(5 + 6)">
window.alert(5 + 6); Try it</button>
</script>
</body>
</body> </html>
</html>
14
Mogućnosti prikaza
• Za pristup HTML elementu, JavaScript može koristiti
document.getElementById(id) metod.
• id atribut definiše HTML element, dok innerHTML svojstvo definiše
HTML sadržaj:
<!DOCTYPE html>
<html>
<body>
<h1>My First Web Page</h1>
<p>My First Paragraph</p>
<p id="demo"></p>
<script>
document.getElementById("demo").innerHTML = 5 + 6;
</script>
</body>
</html> 15
JavaScript
• JavaScript sintaksa predstavlja skup pravila, kojima se konstruišu
JavaScript programi.
• JavaScript statemant predstavljaju instrukcije – naredbe. One su
odvojene i završavaju se sa tačka zarez ;
• JavaScript statement se sastoje od: vrednosti, operatora,
izraza, ključnih reči i komentara.
16
Primer 1.
<html>
<head> <title> Primer izvrsavanja JavaScripta </title> </head>
<body>
<p> Tekst koji se ispisuje pre izvrsavanja iskaza.</p>
<script type="text/javascript"> Naredba
<!-- (iskaz)
alert('Ovo je dijalog ALERT!');
//-->
</script>
<p> Tekst koji se ispisuje nakon izvrsavanja iskaza.</p>
</body>
</html>
17
JavaScript
• Iskazi skripta mogu se uokviriti HTML oznakama za komentar
(<!--komentar-->) kako bi se sprečilo da čitači koji ne podržavaju
JavaScript na ekranu prikažu iskaze skripta.
• Čitači koji ne podržavaju JavaScript ignorisaće oznake skripta i
sve što se nalazi između početne i završne oznake komentara.
• Obrnuto, čitači koji podržavaju JavaScript ignorisaće oznake
komentara i izvršiti funkciju skripta.
18
JavaScript tipovi podataka
• JavaScript variable mogu sadržati različite tipove
podataka: brojeve, stringove, objekte...
var length = 16; // Number
var lastName = "Johnson"; // String
var x = {firstName:"John", lastName:"Doe"}; // Object
19
JavaScript tipovi podataka
• String predstavlja niz karaktera, npr. "John Doe".
• Stringovi mogu biti oivičeni jednostrukim ili dvostrukim
navodnicima:
var answer = "It's alright"; // Single quote inside double quotes
var answer = "He is called 'Johnny'";// Single quotes inside double
quotes
var answer = 'He is called "Johnny"';// Double quotes inside single
quotes
• JavaScript ima samo jedan tip brojeva, brojevi sa ili bez decimala
var x1 = 34.00; // Written with decimals
var x2 = 34; // Written without decimals
• Java Script boolean može imati dve vrednosti
var x = true; 20
JavaScript objekti
• JavaScript objekti se pišu u vitičastim zagradama.
• Svojstva objekata se pišu u vidu para name:value, odvojenih
zarezima.
var person = {firstName:"John", lastName:"Doe", age:50,
eyeColor:"blue"};
21
JavaScript objekti
<!DOCTYPE html>
<html>
<body>
<p id="demo"></p>
<script>
var person = {
firstName : "John",
lastName : "Doe",
age : 50,
eyeColor : "blue"
};
document.getElementById("demo").innerHTML =
person.firstName + " is " + person.age + " years old.";
</script>
</body>
</html> 22
typeof operator
• typeof "John" // Returns "string"
typeof 3.14 // Returns "number"
typeof true // Returns "boolean"
typeof false // Returns "boolean„
• typeof [1,2,3,4] // Returns "object" (not "array ")
typeof {name:'John', age:34} // Returns "object"
typeof function myFunc(){} // Returns "function"
23
Rezervisane reči JavaScripta
• Prilikom imenovanja funkcija ili definicija promenljive za smeštanje informacija dok čitač izvršava
iskaze u funkciji ili skriptu – moraju se izabrati imena funkcija i promenljivih koje nisu u sukobu sa
rezervisanim rečima JavaScripta
24
Deklarisanje promenljivih u JavaScriptu
25
Deklarisanje promenljivih u JavaScriptu
26
Ograničenja pri deklaraciji promenljivih
27
JavaScript operatori
• Operatori dozvoljavaju kombinovanje promenljivih i/ili slovnih vrednosti u
izraze koji daju vrednosti
• Ti izrazi se mogu prikazivati, smeštati u promenljive ili koristiti kao delovi
drugih izraza
• JavaScript operatori mogu se grupisati u nekoliko klasa na osnovu njihove
namene:
– aritmetički operatori – zahtevaju dve promenljive, dve vrednosti ili dva
izraza ( po jedan na svakoj strani operatora)
– unarni JavaScript operatori – odnose se na jedan operand
– operatori poređenja – omogućavaju poređenje jednog izraza, promenljive
ili slovne vrednosti s nekom drugom
– logički operatori – omogućavaju poređenje dve logičke vrednosti
28
Aritmetički operatori
Operator Namena Primer
+ Sabiranje Izraz+izraz
- Oduzimanje Izraz-izraz
* Množenje Izraz*izraz
/ Deljenje Izraz/izraz
29
Unarni JavaScript operatori
Operator Namena Primer
++ Povećanje za 1 promenljiva++ ili ++promenljiva
• Kada se dvostruki plus (++) ili dvostruki minus (--) stavi ispred promenljive, kao prefiks,
operacija se obavlja pre dodele vrednosti
• Ako se operator postavi kao sufiks, nakon promenljive, operacija se obavlja nakon dodele
vrednosti.
• Na primer:
i = 10;
j = --i; //i=9,. j=9
j = i++; //j=10, i=11 30
Operatori poređenja
Operator Namena Primer
== Jednako izraz==izraz
!= Različito od izraz!=izraz
31
Logički operatori
Operator Namena Primer
32
JavaScript funkcije
• Srodne naredbe (iskazi) grupišu se u funkciju
• U okviru Web stranice svaka JavaScript funkcija mora imati
jedinstveno ime
• Definicija počinje ključnom rečju function, zatim sledi ime
funkcije i neobavezni niz parametara (obuhvaćenih zagradama)
• Nakon imena funkcije i neobaveznog niza parametara, između
vitičastih zagrada {} navode se JavaScript iskazi koji izvode
zadatak funkcije
33
JavaScript funkcije
function greetVisitor(){
alert(“Welcome to My Site”);
return;
}
• Iskazi JavaScripta završavaju se tačkom i zarezom (;)
• Na kraju funkcije (pre zatvaranja desne vitičaste zagrade) umeće se
ključna reč return - vraća upravljanje čitača Weba iskazu koji je
pozvao funkciju
• Funkcije je najbolje ugraditi na kraj zaglavlja (neposredno ispred
oznake </head>) - osigurava da će čitač Weba učitati telo funkcije
pre nego što posetilac izazove događaj s kojim je funkcija povezana
34
Primer 3.
<html>
<head> <title> Funkcije JavaScripta </title>
<script type="text/javascript">
<!--
function greet_visitor(){
alert("Welcome to My Site");
return;
}
// -->
</script>
</head>
<body>
<p> Tekst koji se ispisuje pre izvršavanja iskaza JavaScript-a.</p>
<script type="text/javascript">
<!--
greet_visitor();
// -->
</script>
<p> Tekst koji se ispisuje nakon izvršavanja iskaza JavaScript-a.</p>
</body> </html>
35
Prosleđivanje vrednosti u JavaScript funkciju i iz
nje
• Kada se pozove JavaScript funkcija moguće je proslediti vrednosti u funkciju preko
promenljivih koje se zovu parametri
• Niz parametara funkcije nalazi se u zagradama, posle imena u deklaraciji funkcije
• Sledeći kod deklariše funkciju sa tri parametra – first, next i last:
function find_total(first,next,last){
var total = first + next + last;
document.write (“Rezultat je: ” + total + “ . ” );
return;
}
• Tekst i naredbe HTML-a se stavljaju unutar navodnika.
• Naredbom document.write(...) unutar Java Scripta se u dokument ispisuje HTML kod ili korisnički
tekst.
• Java Script i HTML iskazi međusobno se povezuju znakom plus (+).
36
Primer 4a.
<html>
<head> Parametri funkcije
<title> Funkcija zbira </title>
<script type="text/javascript">
<!--
function find_total(first,next,last){
var total = first + next + last;
document.write ("Rezultat je: <br />" + total + " . " );
return;
}
// -->
</script>
</head>
<body>
<script type="text/javascript">
<!--
find_total(2,3,4); Argumenti funkcije
// -->
</script>
</body>
</html>
37
Primer 4b.
• Napraviti Web stranu koja prikazuje tri vrednosti i njihov
proizvod, kao što je prikazano na slici.
38
Primer 4b.
<html> <head> <title> Funkcija proizvoda </title>
<script type="text/javascript">
<!--
function find_total(first,next,last){
var total = first * next * last;
document.write ( “Unete vrednosti su: <br />
<i> Prva vrednost: </i> ” +first+ “<br />
<i> Druga vrednost:</i>” +next+ “<br />
<i> Treća vrednost: </i>” +last+ “<br />
<hr /> <b> Njihov proizvod je:</b>” + total + “ . ” );
}
// -->
</script> </head>
<body>
<script type="text/javascript">
<!--
find_total(5,3,2);
// -->
</script>
</body> </html>
39
Predefinisani objekti
• JavaScript poseduje izvestan skup predefinisanih objekata: Date, Array, Math.
• Date objekt omogućava rad sa datumima(godine, meseci, dani, sati, minute,
sekunde i milisekunde)
<!DOCTYPE html>
<html>
<body>
<p id="demo"></p>
<script>
document.getElementById("demo").innerHTML = Date();
</script>
</body>
</html>
40
Predefinisani objekti
• Date objekat se kreira konstruktorom new Data()
• Postoji četiri načina za inicjalizaciju Date() objekta
new Date();
new Date(milliseconds);
new Date(dateString);
new Date(year, month, day, hours, minutes, seconds, milliseconds);
• Primer
<!DOCTYPE html>
<html>
<body>
<p id="demo"></p>
<script>
var d = new Date();
document.getElementById("demo").innerHTML = d;
</script>
</body>
</html> 41
Primer 5.
<!DOCTYPE html>
<html>
<body>
<p id="demo"></p>
<script>
var sada = new Date();
var time = sada.getHours();
var minut =sada.getMinutes();
document.write("Vreme je:"+time+":"+minut+"<br />");
if (time > 10) {
document.write("<b>Good day</b>");
}
</script>
</body>
</html>
42
Uslovni iskazi i petlje
• Skriptovi koji donose odluke – obavljaju uslovnu obradu
• Zavisno od rezultata jednog ili više uslova, čitač će izvršiti
određene iskaze
• Da bi doneli odluku – skriptovi moraju izvršiti neku vrstu provere
– koriste operatore poređenja
• Rezultat poređenja dve vrednosti relacionim operatorima je
logičkog tipa: ili true (tačno) ili false (netačno)
43
Uslovno izvršavanje
• Iskaz if omogućava skriptovima da izvrše provere, a potom izvrše
iskaze zavisno od rezultata provere
• Ako je rezultat poređenja tačan, skript izvršava iskaz koji sledi iza
iskaza if
• S druge strane, ako je rezultat provere pogrešan, skript preskače
iskaz koji sledi
• Format iskaza if je sledeći:
if (uslov je ispunjen)
iskaz;
44
Uslovno izvršavanje
• Uslov if može da se koristi za izvršavanje jednog ili više iskaza
• Kada skript izvršava samo jedan iskaz koji dolazi iza if, to je prost iskaz:
if (Age >= 18)
alert(“Vi ste punoletni!”);
• Za skriptove koji treba da izvrše nekoliko iskaza kada uslov bude ispunjen,
iskazi se moraju grupisati između leve i desne vitičaste zagrade ({}). Iskazi koji
se nalaze u zagradama sačinjavaju složen iskaz:
if (time > 10) {
document.write("<b>Good day</b>");
document.bgColor="lightyellow";
}
45
Uslovno izvršavanje
• Većinom skriptovi zadaju jedan skup iskaza koji se izvršava kada
je uslov ispunjen i drugi skup ako uslov nije ispunjen
• Definisanje iskaza koji se izvršavaju kada uslov nije ispunjen
realizuje se iskazom else
• Format iskaza else je sledeći:
if (uslov je ispunjen)
iskaz;
else
iskaz;
46
Primer 6.
<html><head>
<title> Primer uslovnog izvršavanja </title>
</head>
<body>
<script type="text/javascript">
var sada = new Date();
var time = sada.getHours();
document.write("Vreme je:" +sada.getHours()+ ":" +sada.getMinutes()+ "<br />");
if (time < 10) {
document.write("<b>Good morning</b>");
}
else{
document.write("<b>Good day</b>");
}
</script>
</body>
</html>
47
Petlje ponavljanja
48
Petlje ponavljanja
Na primer:
for (Count = 1; Count <=5; Count++)
Iskaz;
• Iskaz Count=1 dodeljuje kontrolnoj promenljivoj početnu vrednost
– Petlja for izvodi ovu inicijalizaciju samo jednom, kada se pokrene
• Zatim proverava uslov Count<=5
– Ako je uslov ispunjen petlja for će izvršiti iskaz koji sledi
– Ako uslov nije ispunjen, petlja će se završiti i skript će nastaviti sa
izvršavanjem od prvog iskaza koji sledi nakon petlje
– Ako je uslov ispunjen i petlja for izvršava iskaz povećaće
promenljivu Count korišćenjem iskaza Count++
49
Primer 7.
<html>
<head>
<title> For petlja </title>
</head>
<body>
<script type="text/javascript">
for (i = 0; i <= 5; i++){
document.write("The number is " + i);
document.write("<br />");
}
</script>
</body>
</html>
50
Ponavljanje iskaza dok je uslov ispunjen
• Kad skriptovi moraju da prolaze kroz petlju dok god je određeni
uslov ispunjen, ali ne obavezno određen broj puta, mogu da
koriste while petlju
• Opšti oblik while petlje:
while (Uslov je ispunjen)
iskaz;
51
Ponavljanje iskaza dok je uslov ispunjen
• Na primer:
while (i <= 10)
iskaz;
• Kada skript naiđe na petlju while, prvo proverava zadati uslov,
ako je ispunjen – skript izvršava iskaze petlje while.
• Nakon što se izvrši poslednji iskaz u petlji, petlja while ponovo
proverava uslov, ako je uslov i dalje ispunjen, iskazi će se ponoviti
i proces će se nastaviti.
• Kada uslov ne bude ispunjen, petlja će se završiti i skript će
nastaviti izvršenje od prvog iskaza koji sledi petlju.
52
Primer 8.
<html>
<head>
<title> While petlja </title>
</head>
<body>
<script type="text/javascript">
<!--
i = 0;
while (i <= 10){
document.write("The number is " + i);
document.write("<br />");
i=i+1;
}
// -->
</script>
</body> </html>
53
JavaScript Break and Continue
• break statement "iskače" iz petlje.
• continue statement "preskače" iteraciju u petlji.
<!DOCTYPE html>
<html><body>
<p>A loop with a break.</p>
<p id="demo"></p>
<script>
var text = "";
var i;
for (i = 0; i < 10; i++) {
if (i === 3) { break; }
text += "The number is " + i + "<br>";
}
document.getElementById("demo").innerHTML = text;
</script>
</body></html>
54
JavaScript Break and Continue
<!DOCTYPE html>
<html>
<body>
<p>A loop which will skip the step where i = 3.</p>
<p id="demo"></p>
<script>
var text = "";
var i;
for (i = 0; i < 10; i++) {
if (i === 3) { continue; }
text += "The number is " + i + "<br>";
}
document.getElementById("demo").innerHTML = text;
</script>
</body>
</html>
55
JavaScript Labele
• Služe za označavanje dela koda. Sintaksa je:
label:
statements
• Možemo koristiti
break labelname;
continue labelname;
56
JavaScript Labele
<!DOCTYPE html>
<html>
<body>
<p id="demo"></p>
<script>
var cars = ["BMW", "Volvo", "Saab", "Ford"]; document.getElementById("demo").innerHTML
= text;
var text = "";
</script>
list: {
text += cars[0] + "<br>"; </body>
text += cars[1] + "<br>"; </html>
text += cars[2] + "<br>";
break list;
text += cars[3] + "<br>";
text += cars[4] + "<br>";
text += cars[5] + "<br>";
}
57
Model objekata dokumenta
HTML DOM (Document Object Model)
• Sa HTML DOM, JavaScript može pristupiti i promenite sve elemente HTML
dokumenta
• Kada se web strana učitava, browser kreira Document Object Model strane.
• HTML DOM model je konstruisan kao drvo objekata:
window
docume toolbar,
history location
nt etc
link anchor layer form applet image area
fileuplo
text radio button select
ad
textarea checkbo
reset option
passwor x
d submit
59
HTML DOM (Document Object Model)
• Sa DOM, JavaScript čini HTML dinamičnim:
– JavaScript može menjati sve HTML elementi na strani
– JavaScript može menjati sve HTML attribute na strani
– JavaScript može menjati sve CSS styles na strani
– JavaScript može brisati HTML elemente i atribute
– JavaScript može dodati novi HTML elemente i atribute
60
Model objekata dokumenta
window Objekat prozora
Objekat obrasca
form
Elementi obrasca
password
submit
61
Jednostavan dokument
<html>
<head><title> Window
Simple doc
</title></head> Document
<body>
<h1> Hello </h1>
</body>
</html>
62
Dodavanje obrasca
<html>
<head><title>
Simple doc
Window
</title></head>
<body>
<h1> Hello </h1> Document
<form>
</form> Form
</body>
</html>
63
Dodavanje elementa za unos teksta
<html>
<head><title>
Simple doc
Window
</title></head>
<body>
Document
<h1> Hello </h1>
<form>
Form
<input type=“text”>
</form>
</body> Text
</html>
64
Dodavanje elementa dugme
<html>
<head><title>
Simple doc
Window
</title></head>
<body>
Document
<h1> Hello </h1>
<form>
Form
<input type=“text”>
<input type=“button”>
Text Button
</form>
</body>
</html>
65
JavaScript Object
• U JavaScript-u, skoro "sve" je objekat:
– polje za unos teksta,
– dugme ili ceo HTML dokument
– Boolean može biti objekat (if defined with the new keyword)
– Brojevi mogu biti objekti (if defined with the new keyword)
– Stringovi mogu biti objekti(if defined with the new keyword)
– Datumi su uvek objekti
– Regularni izrazi su uvek objekti
– Nizovi su uvek objekti
– Funkcije su uvek objekti
– Objekti su uvek objekti
66
Reference objekata
• Pošto je dokument učitan u čitač, svi njegovi objekti su sigurno
uskladišteni u memoriji, sa strukturom koja zadržava hijerarhiju
po specifikaciji čitača
• Kako bi skript kontrolisao jedan od objekata – mora da postoji
način da se pokaže na objekat i saznaju podaci koje sadrži
• Jezik JavaScript koristi strukturu koja zadržava hijerarhiju kako bi
omogućio skriptovima da stupe u vezu sa objektima u
dokumentu – referenca objekta
67
Imenovanje objekta
• Za referenciranje objekata u skriptovima – dodeljivanje imena
svakom objektu kome se može dodeliti skript u HTML-u
• Skriptabilni čitači prihvataju opcioni atribut oznake koji se
zove name
• Omogućava da se svakom objektu dodeli jedinstveno ime
• Referenca svakog objekta mora da uključi korake duž
hijerarhije objekata, počev od vrha do samog objekta, bez
obzira koliko nivoa će biti uključeno
• U jeziku JavaScripta svaki uzastopni objekat tačkom je
odvojen od drugog objekta
68
Reference prozora, dokumenta i objekta obrasca
window Window
Document
window.document
window Window
Document
window.document
Form
window.document.formName
69
Referenca objekta – polje za unos teksta
window
Window
window.document
Document
window.document.formName Form
window.document.formName.textName
Text
70
Referenca objekta dugme
window Window
window.document Document
window.document.formName Form
window.document.formName.textName
window.document.formName.buttonName Text Button
74
Svojstva objekata u JavaScriptu
• Svojstva ukazuju na to kako se objekat ponaša.
• Svojstva HTML objekta najčešće se podešavaju atributima HTML oznaka.
• Prisustvo JavaScripta često dodaje opcione atribute čija se inicijalna vrednost
može modifikovati kada se dokument učita
• Na primer, sledeća HTML oznaka definiše objekat dugme koji dodeljuje
vrednosti za dva svojstva:
<input type=“button” name=“dugme” value=“pritisni
dugme”>
• Ne moraju se za svaki objekat podesiti sva svojstva – većina svojstava ima
početne vrednosti koje se automatski dodeljuju ako se ništa ne podešava u
HTML-u
75
Svojstva objekata u JavaScriptu
• Za pristupanje svojstvima objekata u sintaksi se koristi tačka, kao u
hijerarhijskoj šemi adresiranja
• Kako je svojstvo sadržano u objektu, njegova referenca se sastoji od reference
objekta i još jednog dodatka za ime objekta
• Za oznaku objekta dugme:
<input type=“button” name=“dugme” value=“pritisni dugme”>
• Referenca do svojstva bila bi:
document.formName.dugme.value
• S obzirom da se samo jedan dokument može naći u prozoru, referenca
objekta u dokumentu može da izostavi deo window
76
Vrednosti bez svojstava - primitivne
• Primitivna vrednost je vrednost koja nema svojstvo ni metodu.
• Imaju primitivne vrednosti.
• JavaScript definiše 5 tipova primitivnih tipova podataka:
– string
– number
– boolean
– null
– Undefined
• Objekti su varijable koje sadrže vaijable
var person = {firstName:"John", lastName:"Doe", age:50, eyeColor:"blue"};
77
Svojstva objekata
• U JavaScript-u objekat je kolekcija imenovanih vrednosti, koje se
nazivaju svojstva.
Property Value
firstNam John
e
lastName Doe
age 50
eyeColor blue
• Objekti pisani kao parovi ime - vrenost slični kao:
– Asocijativni nizovi u in PHP
– Hash tabele u C
– Hash mape u Javi
– Hash u Ruby i Perl
78
JavaScript svojstva
• JavaScript objekti predstavljaju kolekciju unordered svojstava.
• Svojstva mogu biti promenjena,
– Dodata person.nationality = "English";,
– Obrisana
var person = {firstName:"John", lastName:"Doe", age:50, eyeColor:"blue"};
delete person.age; // or delete person["age"];,
– dok su neka read only.
• Pristup svojstvima objekta možemo odraditi na neki od sledećih
načina:
– objectName.property // person.age
– objectName["property"] // person["age"]
– objectName[expression] // x = "age"; person[x]
79
HTML DOM metode
• Metode su akcije koje mogu da se izvrše nad objektom. One ukazuju na to kako se
objekat ponaša.
• Kreiranje metode
– methodName : function() { code lines }
– objectName.methodName()
• JavaScript objekti su kontejneri za svojstva i metode
Property Value
firstName John
lastName Doe
age 50
eyeColor blue
fullName function() {return this.firstName + " " + this.lastName;}
80
HTML DOM metode
• HTML DOM methode su akcije koje se mogu izvršiti na HTML
elementima.
• Čest način za pristup HTML elementu je korišćenjem id elementa
– document.getElementById("demo").innerHTML = "Hello World!";
• Najjednostavniji način za pristup sadržaju elementu jeste
korišćenjem innerHTML svojstva.
• innerHTML svojstvo je korisno za pristup ili promenu sadržaja HTML
elemenata.
• innerHTML svojstvo može biti korišćeno za pristup ili promenu HTML
element, uključujući <html> i <body>.
81
HTML DOM Document
• Promena HTML elemenata
Method Description
82
HTML DOM Document
• HTML DOM Document objekt je vlasnik svih ostalih objekata na web
stranici.
• Pristup bilo kom elementu HTML stranice uvek počinje document
objektom.
• Pretraga HTML elemenata
Method Description
document.getElementById(id) Pronalazi elemente po id elementa
document.getElementsByTagName(name) Pronalazi elemente po nazivu taga
document.getElementsByClassName(name) Pronalazi elemente po nazivu klase
83
Kako doći do HTML elementa
• Postoji više načina na koji možemo doći do HTML elementa kako
bi nešto uradili sa njim:
– Pristup HTML elementima preko id
– Pristup HTML elementima preko naziva taga
– Pristup HTML elementima preko naziva class
– Pristup HTML elementima preko CSS selectora
– Pristup HTML elementima preko kolekcije HTML objekta
84
Pristup preko id
<!DOCTYPE html>
<html>
<body>
<p id="intro">Hello World!</p>
<p>This example demonstrates the <b>getElementById</b> method!</p>
<p id="demo"></p>
<script>
var myElement = document.getElementById("intro");
document.getElementById("demo").innerHTML =
"The text from the intro paragraph is " + myElement.innerHTML;
</script>
</body>
</html>
85
Pristup preko naziva taga
<!DOCTYPE html>
<html>
<body>
<p>Hello World!</p>
<p>The DOM is very useful.</p>
<p>This example demonstrates the <b>getElementsByTagName</b> method</p>
<p id="demo"></p>
<script>
var x = document.getElementsByTagName("p");
document.getElementById("demo").innerHTML =
'The first paragraph (index 0) is: ' + x[0].innerHTML;
</script>
</body>
</html>
86
Pristup preko naziva class
<!DOCTYPE html>
<html>
<body>
<p>Hello World!</p>
<p class="intro">The DOM is very useful.</p>
<p class="intro">This example demonstrates the <b>getElementsByClassName</b>
method.</p>
<p id="demo"></p>
<script>
var x = document.getElementsByClassName("intro");
document.getElementById("demo").innerHTML =
'The first paragraph (index 0) with class="intro": ' + x[0].innerHTML;
</script>
</body>
</html>
87
Pristup preko CSS selektora
<!DOCTYPE html>
<html>
<body>
<p>Hello World!</p>
<p class="intro">The DOM is very useful.</p>
<p class="intro">This example demonstrates the <b>querySelectorAll</b>
method.</p>
<p id="demo"></p>
<script>
var x = document.querySelectorAll("p.intro");
document.getElementById("demo").innerHTML =
'The first paragraph (index 0) with class="intro": ' + x[0].innerHTML;
</script>
</body>
</html>
88
Pristup preko kolekcije HTML objekta
<!DOCTYPE html>
<html>
<body>
<form id="frm1" action="form_action.asp">
First name: <input type="text" name="fname" value="Donald"><br>
Last name: <input type="text" name="lname" value="Duck"><br><br>
<input type="submit" value="Submit">
</form>
<p>Click "Try it" to display the value of each element in the form.</p>
<button onclick="myFunction()">Try it</button>
<script>
<p id="demo"></p>
function myFunction() {
var x = document.forms["frm1"];
var text = "";
var i;
for (i = 0; i < x.length ;i++) {
text += x.elements[i].value + "<br>";
}
document.getElementById("demo").innerHTML = text;
}
</script>
</body>
</html>
89
Pristup preko kolekcije HTML objekta
• Sledeći HTML objekti (i kolekcije objekata) su takođe pristupačni:
– document.anchors
– document.body
– document.documentElement
– document.embeds
– document.forms
– document.head
– document.images
– document.links
– document.scripts
– document.title
90
JavaScript HTML DOM - Menjanje HTML
• HTML DOM dozvoljava JavaScript-u da menja sadržaj HTML elemenata.
• U JavaScript-u, document.write() može da se koristi za direktno
ispisivanje u HTML dokument.
• Nikad ne treba koristiti document.write() poto je dokument učitan, jer
će to dovesti do ispisivanja preko postojećeg dokumenta.
<!DOCTYPE html>
<html>
<body>
<script>
document.write(Date());
</script>
</body>
</html>
91
JavaScript HTML DOM - Menjanje HTML
• Najjednostavniji način za modifikovanje sadržja HTML elemenata
je korišćenjem svojstva innerHTML.
<html>
<body>
<p id="p1">Hello World!</p>
<script>
document.getElementById("p1").innerHTML = "New text!";
</script>
</body>
</html>
92
JavaScript HTML DOM - Menjanje HTML
• Primer promene <h1>
<!DOCTYPE html>
<html>
<body>
<h1 id="header">Old Header</h1>
<script>
var element = document.getElementById("header");
element.innerHTML = "New Header";
</script>
<p>"Old Header" was changed to "New Header"</p>
</body>
</html>
93
JavaScript HTML DOM - Menjanje HTML
• Java Script omogućava promenu atributa.
<!DOCTYPE html>
<html>
<body>
<img id="myImage" src="smiley.gif">
<script>
document.getElementById("myImage").src = "landscape.jpg";
</script>
</body>
</html>
94
JavaScript HTML DOM - Menjanje HTML
• HTML DOM omogućava JavaScript-u da menja stil HTML
elemenata.
<html>
<body>
<p id="p2">Hello World!</p>
<script>
document.getElementById("p2").style.color = "blue";
</script>
<p>The paragraph above was changed by a script.</p>
</body>
</html>
95
Obrada događaja u JavaScriptu
• Procedure za obradu događaja definišu kako skript kontroliše
objekat. Atribut obrade
događaja
Primenjuje se na: Događaj nastupa kad:
onClick Polja za potvrdu, hiperveze, aktivno mesto na Posetilac pritisne mišem element
slici, dugmad, radio-dugmad, dugmad Submit i na obrascu ili hipervezu.
Reset
Oznake: <a>, <body>, <input>
onLoad Telo dokumenta Čitač Weba učitava Web stranicu.
Oznake: <body>, <img>
onMouseOver Područja, hiperveze Posetilac pomeri pokazivač miša u
Oznake: <a>, <body>, <input> područje mapirane slike ili na
hipervezu.
onReset Obrasce Posetilac pritisne dugme Reset.
Oznake: <form>
onSubmit Obrasce Posetilac pritisne dugme Submit.
Oznake: <form>
onError Slike, prozore Čitač naiđe na grešku kada učitava
Oznake:<body>, <img> sliku ili Web stranicu.
96
Obrada događaja u JavaScriptu
onClick="javascript: function('value');"
• ili
onClick="function('value');"
97
Primer onClick
<!DOCTYPE html>
<html>
<body>
<h1 onclick="this.innerHTML='Ooops!'">Click on this text!</h1>
</body>
</html>
98
Primer onLoad
<!DOCTYPE html>
<html>
<body onload="checkCookies()">
<p id="demo"></p>
<script>
function checkCookies() {
var text = "";
if (navigator.cookieEnabled == true) {
text = "Cookies are enabled.";
} else {
text = "Cookies are not enabled.";
}
document.getElementById("demo").innerHTML = text;
}
</script>
</body>
</html>
99
Primer onChange
<!DOCTYPE html>
<html>
<head>
<script>
function myFunction() {
var x = document.getElementById("fname");
x.value = x.value.toUpperCase();
}
</script>
</head>
<body>
Enter your name: <input type="text" id="fname" onchange="myFunction()">
<p> When you leave the input field, a function is triggered which transforms the input text
to upper case.</p>
</body>
</html>
100
Primer onmouseover onmouseout
<!DOCTYPE html>
<html>
<body>
<div onmouseover="mOver(this)" onmouseout="mOut(this)"
style="background-color:#D94A38;width:120px;height:20px;padding:40px;">
Mouse Over Me</div>
<script>
function mOver(obj) {
obj.innerHTML = "Thank You"
}
function mOut(obj) {
obj.innerHTML = "Mouse Over Me"
}
</script>
</body>
</html>
101
Primer 9.
<html>
<head>
<title> Obrada događaja Click </title>
</head>
<body>
<form>
Primer poziva dijaloga:
<br />
<input type="button" value="Dijalog ALERT!" onClick="alert('Ovo je dijalog
ALERT!');">
<br />
</form>
</body>
</html>
102
Primer 10.
<html>
<head>
<title> Obrada događaja Click </title>
</head>
<body>
<form>
Primer poziva dijaloga:<br />
103
Primer 11.
<html>
<head>
<title> Obrada događaja Click </title>
</head>
<body>
<a href="http://www.htmlgoodies.com" onClick="alert('Pristupamo sajtu o HTML-
u.?')";>HTML Goodies </a>
</body>
</html>
104
Primer 12.
<html> <head> <title> Obrada događaja MouseOver </title>
</head>
<body bgcolor="ffffff" text="000000" link="0000ff" vlink="800080" alink="ff0000">
<p> </p><p> </p>
<center>
<font size="+2">
<a href = "" onMouseOver="document.bgColor='black'">Black</a>
<a href = "" onMouseOver="document.bgColor='green'">Green</a>
<a href = "" onMouseOver="document.bgColor='yellow'">Yellow</a>
<a href = "" onMouseOver="document.bgColor='red'">Red</a>
<a href = "" onMouseOver="document.bgColor='brown'">Brown</a>
<a href = "" onMouseOver="document.bgColor='white'">White</a>
</font>
</center>
</body>
</html>
105
Primer 13.
<html>
<head> <title> Obrada događaja Error </title>
<script type="text/javascript">
function abort_image(){
alert('Error: Loading of the image was aborted');
}
</script>
</head>
<body>
<img src="image.gif" onError="abort_image()">
</body>
</html>
106
Primer 14.
<html> <head>
<title> Obrada događaja Submit i Load </title>
<script type="text/javascript">
function load(){
window.status="Page is loaded";
}
</script>
</head>
<body onload="load()">
<form name="testform" action="http://www.nstrade.net/forma.php?action=proizvod"
onSubmit="alert('Hello ' +testform.fname.value+'!')">What is your name?
<br />
<input type="text" name="fname" value="">
<input type="submit" value="Submit">
</form>
</body> </html>
107
Primer 15.
<html>
<head>
<title> Obrada događaja Reset </title>
</head>
<body>
<form onReset="alert('The form will be reset')">
Firstname: <input type="text" name="fname"> <br />
Lastname: <input type="text" name="lname"> <br />
<input type="reset" value="Reset">
</form>
</body>
</html>
108
JavaScript nizovi
JavaScript nizovi
• Niz je promenljiva koja sadrži skup vrednosti istih tipova
podataka
• Na primer, za prodaju pet predmeta prati se količina i cena
svakog predmeta
var ItemCount1, ItemCount2, ItemCount3, ItemCount4, ItemCount5
var ItemPrice1, ItemPrice2, ItemPrice3, ItemPrice4, ItemPrice5
• JavaScript omogućava formiranje jedne promenljive koja može
da skladišti količinu i cenu za svaki od 100 predmeta, koristeći
sledeće iskaze:
var ItemCount = new Array(100);
var ItemPrice = new Array (100);
110
JavaScript nizovi
• Svakom elementu niza pristupa se preko indeksa koristeći sledeću sintaksu:
ImeNiza[Index]
• Prvi predmet u nizu ima indeks nula (0). Da bi se na primer postavila cena i
količina predmeta 1, potrebno je napisati:
– ItemCount[0] = 5;
– ItemPrice[0] = 125.50;
• Količina i cena predmeta 100 smešta se u elemenat niza sa indeksom 99
sledećim iskazom:
– ItemCount[99] = 10;
– ItemPrice[99] = 88.66;
111
Definicija niza elemenata
Broj elemenata
niza
var myArray= new Array(3)
myArray[0]="ant"; Zadavanje
myArray[1]="bat"; elemenata niza
myArray[2]="cat";
document.write ("The third element is "+myArray[2]);
112
Definicija niza elemenata
• Postoje tri načina definicije niza:
1. način
myArray=["ant","bat","cat"]
document.write ("The third element is "+myArray[2]);
2. način
var myArray= new Array(3)
myArray[0]="ant";
myArray[1]="bat"
myArray[2]="cat"
document.write ("The third element is "+myArray[2]);
3. način
myArray= new Array("ant","bat","cat")
document.write ("The third element is "+myArray[2]);
113
Primer 16.
<html>
<head>
<title> Primer niza </title>
</head>
<body>
<script type="text/javascript">
var zaposlenik = new Array (3)
zaposlenik[0] = "Petar";
zaposlenik[1] = "Marko";
zaposlenik[2] = "Ivana";
document.write(zaposlenik[1]);
</script>
</body>
</html>
114
Primer 17.
<html>
<head>
<title> Primer nesortiranog niza </title>
</head>
<body>
<script type="text/javascript">
<!--
var myArray = new Array();
myArray[0] = "Cricket";
myArray[1] = "Baseball";
myArray[2] = "Football";
document.write(myArray[0]+ "<br>" + myArray[1] + "<br>" + myArray[2]);
//-->
</script>
</body>
</html>
115
Primer 18.
<html>
<body>
<title> Primer sortiranog niza </title>
<script type="text/javascript">
<!--
var myArray = new Array();
myArray[0] = "Cricket";
myArray[1] = "Baseball";
myArray[2] = "Football";
myArray.sort();
document.write(myArray[0]+ "<br>" + myArray[1] + "<br>" + myArray[2]);
//-->
</script>
</body>
</html>
116
AJAX
• AJAX može:
– Izmeniti web stranu bez ponovnog učitavanja
– Zahtevati podatke od servera - posle loadovanja
strane
– Primanje podataka od servera - neposredno posle
loadovanja strane
– Slati podatke serveru – u pozadini
Šta je AJAX
• AJAX = Asynchronous JavaScript And XML.
– AJAX nije programski jezik.
– AJAX samo koristi kombinaciju:
• browser XMLHttpRequest objekat (koji zahteva podatke od web servera)
• JavaScript i HTML DOM (za prikaz ili korišćenje dobijenih podatak)
• AJAX omogućava web stranama da se asinhrono ažuriraju
razmenom podataka sa web serverom iza scene, tj. u pozadini.
• To znači da je moguće update delova web strane, bez
ponovnog učitavanja cele web strane.
Kako AJAX radi
1. Događaj se dešava na veb stranici (stranica se učitava, dugme je kliknuto)
2. JavaScript kreira XMLHttpRequest objekat
3. XMLHttpRequest objekt šalje zahtev web serveru
4. Server obrađuje zahtev
5. Server šalje odgovor nazad veb strani
6. JavaScript čita poslati odgovor
7. JavaScript ažurira stranu
AJAX - The XMLHttpRequest Object
• Svi moderni pretraživači (Chrome, IE7+, Firefox, Safari, and
Opera) podržavaju XMLHttpRekuest objekat.
• Objekat XMLHttpRekuest se koristi za razmenu podataka sa
serverom, iza scene. To znači da je moguće ažuriranje delova veb
stranice, bez ponovnog učitavanja cele stranice.
variable = new XMLHttpRequest();
• Starije verzije Internet Explorera (IE5 i IE6) koriste ActiveX
Object.
XMLHttpRequest Object Metode
Method Description
new XMLHttpRequest() Creates a new XMLHttpRequest object
abort() Cancels the current request
getAllResponseHeaders() Returns header information
getResponseHeader() Returns specific header information
open(method, url, async, user, Specifies the request
psw)
method: the request type GET or POST
url: the file location
async: true (asynchronous) or false (synchronous)
user: optional user name
psw: optional password
Method Description
open(method, url, async) Specifies the type of request
method: the type of request: GET or POST
url: the server (file) location
async: true (asynchronous) or false (synchronous)
Method Description
setRequestHeader(header, value) Adds HTTP headers to the request
header: specifies the header name
value: specifies the header value
URL u open() metodi
• URL predstavlja, zapravo, fajl koji se nalazi na serveru.
• Slanje asinhronog zahteva je veliki napredak za veb developere. Mnogi od
poslova koji se obavljaju na serveru traju dugo.
• Slanjem asinhrono, JavaScript ne mora da sačeka odgovor servera, već može
umesto toga da:
– obavlja i druge skripte čekajući odgovora server
– podeli odgovor kada bude spreman
• Kada koristite asinc = true, identifikujemo funkciju za izvršenje kada je odgovor
spreman u onreadystatechange događaju.
• Korišćenje asinc = false se ne preporučuje, ali za nekoliko manjih zahteva to
može biti u redu.
AJAX - Server Response
• Svojstva readyState nosi status XMLHttpRequest objekta.
• Svojstvo onreadystatechange definiše funkciju koja će se izvršiti
kada se readyState promeni.
• Svojstva status i statusText nose status XMLHttpRequest objekta.
AJAX - Server Response
Property Description
onreadystatechange Defines a function to be called when the readyState property changes
Method Description
getResponseHeader() Returns specific header information from the server resource
getAllResponseHeaders Returns all the header information from the server resource
()
ResponseText Property
• Svojstvo responseText vraća odgovor servera kao JavaScript string
<div id="demo">
<h1>The XMLHttpRequest Object</h1>
<button type="button" onclick="loadDoc()">Change Content</button>
</div>
<script>
function loadDoc() {
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
document.getElementById("demo").innerHTML =
this.responseText;
}
};
xhttp.open("GET", "ajax_info.txt", true);
xhttp.send();
}
</script>
getAllResponseHeaders() i
getResponseHeader() metode
• getAllResponseHeaders() metod vraća sve header informacije odgovora
koji šalje server, dok getResponseHeader() metod vraća specifične header
informacije odgovora koji šalje server.
<p id="demo"></p>
<script>
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
document.getElementById("demo").innerHTML =
this.getAllResponseHeaders();
}
};
xhttp.open("GET", "ajax_info.txt", true);
xhttp.send();
</script>
AJAX I baze podataka
• Sledeći primer demonstrira kako veb strana može prikazati
informacije iz baze korišćenjem AJAX-a
Objašnjenje
• Izgled baze podataka
id FirstName LastName Age Hometown Job
1 Peter Griffin 41 Quahog Brewery
2 Lois Griffin 40 Newport Piano
Teacher
3 Joseph Swanson 39 Quahog Police Officer
4 Glenn Quagmire 41 Quahog Pilot
Rešenje
<html>
<head>
<script>
function showUser(str) {
if (str == "") {
document.getElementById("txtHint").innerHTML = "";
return;
} else {
// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
document.getElementById("txtHint").innerHTML = this.responseText;
}
};
xmlhttp.open("GET","getuser.php?q="+str,true);
xmlhttp.send();
}
}
</script>
</head>
<body>
Rešenje
<form>
<select name="users" onchange="showUser(this.value)">
<option value="">Select a person:</option>
<option value="1">Peter Griffin</option>
<option value="2">Lois Griffin</option>
<option value="3">Joseph Swanson</option>
<option value="4">Glenn Quagmire</option>
</select>
</form>
<br>
<div id="txtHint"><b>Person info will be listed here...</b></div>
</body>
</html>
Objašnjenje
• Prvo se proverava da li je osoba selektovana. Ako nije
selektovana (str == ""), obriši sadržaj txtHint-a i izađi iz
funkcije. Ako je osoba selektovana, uradi sledeće:
– KreirajXMLHttpRequest object
– Kreiraj funkciju koja će se izvršiti kada bude spreman odgovor
servera.
– Pošalji zahtev za fajlom koji se nalazi na serveru
– Naznači da će parameter (q) biti poslat preko URL (sadržaj
dropdown liste)
getuser.php
<?php
$q = intval($_GET['q']);
$con = mysqli_connect('localhost','peter','abc123','my_db');
if (!$con) {
die('Could not connect: ' . mysqli_error($con));
}
mysqli_select_db($con,"ajax_demo");
$sql="SELECT * FROM user WHERE id = '".$q."'";
$result = mysqli_query($con,$sql);
echo "<table>
while($row = mysqli_fetch_array($result)) {
<tr>
echo "<tr>";
<th>Firstname</th>
echo "<td>" . $row['FirstName'] . "</td>";
<th>Lastname</th>
echo "<td>" . $row['LastName'] . "</td>";
<th>Age</th>
echo "<td>" . $row['Age'] . "</td>";
<th>Hometown</th>
echo "<td>" . $row['Hometown'] . "</td>";
<th>Job</th>
echo "<td>" . $row['Job'] . "</td>";
</tr>";
echo "</tr>";
}
echo "</table>";
mysqli_close($con);
?>
Objašnjenje
• Kada je upit poslat od JavaScript-a prema PHP fajlu
dešavaju se sledeće stvari:
– PHP otvara konekciju sa MySQL serverom
– Pronalazi se odgovarajuća osoba na osnovu poslate vrednosti
promenljive q, koja se šalje GET metodom
– HTML tabela se kreira, puni se podacima za odabranog
korisnika i šalje se nazad u "txtHint" div
JSON
JSON
• JSON: JavaScript Object Notation.
• JSON predstavlja sintaksu za za skladištenje I razmenu
podataka
• JSON je tekst, pisan sa JavaScript object notacijom.
• JSON koristi JavaScript sintaksu, ali JSON format je
zapravo samo tekst
• Tekst je format podataka koji može biti korišćen od
strane bilo kog programskog jezika
JSON
• Prilikom razmene podataka između browsera i servera podaci
su samo u vidu teksta.
• JSON je tekst i možemo konverotivati bilo koji JavaScript
objekt u JSON i onda JSON poslati serveru.
• Takođe je moguće konverovati JSON odgovor servera u
JavaScript objekte.
• Na ovaj način možemo manipulisati podacima kao JavaScript
objektima bez komplikovanog parsiranja i prenosa.
Slanje i primanje podataka
• Podatke skladištene u JavaScript objektu je moguće konvertovati
u JSON i poslati serveru.
var myObj = { "name":"John", "age":31, "city":"New York" };
var myJSON = JSON.stringify(myObj);
window.location = "demo_json.php?x=" + myJSON;
//Retrieving data:
text = localStorage.getItem("testJSON");
obj = JSON.parse(text);
document.getElementById("demo").innerHTML = obj.name;
Zašto koristiti JSON
• JavaScript ima ugrađene funkcije za konvertovanje JSON
stringa u JavaScript objekte:
– JSON.parse()
• Dakle, ako primate podatke od servera u JSON format-u,
moguće ga je koristiti u vidu bilo kog drugog JavaScript
objekta
JSON sintaksa
• JSON sintaksa je izvedena iz sintakse
JavaScript object notacije:
– Podaci su u vidu parova name/value
– Podaci su odvojeni zarezom
– Podaci su oivičeni vitičastom zagradama {}
– Uglaste zagrade se koriste kod nizova
JSON podaci
• JSON podaci se pišu u vidu praova name-value
• Name-velue parovi sastoje se od imena polja, pod dvostrukim
navodnicima, zatim idu dve tačke, pa vrednost, takođe pod dvostrukim
navodnicima.
"name":"John“
• Polje name je u JSON oivičeno dvostrukim navodnicima, dok u JavaScript-
u nisu.
– JSON: jsonObj = { "name":"John", "age":31, "city":"New York" };
– JavaScript: jsObj = { name:"John", age:31, city:"New York" };
• U JSON, name mora biti string, oivičen dvostrukim navodnicima, dok u
JavaScript-u, name može biti string ili broj
JSON fajlovi
• Ekstenzija JSON fajla je ".json“
• MIME tip za JSON text je "application/json"
JSON tipovi podataka
• JSON, vredsnoti moraju imati jedan od sledećih tipova podataka:
– string
– number
– object (JSON object)
– array
– boolean
– null
• JSON vrednosti ne mogu imatei jedan od sledećih tipova podataka:
– a function
– a date
– undefined
JSON tipovi podataka
• JSON string mora biti sa dvostrukim navodnicima
{ "name":"John" }
• JSON broj mora biti tipa int ili float
{ "age":30 }
• JSON object
{
"employee":{ "name":"John", "age":30, "city":"New York" }
}
• JSON nizovi
{
"employees":[ "John", "Anna", "Peter" ]
}
JSON tipovi podataka
• JSON bolean, vrednosti mogu bititrue ili
false
{ "sale":true }
• JSON null
{ "middlename":null }
Pristup vrednostima objekta
• Možete pristupiti svojstvima (vrednostima) objekta koristeći tačku(.):
myObj = { "name":"John", "age":30, "car":null };
x = myObj.name;
• Vrednstima objekta je moguće pristupiti i koristeći uglaste zagrade([])
myObj = { "name":"John", "age":30, "car":null };
x = myObj["name"];
• Moguće svojstva objekta provući kroz petlju koristeći for-in petlju:
<p id="demo"></p>
<script>
var myObj = { "name":"John", "age":30, "car":null };
for (x in myObj) {
document.getElementById("demo").innerHTML += x + "<br>";
}
</script>
Pristup vrednosti objekta
• U for-in petlji je moguće pristupiti i
svojstvima vrednost, koja se nalaze u
parovima
<p id="demo"></p>
<script>
var myObj = { "name":"John", "age":30, "car":null };
for (x in myObj) {
document.getElementById("demo").innerHTML += myObj[x] + "<br>";
}
</script>
Pristup vrednosti objekta
• Vrednosti u JSON objektu mogu sadržati i druge objekte
myObj = {
"name":"John",
"age":30,
"cars": {
"car1":"Ford",
"car2":"BMW",
"car3":"Fiat"
}
}
• Pristup grupi objekata je moguć:
document.getElementById("demo").innerHTML += myObj.cars.car2 + "<br>";
//or:
document.getElementById("demo").innerHTML += myObj.cars["car2"];
Modifikovanje JSON vrednosti
• Moguće je koristiti tačka notaciju da
modifikujemo bilo koju vrednostu JSON
objwektu
myObj.cars.car2 = "Mercedes"; ili
myObj.cars["car2"] = "Mercedes";
• Brisanje vrednosti objekta
– delete myObj.cars.car2;
Nizovi kao JSON objekti
• Primer [ "Ford", "BMW", "Fiat" ]
• Nizovi u JSON su skoro isti kao nizovi u JavaScript-u.
• U JSON, vrednosti mogu biti tipa string, niz, objekat,
boolean or null.
• U JavaScript-u vrednosti elemenata niza mogu biti sve
navedeno u JSON-u plus bilo koji drugi validan
JavaScript izraz, uključujući funkcije, datume i
nedefinisani tip.
Nizovi kao JSON objekti
• Nizovi mogu imati elemente čije su vrednosti svojstva JSON objekta:
{
"name":"John",
"age":30,
"cars":[ "Ford", "BMW", "Fiat" ]
}
• Vrednostima niza možemo pristupiti koristeći broj indeks
x = myObj.cars[0];
• Vrednostima niza možemo pristupiti i for-in ili for petljom
for (i in myObj.cars) {
x += myObj.cars[i]; for (i = 0; i < myObj.cars.length; i++) {
} x += myObj.cars[i];
}
Ugnježdeni nizovi
• Vrednosti elemenata niza mogu biti i drugi nizovi ili čak drugi JSON
objekti:
myObj = {
"name":"John",
"age":30,
"cars": [
{ "name":"Ford", "models":[ "Fiesta", "Focus", "Mustang" ] },
{ "name":"BMW", "models":[ "320", "X3", "X5" ] },
{ "name":"Fiat", "models":[ "500", "Panda" ] }
]
}
Ugnježdeni nizovi
• Pristup ugnježdenom nizu je moguć for-in petljom
for (i in myObj.cars) {
x += "<h1>" + myObj.cars[i].name + "</h1>";
for (j in myObj.cars[i].models) {
x += myObj.cars[i].models[j];
}
}
• Modifikovanje vrednosti niza je moguće na sledeći način
myObj.cars[1] = "Mercedes";
• Brisanje elementa niza je moguće na sledeći način:
delete myObj.cars[1];
Parsiranje
• JSON se često koristi za razmenu podataka od/do veb servera.
• Podaci poslati od veb servera su uvek tipa string.
• Parsiranje podataka se vrši sa metodom JSON.parse(), i tada podaci postaju JavaScript
objekti.
• Pretpostavimo da je poslat sledeći tekst od strane veb servera
'{ "name":"John", "age":30, "city":"New York"}’
• Tekst se konvertuje u JavaScript objekat metodom parse(). Korišćenje JavaScript objekta
na na strani klijenta se vrši:
<p id="demo"></p>
<script>
var obj = JSON.parse('{ "name":"John", "age":30, "city":"New York"}');
document.getElementById("demo").innerHTML = obj.name + ", " + obj.age;
</script>
JSON poslat od servera
• Moguće je zahtevati JSON od veb servera korišćenjem AJAX zahteva.
• Odgovor od servera napisan u JSON formatu je moguće parsirati iz stringa u
JavaScript objekat.
• Korišćenje XMLHttpRequest za preuzimanje podataka od veb servera:
<p id="demo"></p>
<script>
var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
myObj = JSON.parse(this.responseText);
document.getElementById("demo").innerHTML = myObj.name;
}
};
xmlhttp.open("GET", "json_demo.txt", true);
xmlhttp.send();
</script>
Niz kao JSON
• Kada koristimo JSON.parse() na JSON dobijen od
niza, metod će vratiti JavaScript niz, umesto
JavaScript objekta.
<p id="demo"></p>
<script>
var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
myArr = JSON.parse(this.responseText);
document.getElementById("demo").innerHTML = myArr[0];
}
};
xmlhttp.open("GET", "json_demo_array.txt", true); ["Ford", "BMW", "Audi", "Fiat"]
xmlhttp.send();
</script>
Izuzeci
• Datum objekti nisu dozvoljeni u JSON.
• Ako treba uključiti datum napisaćemo ga kao
string.
• Kasnije ga možemo vratiti u objekat datum.
<p id="demo"></p>
<script>
var text = '{ "name":"John", "birth":"1986-12-14", "city":"New York"}';
var obj = JSON.parse(text);
obj.birth = new Date(obj.birth);
document.getElementById("demo").innerHTML = obj.name + ", " + obj.birth;
</script>
Parsiranje funkcija
• Funkcije nisu dozvoljene u JSON.
• Ako je potrebno uključiti funkcije potrebno ih je
ispsati kao string.
• Kasnije string možemo konvertova u funkciju
nazad.
<p id="demo"></p>
<script>
var text = '{ "name":"John", "age":"function() {return 30;}", "city":"New York"}';
var obj = JSON.parse(text);
obj.age = eval("(" + obj.age + ")");
document.getElementById("demo").innerHTML = obj.name + ", " + obj.age();
</script>
Browser Support
• JSON.parse() funkcija je uključena u sve
velike browsere :
– Firefox 3.5
– Internet Explorer 8
– Chrome
– Opera 10
– Safari 4
JSON.stringify()
• Podaci koji se šalju prema veb serveru moraju biti tipa string.
• Pretvaranje JavaScript objekta u niz se vrši JSON.stringifi () metodom.
• Ako imamo JavaScript objekat
var obj = { "name":"John", "age":30, "city":"New York"};
• Konvertovanje ovog objekta u string ćemo obaviti metodom JSON.stringify
var myJSON = JSON.stringify(obj);
• Primer
<p id="demo"></p>
<script>
var obj = { "name":"John", "age":30, "city":"New York"};
var myJSON = JSON.stringify(obj);
document.getElementById("demo").innerHTML = myJSON;
</script>
Stringify JavaScript niz
• Moguće je primetiti metodu stringfy() i na niz.
• Ako imamo niz
var arr = [ "John", "Peter", "Sally", "Jane" ];
• Korišćenjem JavaScript funkcije JSON.stringfy
konvertovaćemo niz u string var myJSON = JSON.stringify(arr);
<p id="demo"></p>
<script>
var arr = [ "John", "Peter", "Sally", "Jane" ];
var myJSON = JSON.stringify(arr);
document.getElementById("demo").innerHTML = myJSON;
</script>
Stringify datum
• U JSON, objekat datum nije dozvoljen. JSON.stringify()
function konvertuje bilo koji datum u string.
<p id="demo"></p>
<script>
var obj = { "name":"John", "today":new Date(),
"city":"New York"};
var myJSON = JSON.stringify(obj);
document.getElementById("demo").innerHTML =
myJSON;
</script>
Stringify funkcije
• U JSON-u funkcije nisu podržane kao vrednosti objekta.
• JSON.stringify() funkcija će obrisati bilo koju funkciju koja se
nalazi u JavaScript objektu, i ključ i vrednost:
<p id="demo"></p>
<script>
var obj = { "name":"John", "age":function () {return 30;}, "city":"New
York"};
var myJSON = JSON.stringify(obj);
document.getElementById("demo").innerHTML = myJSON;
</script>
Stringify funkcije
• Ovo možemo izbeći ako funkciju konvertujemo u string pre
pokretanja funkcije JSON.stringify().
<p id="demo"></p>
<script>
var obj = { "name":"John", "age":function () {return 30;}, "city":"New York"};
obj.age = obj.age.toString();
var myJSON = JSON.stringify(obj);
document.getElementById("demo").innerHTML = myJSON;
</script>
$("#p1").mousedown(function(){
alert("Mouse down over p1!");
});
Najčešće korišćene jQuery metode događaja
<script
src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jqu
ery.min.js"></script>
<script>
$(document).ready(function(){
$("#p1").mousedown(function(){
alert("Mouse down over p1!");
});
});
</script>
</head>
<body>
<p id="p1">This is a paragraph.</p>
</body>
Najčešće korišćene jQuery metode događaja
$("#p1"). mouseup(function(){
alert("Mouse down over p1!");
});
Najčešće korišćene jQuery metode događaja
<script
src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jqu
ery.min.js"></script>
<script>
$(document).ready(function(){
$("#p1").mouseup(function(){
alert("Mouse down over p1!");
});
});
</script>
</head>
<body>
<p id="p1">This is a paragraph.</p>
</body>
Najčešće korišćene jQuery metode događaja
<button>Show Value</button>
</body>
attr()
• jQuery attr() metoda se koristi za dobijanje
vrednosti atributas.
• Sledeći primer demonstrira kako dobiti vrednost
href atributa linka.
$("button").click(function(){
alert($("#w3s").attr("href"));
})
attr()
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<script>
$(document).ready(function(){
$("button").click(function(){
alert($("#w3s").attr("href"));
});
});
</script>
</head>
<body>
<p><a href="https://www.w3schools.com" id="w3s">W3Schools.com</a></p>
<button>Show href Value</button>
</body>
jQuery - Postavljanje sadržaja I atributa
$("#btn2").click(function(){
$("img").after("<i>After</i>");
});
});
</script>
</head>
<body>
<img src="/images/w3jquery.gif" alt="jQuery" width="100" height="140"><br><br>
<button id="btn1">Insert before</button>
<button id="btn2">Insert after</button>
</body>
after() i before() metode
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.0/jquery.min.js"></script>
<script>
function afterText() {
var txt1 = "<b>I </b>"; // Create element with HTML
var txt2 = $("<i></i>").text("love "); // Create with jQuery
var txt3 = document.createElement("b"); // Create with DOM
txt3.innerHTML = "jQuery!";
$("img").after(txt1, txt2, txt3); // Insert new elements after img
}
</script>
</head>
<body>
<img src="/images/w3jquery.gif" alt="jQuery" width="100" height="140">
<p>Click the button to insert text after the image.</p>
<button onclick="afterText()">Insert after</button>
</body>
jQuery - brisanje elemenata
• Brisanje elemenata i sadržaja:
– remove() – Briše selektovani element (i njegove
child elemente)
– empty() – briše child elemente selektovanog
elementa
remove() metode
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<script>
$(document).ready(function(){
$("button").click(function(){
$("#div1").remove();
});
});
</script>
</head>
<body>
<div id="div1" style="height:100px;width:300px;border:1px solid black;background-color:yellow;">
This is some text in the div.
<p>This is a paragraph in the div.</p>
<p>This is another paragraph in the div.</p>
</div>
<br>
<button>Remove div element</button>
</body>
remove() metode
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.0/jquery.min.js"></script>
<script>
$(document).ready(function(){
$("button").click(function(){
$("#div1").empty();
});
});
</script>
</head>
<body>
<div id="div1" style="height:100px;width:300px;border:1px solid black;background-color:yellow;">
This is some text in the div.
<p>This is a paragraph in the div.</p>
<p>This is another paragraph in the div.</p>
</div>
<br>
<button>Empty the div element</button>
</body>
Filtriranje elemenata koji će biti obrisani
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.0/jquery.min.js"></script>
<script>
$(document).ready(function(){
$("button").click(function(){
$("p").remove(".test, .demo");
});
});
</script>
<style>
.test {
color: red;
font-size: 20px;
}
.demo {
color: green;
font-size: 25px;
}
</style></head><body>
<p>This is a paragraph.</p>
<p class="test">This is p element with class="test".</p>
<p class="test">This is p element with class="test".</p>
<p class="demo">This is p element with class="demo".</p>
<button>Remove all p elements with class="test" and class="demo"</button>
</body>
Manipulacija CSS-om
• jQuery metode za manipulaciju CSS-om. :
– addClass() – Dodavanje jedne ili više klasa selektovanom
elementu.
– removeClass() – Brisanje jedne ili više klasa
selektovanog elementy.
– toggleClass() - Uključivanje dodavanja/brisanja class-a
selektovanih elemenata
– css() – Postavljanje ili vraćanje stilova atributa
Dodavanje class-e elementu
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.0/jquery.min.js"></script>
<script>
$(document).ready(function(){
$("button").click(function(){
$("h1, h2, p").addClass("blue");
$("div").addClass("important");
});
});
</script>
<style>
.important {
font-weight: bold;
font-size: xx-large;
}
.blue {
color: blue;
}
</style></head><body>
<h1>Heading 1</h1>
<h2>Heading 2</h2>
<p>This is a paragraph.</p>
<p>This is another paragraph.</p>
<div>This is some important text!</div><br>
<button>Add classes to elements</button>
</body>
Dodavanje više class-a elementu
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.0/jquery.min.js"></script>
<script>
$(document).ready(function(){
$("button").click(function(){
$("#div1").addClass("important blue");
});
});
</script>
<style>
.important {
font-weight: bold;
font-size: xx-large;
}
.blue {
color: blue;
}
</style>
</head>
<body>
<div id="div1">This is some text.</div>
<div id="div2">This is some text.</div>
<br>
<button>Add classes to first div element</button>
</body>
Brisanje class-e elementu
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.0/jquery.min.js"></script>
<script>
$(document).ready(function(){
$("button").click(function(){
$("h1, h2, p").removeClass("blue");
});
});
</script>
<style>
.important {
font-weight: bold;
font-size: xx-large;
}
.blue {
color: blue;
}
</style>
</head>
<body>
<h1 class="blue">Heading 1</h1>
<h2 class="blue">Heading 2</h2>
<p class="blue">This is a paragraph.</p>
<p>This is another paragraph.</p>
<button>Remove class from elements</button>
</body>
toggleClass()
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.0/jquery.min.js"></script>
<script>
$(document).ready(function(){
$("button").click(function(){
$("h1, h2, p").toggleClass("blue");
});
});
</script>
<style>
.blue {
color: blue;
}
</style>
</head>
<body>
<h1>Heading 1</h1>
<h2>Heading 2</h2>
<p>This is a paragraph.</p>
<p>This is another paragraph.</p>
<button>Toggle class</button>
</body>
Vraćanje css() svojstva
• css() metoda postavlja ili vraća jedno ili više stil
svojstava koja se odnose na selektovani element.
css("propertyname");