javascript

Upload: kodar-sticko

Post on 09-Jan-2016

11 views

Category:

Documents


0 download

DESCRIPTION

IT

TRANSCRIPT

  • Osnove JavaScripta C500

    prirunik za polaznike 2005 Srce

  • Ovu inaicu prirunika izradio je autorski tim Srca u sastavu:

    Autor: Denis Staner

    Recenzent: Mario Ljolje

    Urednik: Vladimir Braus

    Sveuilite u Zagrebu

    Sveuilini raunski centar

    Josipa Marohnia 5, 10000 Zagreb

    [email protected]

    ISBN:978-953-7138-40-0 (meki uvez)

    ISBN: 978-953-7138-41-7 (PDF)

    Verzija prirunika C500-20141203

    Ovo djelo dano je na koritenje pod licencom Creative Commons

    Imenovanje-Nekomercijalno-Dijeli pod istim uvjetima 4.0 meunarodna.

    Licenca je dostupna na stranici:

    http://creativecommons.org/licenses/by-nc-sa/4.0/.

  • Sadraj

    1. TO JE JAVASCRIPT? .............................................................................................................................................. 7

    1.1. IME JAVASCRIPT ...................................................................................................................................................... 7 1.2. DOCUMENT OBJECT MODEL U JAVASCRIPTU......................................................................................................... 7 1.3. KOMPATIBILNOST PREGLEDNIKA ............................................................................................................................. 9 1.4. POVIJEST JAVASCRIPTA ........................................................................................................................................ 11 1.5. SKRIPTNI JEZICI ..................................................................................................................................................... 11 1.6. SIGURNOST ............................................................................................................................................................ 13

    2. UPOZNAVANJE S JEZIKOM .................................................................................................................................. 14

    2.1. NAIN PISANJA ....................................................................................................................................................... 14 2.1.2 Velika i mala slova........................................................................................................................................ 14 2.1.3. Kraj naredbe ................................................................................................................................................. 14 2.1.4. Komentari ..................................................................................................................................................... 14 2.1.5. Varijable ........................................................................................................................................................ 15

    2.2. UKLJUIVANJE JAVASCRIPTA U HTML DOKUMENT .............................................................................................. 16 2.2.1. U HTML dokumentu .................................................................................................................................... 16 2.2.2. JavaScript u zasebnoj datoteci ................................................................................................................. 17 2.2.3. Obrada dogaaja ......................................................................................................................................... 18 2.2.4. JavaScript u URLu ...................................................................................................................................... 18

    2.3. POGREKE ............................................................................................................................................................. 19

    3. VARIJABLE I OBJEKTI ............................................................................................................................................ 21

    3.1. VRSTE PODATAKA .................................................................................................................................................. 21 3.1.1. Brojevi ........................................................................................................................................................... 21 3.1.2. Nizovi znakova ............................................................................................................................................. 22 3.1.3. Logike vrijednosti ....................................................................................................................................... 23 3.1.4. Nizovi ............................................................................................................................................................ 23 3.1.5. Nepostojea i nedefinirana vrijednost ...................................................................................................... 24

    3.2. VARIJABLE.............................................................................................................................................................. 24 3.3. OBJEKTI ................................................................................................................................................................. 25

    4. OPERATORI ................................................................................................................................................................ 27

    4.1. ARITMETIKI OPERATORI ....................................................................................................................................... 27 4.2. OPERATOR PRIDRUIVANJA ................................................................................................................................... 27 4.3. OPERATORI USPOREIVANJA ................................................................................................................................ 28 4.4. LOGIKI OPERATORI .............................................................................................................................................. 29 4.5. OPERATOR SPAJANJA ............................................................................................................................................ 29

    5. FUNKCIJE ................................................................................................................................................................... 33

    5.1. DEFINIRANJE FUNKCIJE ......................................................................................................................................... 33 5.2. POZIV FUNKCIJE ..................................................................................................................................................... 34

    6. NAREDBE ZA KONTROLU TIJEKA ...................................................................................................................... 35

    6.1. UVJETNO IZVOENJE NAREDBI .............................................................................................................................. 35 6.2. VIESTRUKA USPOREDBA ...................................................................................................................................... 35 6.3. UVJETNI OPERATOR ............................................................................................................................................... 36 6.4. PETLJA S UVJETOM NA POETKU .......................................................................................................................... 37 6.5. PETLJA S UVJETOM NA KRAJU ............................................................................................................................... 37 6.6. KLASINA PETLJA .................................................................................................................................................. 37

    7. OBRASCI .................................................................................................................................................................... 40

    7.1. PRVI OBRAZAC ....................................................................................................................................................... 40 7.2. UNOS KRAIH NIZOVA ZNAKOVA ............................................................................................................................ 41 7.3. ODABIR JEDNE OD MOGUNOSTI ........................................................................................................................... 43 7.4. UKLJUIVANJE I ISKLJUIVANJE JEDNE MOGUNOSTI .......................................................................................... 45

  • Osnove JavaScripta

    T E A J E V I s r c a 4

    7.5. ODABIR JEDNE OD MOGUNOSTI NA DRUGI NAIN................................................................................................ 46

    8. KORISNE SKRIPTE .................................................................................................................................................. 52

    8.1. ROLLOVER ............................................................................................................................................................. 52 8.2. VRSTA PREGLEDNIKA ............................................................................................................................................. 53 8.3. PREUSMJERAVANJE ............................................................................................................................................... 55 8.4. PROVJERA POMOU REGULARNIH IZRAZA ............................................................................................................ 55 8.5. UPRAVLJANJE PREGLEDNIKOM .............................................................................................................................. 58 8.6. VJEBE ................................................................................................................................................................... 61

    DODATAK ....................................................................................................................................................................... 63

    OPERATORI ................................................................................................................................................................... 63 NIZOVI............................................................................................................................................................................ 64 DATUMI .......................................................................................................................................................................... 65 MATEMATIKE FUNKCIJE ............................................................................................................................................... 66 DOGAAJI ...................................................................................................................................................................... 67

  • Osnove JavaScripta

    T E A J E V I s r c a 5

    Uvod

    U okviru ovog teaja upoznat ete se s osnovama programiranja u JavaScriptu. Teaj je namijenjen autorima HTML dokumenata koji ele uvesti interaktivne elemente u svoje dokumente.

    Za uspjeno praenje teaja JavaScripta potrebno je predznanje u ureivanju HTML dokumenata te poeljna su osnovna znanja iz programiranja.

    Ovaj se prirunik sastoji od jedanaest poglavlja koja e detaljno biti obraena tijekom dva dana, pet kolskih sati dnevno.

    Savjeti i upozorenja istaknuti su u okvirima s desne strane stranice.

  • Osnove JavaScripta

    T E A J E V I s r c a 6

  • Osnove JavaScripta

    T E A J E V I s r c a 7

    1. to je JavaScript?

    JavaScript je lagan, interpretiran programski jezik namijenjen ponajprije razvoju interaktivnih HTML stranica. Jezgra JavaScripta ukljuena je u veinu dananjih preglednika (Netscape, Internet Explorer, Mozilla, Firefox, Opera).

    1.1. Ime JavaScript

    JavaScript omoguuje izvravanje odreenih radnji u inae statinim HTML dokumentima, npr. interakciju s korisnikom, promjenu svojstava preglednikova prozora i dinamiko stvaranje HTML sadraja.

    JavaScript nije pojednostavljena inaica programskog jezika Java. Povezuje ih jedino slina sintaksa i to se koriste za izvravanje odreenih radnji unutar preglednika. Izvorno se JavaScript trebao zvati LiveScript, ali kako bi se potakla uporaba novog skriptnog jezika nazvan je slino jeziku koji je mnogo obeavao na internetu.

    JavaScript i Java se nadopunjuju: JavaScript moe utjecati na preglednik i HTML sadraj (Java ne moe utjecati na preglednik), ali ne moe iscrtavati sloeni grafiki sadraj, izvravati mrene programe i vienitnost, to Java moe.

    1.2. Document Object Model u JavaScriptu

    Document Object Model (DOM) je suelje za programiranje aplikacija za opis dokumenata (npr. HTML) te pristup i rukovanje njegovim dijelovima (npr. elementi u HTML dokumentu).

    JavaScript definira svoj DOM kao:

    elements[ ]

    button

    checkbox

    fileupload

    hidden

    password

    radio

    select

    submit

    text

    textarea

    document

    anchors[

    forms[ ]

    links[ ]

    images[ ]

    applets[ ] options[ ] window

  • Osnove JavaScripta

    T E A J E V I s r c a 8

    Svakom objektu ili svojstvu pristupa se kroz ovaj model, tj. document je

    osnovni objekt preko kojega se pristupa svima ostalim objektima dokumenta. Na primjer u dokumentu:

    vrijednosti polja ime se pristupa kao:

    Vidljivo je da je tekstualni objekt prvi u nizu elemenata koji se nalaze u prvom obrascu. Da bi se programiranje pojednostavilo, omogueno je imenovanje pojedinih objekata. Na primjer, sljedeim kodom moe se popraviti gornji dokument:

    Vrijednosti polja, u tom sluaju, pristupamo na znatno jednostavniji nain:

    Objekt window takoer je vaan objekt, pomou kojega se upravlja prozorom preglednika. U jednom od primjera detaljnije e se obraditi uporaba window objekta.

    Unesite ime:

    document.forms[0].elements[0].value

    Unesite ime:

    document.frm_a.ime.value

  • Osnove JavaScripta

    T E A J E V I s r c a 9

    1.3. Kompatibilnost preglednika

    JavaScript se moe pisati u bilo kojem tekst (ASCII) editoru. Blok za pisanje (Notepad) prisutan je u svim inaicama Windowsa pa se namee kao pogodan i za programiranje u JavaScriptu. Kako bi se programiranje ubrzalo i uinilo uinkovitijim poeljno je rabiti editor koji razlikuje dijelove koda te ih prikazuje u razliitim bojama (bojanje sintakse), automatsko poravnavanje i otvaranje vie dokumenata unutar jednog prozora.

    Na isti se nain Internet Explorer namee kao razvojna platforma za JavaScript. Meutim IE jo ne podrava DOM u dovoljnoj mjeri:

    Preglednik JavaScript DOM mogunosti

    Netscape 2 JavaScript 1.0 Obrasci

    Netscape 3 JavaScript 1.1 Image rollover

    Netscape 4 JavaScript 1.2 DHTML pomou slojeva (layers)

    Netscape 4.5 JavaScript 1.3 DHTML pomou slojeva (layers)

    Netscape 6 / Mozilla

    JavaScript 1.5 Znatna podrka za W3C DOM standard; podrka za slojeve prekinuta

    IE 3 JScript 1.0/2.0 Obrasci

    IE 4 JScript 3.0 Rollover efekt; DHTML pomou document.all[]

    IE 5 JScript 5.0 DHTML pomou document.all[]

    IE 5.5 JScript 5.5 Djelomina podrka za W3C DOM standard

    IE 6 JScript 5.5 Djelomina podrka za W3C DOM standard; nedostaje podrka za W3C DOM dogaaje

    tovie u operacijskom sustavu Windows XP je od trenutka objave drugog paketa zakrpi (Service Pack 2) pootrena sigurnost pa se pri izvravanju JavaScripta pojavljuje poruka o blokiranom sadraju.

  • Osnove JavaScripta

    T E A J E V I s r c a 10

    Klikom na desni gumb mia te odabirom "Dopusti blokirani sadraj..." ("Allow Blocked Content") omogui se trenutano izvravanje JavaScripta bez upozorenja.

    Meutim, to vrijedi dok se ne zatvori IE. Nakon toga potrebno je ponoviti gore navedene radnje. Za trajno iskljuenje upozorenja za lokalno pohranjene JavaScript programe, potrebno je u Alati Internet Opcije Dodatno Sigurnost (Tools Internet Options Advanced Security) omoguiti Dopusti da se aktivni sadraj izvodi iz datoteka u mapi Moje raunalo (Allow active content to run in files on My Computer).

    Jedan je od alternativnih preglednika za razvoj JavaScript programa Mozilla Firefox, koji ima izvrstan JavaScript debuger, dobar DOM inspector te se pridrava DOM specifikacije.

  • Osnove JavaScripta

    T E A J E V I s r c a 11

    1.4. Povijest JavaScripta

    JavaScript se razvijao godinama i Netscape je objavio nekoliko inaica jezika. Microsoft je objavio jezik slian JavaScriptu pod imenom "JScript". ECMA (http://www.ecma.ch/) je objavila tri inaice standarda ECMA-262, koji standardizira JavaScript jezik pod imenom ECMAScript.

    U ovom priruniku pojam "JavaScript" oznaava bilo koju implementaciju jezika, ukljuujui i Microsoftov JScript.

    Inaica Opis

    JavaScript 1.0 Izvorna inaica jezika, bila je puna pogreaka. Implementiran u Netscape 2.

    JavaScript 1.1 Novi Array objekt; popravljene ozbiljne pogreke. Implementiran u Netscape 3.

    JavaScript 1.2 Nova switch naredba, regularni izrazi i drugo. Zamalo potuje ECMA v1 uz neke nekompatibilnosti. Implementiran u Netscape 4.

    JavaScript 1.3 Ispravljene nekompatibilnosti JavaScripta 1.2. Potuje ECMA v1. Implementiran u Netscape 4.5.

    JavaScript 1.4 Implementiran samo u Netscape posluiteljske proizvode.

    JavaScript 1.5 Uvedeno upravljanje iznimkama (exception handling). Potuje ECMA v3. Implementiran u Mozillu i Netscape 6.

    JScript 1.0 Okvirno ekvivalentan JavaScriptu 1.0. Implementiran u prve inaice IE 3.

    JScript 2.0 Okvirno ekvivalentan JavaScriptu 1.1. Implementiran u kasnije inaice IE 3.

    JScript 3.0 Okvirnoi ekvivalentan JavaScriptu 1.3. Potuje ECMA v1. Implementiran u IE 4.

    JScript 4.0 Nije implementiran ni u jedan preglednik.

    JScript 5.0 Podrano upravljanje iznimkama (exception handling). Djelomino potuje ECMA v3. Implementiran u IE 5.

    JScript 5.5 Okvirno ekvivalentan JavaScriptu 1.5. Potpuno potuje ECMA v3. Implementiran u IE 5.5 i IE 6. (IE 6 zapravo ima JScript 5.6, ali 5.6 nije bitno razliit od 5.5 za JavaScript programere koji piu za preglednike.)

    ECMA v1 Prva standardna inaica. Standardizirane su osnove JavaScripta 1.1 i dodano nekoliko novih mogunosti. Nije standardizirana switch naredba i regularni izrazi. Implementacije koje potuju ECMA v1 su JavaScript 1.3 i JScript 3.0.

    ECMA v2 Razvojna inaica koja nije donijela nove mogunosti ve je razjasnila dvosmislenosti.

    ECMA v3 Standardizirani switch naredba, regularni izrazi i upravljanje iznimkama.

    Implementacije koje potuju ECMA v3 su JavaScript 1.5 i JScript 5.5.

    1.5. Skriptni jezici

    Program koji obrauje i izvrava skripte zove se interpreter. Interpreter ita kd i prevodi ga u strojni jezik svaki put kada se pokrene skripta. Svaki jezik koji se interpretira, tj. koji izvrava interpreter, naziva se skriptni jezik. Interpreter za JavaScript ugraen je u veinu dananjih preglednika.

    Skriptni jezici se koriste jer je razvoj programa znatno jednostavniji. Za razliku od programa pisanih u "pravim" programskim jezicima nije potrebno prevoditi skripte u strojni jezik:

    Koraci kod programskih jezika Koraci kod skriptnih jezika

    1. Napisati ili popraviti program

    2. Prevesti program u strojni jezik

    3. Pokrenuti prevedeni program

    4. Za popravke ponoviti od koraka 1

    1. Napisati ili popraviti skriptu

    2. Pokrenuti interpreter

    3. Za popravke ponoviti od koraka 1

  • Osnove JavaScripta

    T E A J E V I s r c a 12

    HTML je jezik za opis dokumenata i nema dinaminih elemenata. Davno se ukazala potreba za uvoenjem dinaminog naina stvaranja HTML-a i stvaranja dinaminog (interaktivnog) sadraja u HTML-u.

    Danas postoji nekoliko tehnologija za svaku od gore navedenih naina "pokretanja" HTML-a.

    1. U prvoj skupini su jezici za dinamino stvaranje HTML-a, tj. same stranice zapisane su pomou nekog (obino skriptnog) jezika, koji interpretira posluitelj i alje korisniku "obian" HTML kd. Tipini su predstavnici ove skupine: ASP (Active Server Pages), PHP (PHP: Hypertext Preprocessor) i JSP (Java Server Pages).

    2. U drugoj skupini su Java, Flash i Shockvawe za iji je prikaz potreban vanjski program (plug-in) koji zna interpretirati ili izvoditi navedene programe. Kada je sadraj prikazan u pregledniku, on je dinamian i neovisan o "okolnom" HTML-u.

    3. U treoj skupini su tzv. klijentski, jer se njihov kd interpretira na klijentskoj strani, tj. u pregledniku (klijentu). Predstavnici su JavaScript te VBScript (prisutan samo u IE).

    Na primjer za PHP bi to bilo:

    PHP 39%, ASP 22%, JSP 11%, CGI 25%

    SERVER INTERNET

    HTML, JavaScript, VBScript

    JVM

    JAVA

    PREGLEDNIK

    HTML, JavaScript, Java, ...

    Java Virtual Machine

    PHP

    SERVER INTERNET

    HTML i JavaScript

    PREGLEDNIK

    HTML i JavaScript

    Postoji jo i stariji nain koji je koristio Common Gateway Interface iji je predstavnik jo jedan skriptni jezik: Perl. Danas se CGI sve rjee koristi.

  • Osnove JavaScripta

    T E A J E V I s r c a 13

    1.6. Sigurnost

    Kada god se programi (kao to su JavaScript skripte, Java programi ili Microsoft Word makroi) nalaze u odijeljenim dokumentima, osobito u dokumentima koji se alju putem Interneta, prisutna je opasnost od virusa ili nekih zloudnih programa. Tvorci JavaScripta su bili svjesni ovih sigurnosnih problema i onemoguili su JavaScript programima postupke koji bi za posljedicu imali brisanje ili izmjenu podataka na korisnikovom raunalu. Kao to je ve naglaeno, JavaScript programi ne mogu pristupati lokalnim datotekama, tj. ne mogu zaraziti neke druge datoteke ili brisati datoteke. Isto tako, JavaScript programi ne mogu obavljati mrene radnje, tj. JavaScript moe uitavati adrese web sadraja (URL) i slati podatke iz HTML obrazaca CGI skriptama i na e-mail adrese, ali ne moe ostvarivati neposredne veze s drugim raunalima i na taj nain pokuati pogoditi lozinku na nekom lokalnom posluitelju.

    Meutim, kako su preglednici sloeni programi, u poetku implementacija JavaScripta nije uvijek potivala standarde. Na primjer, Netscape 2 je omoguavao pisanje JavaScript programa koji je automatski dohvatio adresu elektronike pote bilo kojega posjetitelja odreene stranice i u njegovo ime, bez njegove potvrde, poslati bilo kakav e-mail. Ovaj je propust, uz niz drugih manje opasnih, popravljen, meutim ne postoji jamstvo da se nee otkriti novi propusti u implementaciji JavaScripta i na taj nain omoguiti zlonamjernicima iskoritavanje tih propusta.

    Saetak

    Prvo poglavlje daje osnovne podatke o JavaScriptu:

    to je JavaScript

    kako se razvijao JavaScript

    kako je JavaScript implemetiran u pojedine preglednike

    openito o skriptnim jezicima

    koliko je JavaScript siguran

  • Osnove JavaScripta

    T E A J E V I s r c a 14

    2. Upoznavanje s jezikom

    2.1. Nain pisanja

    JavaScript se moe pisati po Unicode standardu, no preporua se da se pie po ASCII standardu osim u komentarima i nizovima znakova.

    2.1.2 Velika i mala slova

    JavaScript je jezik osjetljiv na velika i mala slova!

    To znai da se kljune rijei, varijable, funkcije i ostala imena moraju pisati dosljedno s obzirom na velika i mala slova. Tako se na primjer kljuna rije mora pisati while, a ne kao While ili WHILE. Takoer, varijable stranaa, stranaA, StranaA i STRANAA etiri su razliite varijable.

    HTML, za razliku od JavaScripta, nije osjetljiv na velika i mala slova pa je potreban oprez. Naime, mnogi objekti i svojstva imaju jednaka imena kao HTML elementi i atributi. Dok se u HTML-u mogu biti pisati u bilo kojoj kombinaciji velikih i malih slova, u JavaScriptu svi takvi objekti i njihova svojstva moraju se pisati malim slovima, npr. dogaaj "onclick" se u HTML-u esto pie kao onClick, no u JavaScriptu on se mora pisati kao onclick.

    2.1.3. Kraj naredbe

    Toka-zarez rabi se u JavaScriptu za odvajanje naredbi. Toka-zarez nije obavezna, ali ju je preporuljivo uvijek pisati. Naime, JavaScript ubacuje toku-zarez na kraju retka ukoliko pojedini kd izgleda kao naredba, to u nekim situacijama nije ono to je programer htio. Na primjer kd

    JavaScript e interpretirati kao

    (dakle ubaena je toka-zarez na kraju retka), iako je programer htio

    2.1.4. Komentari

    JavaScript, podrava C++ i C komentare. Bilo koji tekst izmeu // i kraja retka smatra se komentarom. Bilo koji tekst izmeu znakova /* i */ je komentar i zanemaruje se. Druga vrsta komentara moe se protezati u vie redaka, ali se ne smiju ugnjeivati. Evo nekoliko ispravnih komentara:

    return

    true;

    return;

    true;

    return true;

  • Osnove JavaScripta

    T E A J E V I s r c a 15

    2.1.5. Varijable

    Nazivi varijabli i funkcija moraju zadovoljavati ovo pravilo: prvi znak imena mora biti slovo ili znak podcrta (_). Sljedei znakovi mogu biti slova, brojevi ili podcrta. Evo primjera ispravnih imena:

    Imena ne smiju biti jednaka kljunim rijeima. Tablica sadri popis kljunih rijei u JavaScriptu:

    break do if switch typeof

    case else in this var

    catch false instanceof throw void

    continue finally new true while

    default for null try with

    delete function return

    Ova se imena trenutano ne rabe u JavaScriptu, ali ECMAScript v3 standard navodi ih kao mogue kljune rijei u budunosti, pa bi njih trebalo izbjegavati:

    abstract double goto native static

    boolean enum implements package super

    byte export import private synchronized

    char extends int protected throws

    class final interface public transient

    const float long short volatile

    // Obian jednoretani komentar.

    /*

    * I ovo je komentar.

    * Koji se protee na vie redaka.

    */

    i

    moja_varijabla

    v13

    _privremena

  • Osnove JavaScripta

    T E A J E V I s r c a 16

    Takoer je potrebno izbjegavati imena globalnih varijabli i funkcija predefiniranih u JavaScriptu:

    arguments encodeURI Infinity Object String

    Array Error isFinite parseFloat SyntaxError

    Boolean escape isNaN parseInt TypeError

    Date eval Math RangeError undefined

    DecodeURI EvalError NaN ReferenceError

    unescape

    decodeURIComponent Function Number RegExp URIError

    2.2. Ukljuivanje JavaScripta u HTML dokument

    JavaScript se moe ukljuiti u HTML dokument na ove naine:

    pisanjem koda izmeu i tagova

    iz vanjske datoteke uporabom src atributa u tagu

    putem obrade dogaaja navedenog kao HTML atribut (npr. onclick ili onmouseover)

    u URL-u koji koristi poseban javascript: protokol.

    2.2.1. U HTML dokumentu

    Unutar HTML dokumenta JavaScript skripte piu se izmeu i tagova. Proizvoljan broj JavaScript naredbi obrauje se redom kojim su napisane, prilikom uitavanja HTML dokumenta. element se moe pojaviti u elementu ili elementu. U elementu uobiajeno je pisati programe koji oekuju neku korisnikovu radnju, tj. uitaju se u preglednik i ekaju dogaaj koji bi ih pokrenuo. U elementu je uobiajeno pisati programe koji se izvravaju odmah pri uitavanju. Najee je to generiranje nekog dijela HTML dokumenta.

    Jedan HTML dokument moe sadravati nekoliko elemenata. Ove odvojene skripte obrauju se redom kojim su napisane u dokumentu. Odvojene skripte ine jedan JavaScript program unutar jednog HTML dokumenta, tj. funkcije i varijable definirane u jednoj skripti dostupne su u svim sljedeim skriptama unutar istog HTML dokumenta.

    Iako je JavaScript najee rabljen skriptni jezik u HTML dokumentima, nije jedini. Vrsta skriptnog jezika navodi se u language atributu taga.

    Preglednici koji imaju interpreter za navedeni jezik skriptu obrade, ostali ju zanemare:

    // JavaScript program

    HTML 4 standard ne preporua uporabu language atributa, jer ne

    postoji predefiniran popis skriptnih jezika. Umjesto toga preporua se uporaba type atributa:

    Meutim, podrka za type atribut jo nije rairena u dananjim preglednicima. Kako je type obvezan uza

    XHTML preporuka je pisati oba atributa.

    HTML

    JavaScript

  • Osnove JavaScripta

    T E A J E V I s r c a 17

    Prijanjih godina se mnogo koristilo tzv. "skrivanje koda", tj. trikom s komentarima se skrivao JavaScript od preglednika koji ga nisu znali interpretirati.

    Danas je broj preglednika u uporabi koji ne znaju interpretirati JavaScript pao ispod 1%, stoga vie nema razlog za takvo skrivanje. tovie takav nain ukljuivanja JavaScripta u dokument nije dozvoljen po preporuci za XHTML.

    2.2.2. JavaScript u zasebnoj datoteci

    Od inaice 1.1, JavaScripta unutar elementa podrava src atribut. Vrijednost tog atributa je URL datoteke koja sadri JavaScript program.

    JavaScript datoteka uobiajeno ima .js ekstenziju i sadri isti JavaScript,

    bez elementa.

    Bilo koji kd unutar tagova se zanemaruje. Nuno je primijetiti da je zavrni tag obavezan iako je src atribut naveden i iako nema

    JavaScripta izmeu i tagova.

    Nekoliko je razloga za uporabu src atributa:

    Pojednostavljuje HTML datoteku, jer nema velikih blokova JavaScripta u dokumentu.

    Ukoliko se neka JavaScript funkcija rabi u vie HTML dokumenata, poziva se jedna datoteka, to omoguuje jednostavnije odravanje, a smanjuje i potronju diska.

    Kada vie HTML dokumenata rabi jednu JavaScript datoteku, ona se uitava u preglednik samo prilikom prve uporabe. Nakon toga se datoteka lokalno sprema na disk i svaki sljedei put interpretira se iz lokalne datoteke.

    Kako src atribut sadrava URL, JavaScript program s jednog posluitelja se moe rabiti na nekoliko drugih posluitelja (npr. src="http://www.udaljeni-server.hr/js/obrasci.js").

    XHTML preporuka navodi da je sljedei nain najpoeljniji za ukljuivanje JavaScripta u XHTML dokument:

    HTML

    JavaScript

    src="..."

  • Osnove JavaScripta

    T E A J E V I s r c a 18

    2.2.3. Obrada dogaaja

    JavaScript program izvrava se samo jednom i to kad se HTML dokument uita u preglednik. Ovakav nain uporabe JavaScripta ne omoguuje interakciju s korisnikom. Zbog toga je za pojedine HTML objekte (uglavnom dijelovi obrazaca) definirano nekoliko dogaaja. Dogaaj se navodi kao atribut dotinog objekta. Na primjer, kad korisnik pritisne gumb "Poruka", tj. aktivira se dogaaj onclick, izvrava se vrijednost navedenog dogaaja. U naem primjeru pojavi se obavijest korisniku.

    Kao vrijednost dogaaja moe se navesti nekoliko JavaScript naredbi, no ako je naredbi previe, uobiajeno je da se napie funkcija (bilo unutar elementa ili u zasebnoj datoteci) te se poziva ta funkcija. Na taj

    nain smanjuje se mijeanje JavaScripta i HTMLa.

    2.2.4. JavaScript u URLu

    Drugi nain na koji se JavaScript kd moe ukljuiti u URL je pomou javascript: pseudoprotokol oznake. Taj posebni protokol oznaava da je tijelo stranice iza navedenog URL-a proizvoljan JavaScript program kojei e obraditi interpreter. Ukoliko JavaScript program u javascript: URL-u ima

    vie naredbi, one moraju biti odvojene toka-zarezom. Na primjer:

    Kada preglednik uita ovakav JavaScript URL, izvede se JavaScript program, izrauna se vrijednost posljednje naredbe i ta vrijednost se pretvori u niz znakova. Konano, dobiveni niz znakova prikae se u pregledniku.

    Kada JavaScript URL sadri program koji ne vraa nikakvu vrijednost, preglednik izvri program, ali ne mijenja sadraj dokumenta.

    B340 - javascript: URL 1

    JavaScript

    B340 - javascript: URL 2

    JavaScript

    Za naprednije korisnike! Rabi se najee kao obavijesti za neuspjelu akciju.

  • Osnove JavaScripta

    T E A J E V I s r c a 19

    Vrlo esto se javascript: URL koristi za izvravanje JavaScript programa bez promjene sadraja dokumenta. To se postie tako da se osigura da posljednja naredba u URL-u ne vraa nikakvu vrijednost. Jedan od naina je uporaba void operatora. Sljedei primjer pokazuje javascript: URL koji otvara novi prazan prozor, bez promjene sadraja trenutanog dokumenta:

    Bez void operatora u dokument bi se ispisala vrijednost posljednje

    naredbe pretvorena u niz znakova. U naem sluaju to je Window.open( ). Niz znakova bio bi: [object] (ili [object Window] u Netscape

    preglednicima)

    Ovakav javascript: URL moe se rabiti na svim mjestima gdje se koristi uobiajen URL. Na primjer za brzo testiranje mogue je upisati u polje Adresa (Location) u pregledniku bilo koji JavaScript program (naravno krai).

    esta uporaba ovakvog oblika je kao vrijednost action atributa u elementu.

    2.3. Pogreke

    Ukoliko se pri izvoenju JavaScripta pojavi pogreka, u Internet Exploreru se u donjem lijevom kutu pojavi ikona s usklinikom:

    Dvostrukim klikom na ikonu dobije se obavijest o pogreci (u saetom obliku). Pritiskom na "Prikai pojedinosti>>" ("Show Details>>") dobiju se podrobniji podaci o pogreki:

    B340 - javascript: URL 2

    JavaScript

  • Osnove JavaScripta

    T E A J E V I s r c a 20

    U ovoj skripti je pogreka u 11. retku (Line 11) i 5. stupcu (Char 5).

    Pogreka je opisana u Pogreka (Error) polju. Naime, opis pogreke navodi da objekt ne podrava metodu (tj. objekt document ne podrava metodu

    writ). Drugim rijeima, metoda write pogreno je napisana.

    1

    2

    3

    4 Greka

    5

    6

    7

    8

    9 var i = 1;

    10

    11 document.writ('i: ' + i + '');

    12

    13

    14

    15

    16

    Saetak

    Ovo poglavlje obrauje osnove jezika:

    nain pisanja JavaScript programa

    nain pisanja komentara u JavaScript programima

    kako se mogu nazivati varijable

    kljune rijei JavaScripta

    ukljuivanje JavaScripta u HTML

  • Osnove JavaScripta

    T E A J E V I s r c a 21

    3. Varijable i objekti

    3.1. Vrste podataka

    3.1.1. Brojevi

    Svi brojevi u JavaScriptu predstavljaju se kao brojevi s pominim zarezom (floating-point) i to u 64-bitnom formatu, tj. mogu se prikazati brojevi koji nisu vei (po apsolutnoj vrijednosti) od 1.7976931348623157 x 10308 i nisu manji od 5 x 10 -324.

    Cijeli brojevi mogu se prikazati od -9007199254740992 (-253) do 9007199254740992 (253).

    Osim brojeva s bazom 10, JavaScript prepoznaje i brojeve s bazom 16 (heksadecimalne). Heksadecimalan broj mora zapoeti s "0x" ili "0X" te nastaviti s nizom heksadecimalnih znamenki (tj. 0-9 i A-F).

    Brojevi s pominim zarezom prikazuju se na dva naina: klasini nain s tokom ili tzv. "inenjerski" nain sa slovom E.

    Kad rezultat operacije na brojevima postane prevelik za prikaz u

    JavaScriptu, broj se prikazuje kao posebna vrijednost Infinity. Slino tome, kad je negativan broj manji od najmanjeg broja koji se moe prikazati u JavaScriptu, prikazuje se kao posebna vrijednost -Infinity.

    Ukoliko se prilikom neke matematike operacije dobije nedefinirani rezultat (npr. dijeljenje s nulom), broj se prikazuje pomou posebne vrijednosti NaN (Not-a-Number = nije broj). Ova vrijednost nije jednaka ni jednoj drugoj vrijednosti, pa ak ni samoj sebi. Zbog toga postoji posebna funkcija isNaN( ), koja provjerava je li neka vrijednost broj ili ne. Funkcija

    isFinite( ) provjerava je li vrijednost broj i moe li se prikazati kao konaan broj u JavaScriptu. U tablici se navode jo neke posebne vrijednosti:

    0xFF // 15*16 + 15 = 255 (u bazi 10)

    0xCAFE911

    3.14

    2345.789

    .333333333333333333

    6.02e23 // 6.02 x 1023

    1.4738223E-32 // 1.4738223 x 10-32

    Oprez je potreban kod uporabe bit operacija, jer se one obavljaju na 32-bitnim cijelim brojevima, tj. od -2147483648 (-2

    31)

    do 2147483647 (231

    -1).

  • Osnove JavaScripta

    T E A J E V I s r c a 22

    Konstanta Znaenje Infinity Posebna vrijednost koja predstavlja

    beskonanost. NaN Posebna vrijednost nije-broj. Number.MAX_VALUE Najvei broj koji se moe prikazati. Number.MIN_VALUE Najmanji (najblii nuli) broj koji se moe

    prikazati. Number.NaN Posebna vrijednost nije-broj. Number.POSITIVE_INFINITY Posebna vrijednost koja predstavlja

    beskonanost. Number.NEGATIVE_INFINITY Posebna vrijednost koja predstavlja

    negativnu beskonanost.

    Vrijednosti Infinity i NaN definirane su u ECMAScript v1 standardu tako

    da nisu implementirane prije JavaScripta 1.3.

    3.1.2. Nizovi znakova

    U JavaScriptu se nizom znakova smatra bilo koji niz Unicode znakova,

    duljine 1 ili vie, omeen navodnicima ili apostrofom (' ili "). Niz znakova zapoet s navodnikom mora zavriti navodnikom. Takoer niz znakova zapoet apostrofom mora zavriti apostrofom. Niz znakova zapoet navodnikom moe sadravati proizvoljan broj apostrofa i obratno.

    Niz znakova mora biti napisan u jednom retku. Ukoliko postoji potreba za

    unosom novog retka, potrebno je koristiti znak \n.

    JavaScript se esto kombinira s HTML-om, koji takoer rabi navodnike ili apostrof u vrijednostima argumenata. Stoga je poeljno imati stalan stil pisanja navodnika i apostrofa. Npr:

    Novi redak nije jedini sluaj kad je potrebno napisati neki poseban znak pa u JavaScriptu postoji nekoliko posebnih nizova znakova s posebnog znaenja:

    "" // Ovo je prazan niz znakova, duljine 0

    'test' // Niz znakova omeen apostrofima

    "3.14" // Ovo nije broj ve niz znakova

    'Potrebno je upisati "user"' // Navodnici unutar niza znakova

    "Obian niz znakova."

    "Ovaj niz je\nu dva reda"

    JavaScript

  • Osnove JavaScripta

    T E A J E V I s r c a 23

    Niz Znaenje \0 NUL znak (\u0000). \b Backspace (\u0008). \t Vodoravni tabulator (\u0009). \n Novi red (\u000A). \v Okomiti tabulator (\u000B). \f Form feed (\u000C). \r Carriage return (\u000D). \" Navodnici, ak i unutar niza znakova zapoetih navodnikom

    (\u0022). \' Apostrof, ak i unutar niza znakova zapoetih apostrofom

    (\u0027). \\ Obrnuta kosa crta (\u005C).

    \xXX Latin-1 znak naveden s dvije heksadecimalne znamenke XX. \uXXXX Unicode znak naveden s etiri heksadecimalne znamenke

    XXXX.

    Nizovi znakova spajaju se operatorom +:

    3.1.3. Logike vrijednosti

    Logike vrijednosti (tzv. boolean vrijednosti) imaju samo dvije mogue vrijednosti koje se prikazuju pomou konstanti true i false. Logike vrijednosti obino su rezultat usporeivanja:

    3.1.4. Nizovi

    Niz je skup vrijednosti u kojemu svaki element ima jedinstveni redni broj koji se naziva indeks. Vrijednost odreenog elementa dobije se tako da se iza naziva niza vrijednost indeksa stavi unutar uglatih zagrada, tj. izraz

    a[2] oznaava trei element u nizu a jer su u JavaScriptu elementi niza indeksirani od nule.

    Nizovi mogu sadravati bilo koju vrstu JavaScript podataka, ukljuujui i reference na druge nizove, objekte ili funkcije. Kako se u JavaScriptu ne navodi vrsta pojedinih vrijednosti, nije nuno da su u jednom nizu sve vrijednosti iste vrste (kao to je to u veini drugih jezika).

    Nizovi se stvaraju pomou Array( ) funkcije (konstruktora). Kada je niz stvoren, moe mu se dodavati proizvoljan broj elemenata:

    Nizovi se mogu stvoriti i tako da im se odmah postave poetne vrijednosti. Npr. prethodni primjer mogao je izgledati ovako:

    poruka = "Dobrodoli u " + "SRCE"; // Daje "Dobrodoli u SRCE"

    log_var = a == 5;

    var a = new Array( );

    a[0] = 1.2;

    a[1] = "JavaScript";

    a[2] = true;

    a[3] = { x:1, y:3 };

  • Osnove JavaScripta

    T E A J E V I s r c a 24

    Ako pak konstruktoru Array( ) proslijedite samo jedan parametar, on

    oznaava duljinu niza. Sljedei primjer stvara novi niz od 10 elemenata:

    3.1.5. Nepostojea i nedefinirana vrijednost

    Kljuna rije null oznaava posebnu vrijednost koja nema nikakvu vrijednost. Kad varijabla ima vrijednost null, tada ne sadri ni jednu ispravnu vrstu podatka: objekt, niz, broj, niz znakova ili logiku vrijednost.

    Druga je posebna vrijednost undefined, koja se dobije kad se uporabi

    varijabla koja je bila deklarirana, ali nema poetnu vrijednost ili svojstvo objekta koje ne postoji.

    Vrijednost undefined nije isto to i null, iako e test jednakosti vratiti istinu. Kao to e se pokazati u nastavku, za razlikovanje se koriste operatori === ili typeof.

    3.2. Varijable

    Varijabla je ime povezano s vrijednou, tj. varijabla sadrava odreenu vrijednost. Varijable omoguavaju pohranu i rukovanje podacima u programu.

    Kao to je ranije reeno: prvi znak imena varijable mora biti slovo ili znak podcrta (_). Sljedei znakovi mogu biti slova, brojevi ili podcrta. Ostali znakovi nisu dozvoljeni u imenima varijabli (dakle, nisu dozvoljeni znakovi s dijakriticima: ).

    JavaScript je jezik bez eksplicitnih vrsta podataka, to znai da varijable ne moraju imati navedeno koje su vrste. tovie jedna varijabla moe sadravati vrijednost bilo koje vrste, npr:

    Varijabla dobije vrstu podatka na osnovi podatka koji sadri. tovie, JavaScript automatski mijenja vrstu varijable, ako je to potrebno. Prije nego

    se rabi varijabla, poeljno ju je deklarirati pomou kljune rijei var. Npr:

    Ako pri deklaraciji varijable nije navedena poetna vrijednost, ona se automatski postavlja na vrijednost undefined.

    var a = new Array(1.2, "JavaScript", true, i_varijabla);

    var a = new Array(10);

    i = 10; // cijeli broj

    i = "deset"; // niz znakova

    i = false; // logika vrijednost

    var i;

    var sum;

    var i, sum; // Ili obje odjednom

    var niz = "Oprez!"; // Deklaracija s poetnom vrijednosti

  • Osnove JavaScripta

    T E A J E V I s r c a 25

    3.3. Objekti

    Objekt je sloena vrsta podatka koji skuplja vie vrijednosti u jednu cjelinu. Takoer se moe rei da je objekt skup imenovanih vrijednosti. Te se vrijednosti nazivaju svojstva objekta. eli li se pristupiti odreenom svojstvu, navede se ime objekta, toka i na kraju ime svojstva. Ako objekt slika ima svojstva sirina i duljina, onda se tim svojstvima pristupa na

    ovaj nain:

    Objekti se stvaraju pozivom posebne funkcije (konstruktor). Npr. ovim se recima stvaraju objekti:

    Kako bi se pristupilo svim svojstvima jednog objekta, rabi se poseban oblik

    for petlje:

    Postupak ili metoda je JavaScript funkcija koja se poziva kroz objekt:

    slika.sirina

    slika.duljina

    var objekt = new Object( );

    var sada = new Date( );

    var uzorak = new RegExp("\\sjavascript\\s", "i");

    for(var svojstvo in osoba) alert(svojstvo);

    // Funkcija

    function identitet(){

    return "Ja sam " + this.ime + " po zanimanju " + this.zanimanje;

    }

    // Povezivanje s objektom

    osoba.predstavi_se = identitet;

    O b j e k t

    Svojstva

    Metode

    A r r a

    y

    length

    ...

    sort join

    reverse ...

  • Osnove JavaScripta

    T E A J E V I s r c a 26

    Vjeba (3_varijable.html)

    Deklarirajte varijablu i te joj dodijelite vrijednost 1.

    Deklarirajte tri varijable niz, niz2, niz3 te im dodijelite vrijednosti Niz znakova, 3.14, U dvaretka redom.

    Deklarirajte varijablu logicka i dodijelite joj vrijednost true.

    Vrijednosti ispiite pomou document.write funkcije.

    Promijenite vrijednost varijable logicka u false te ju ponovo ispiite.

    Saetak

    U ovom poglavlju ste se upoznali s varijablama i objektima:

    vrstama varijabli

    deklaracijama varijabli

    stvaranjem objekata

    pristupom svojstvima objekata

    uporabom metoda objekata

    var i_broj = 1;

    var s_niz1 = 'Niz znakova';

    var s_niz2 = '3.14';

    var s_niz3 = 'U dvaretka!';

    var b_logicka = true;

    document.write('Broj: ' + i_broj + '');

    document.write('Niz 1:' + s_niz1 + '');

    document.write('Niz 2: ' + s_niz2 + '');

    document.write('Niz 3: ' + s_niz3 + '');

    document.write('Logika: ' + b_logicka + '');

    b_logicka = false;

    document.write('Logika: ' + b_logicka + '');

    Broj: 1

    Niz 1: Niz znakova

    Niz 2: 3.14

    Niz 3: U dva

    retka!

    Logika: true

    Logika: false

  • Osnove JavaScripta

    T E A J E V I s r c a 27

    4. Operatori

    Operatori se rabe pri obavljanju odreenih operacija na varijablama i konstantama. Pregled svih operatora i njihova svojstva nalaze se u dodatku.

    4.1. Aritmetiki operatori

    Aritmetiki operatori su operatori osnovnih raunskih matematikih operacija.

    Operator Znaenje

    zbrajanje (+) zbraja dva broja ili spaja dva niza znakova

    oduzimanje (-) oduzima drugi broj od prvoga ili kao unaran operator vraa negativnu vrijednost broja

    mnoenje (*) mnoi dva broja

    dijeljenje (/) dijeli prvi broj drugim i rezultat je uvijek decimalan broj; dijeljenje s nulom daje pozitivnu ili negativnu beskonanost (ovisi o prvom broju) dok 0/0 daje NaN

    modulo (%) vraa ostatak od dijeljenja prvog broja drugim

    inkrement (++) poveava vrijednost operanda za jedan

    dekrement (--) umanjuje vrijednost operanda za jedan

    4.2. Operator pridruivanja

    Operator pridruivanja rabi se za pridruivanje vrijednosti varijabli. Kako je operator pridruivanja asocijativan (i to s desna) mogue je napisati:

    Sve tri varijable imat e vrijednost 0.

    Operator pridruivanja ima i poseban oblik: pridruivanje s operacijom, tj. oblik:

    i = j = k = 0;

    a op= b;

    // je isto kao

    a = a op b;

    // gdje je op jedan od aritmetikih ili bit operatora

  • Osnove JavaScripta

    T E A J E V I s r c a 28

    4.3. Operatori usporeivanja

    Operatori usporeivanja se najee koriste pri grananju (if) i uvjetnim petljama (while i do..while).

    Operator Znaenje

    manji od () daje true ako je prvi operand vei od drugoga;

    inae false

    manji ili jednak (=) daje true ako je prvi operand vei ili jednak

    drugom; inae false

    jednak (==) daje true ako je prvi operand jednak drugom;

    inae false

    razliit (!=) daje true ako je prvi operand razliit drugoga;

    inae false

    Vrijednosti koje se usporeuju mogu biti bilo koje vrste. No kako se samo brojevi i nizovi znakova mogu usporediti, JavaScript obavlja odreena pretvaranja prije usporeivanja:

    Ako su oba operanda brojevi ili se mogu pretvoriti u brojeve, usporeuju se kao brojevi.

    Ako su oba operanda nizovi znakova ili se mogu pretvoriti u niz znakova, usporeuju se kao nizovi znakova.

    Ako je jedan operand niz znakova ili se moe pretvoriti u niz znakova te ako je drugi operand broj ili se moe pretvoriti u broj, niz znakova se pokua pretvoriti u broj i usporeuju se kao brojevi. Ako niz znakova nije broj, pretvara se u NaN, tj. usporeivanje nije uspjelo.

    Ako se objekt moe pretvoriti ili u broj ili u niz znakova, JavaScript pretvara objekt u broj. To znai da se Date objekti usporeuju kao brojevi.

    Ako se jedan od operanda, koji se usporeuju, ne moe uspjeno pretvoriti ili u broj ili u niz znakova, usporeivanje je uvijek neuspjeno, tj. dobiva se false.

    Ako je jedan od operanda NaN, usporeivanje je uvijek neuspjeno.

    Vano je primijetiti da se nizovi znakova usporeuju znak po znak, rabei kd svakog znaka iz Unicode tablice. To znai da usporeivanje nizova znakova moe biti neobino. Naime "Zagreb" je manji od "auto".

    Usporeivanje je takoer osjetljivo na velika i mala slova (jer su im kdovi razliiti).

    Metoda String.localeCompare( ) bolja je za usporeivanje, jer potuje abecedni poredak jezika koji je trenutano odreen. Za usporeivanja

  • Osnove JavaScripta

    T E A J E V I s r c a 29

    neosjetljiva na velika i mala slova potrebno je pretvoriti operande u velika ili

    mala slova rabei String.toUpperCase( ) ili String.toLowerCase( ).

    4.4. Logiki operatori

    Logiki operatori se najee koriste kod sloenih uvjeta za grananja i petlje.

    Operator Znaenje

    logiko i (&&): daje true ako i samo ako su oba operanda

    true; inae daje false

    logiko ili (||): daje true ako je jedan od operanada true;

    inae daje false

    logiko ne (!): unarni operator daje true samo ako je operand

    false; inae daje false

    Prilikom pisanja sloenih uvjeta, preporuljivo je svaki uvjet pisati unutar zagrada:

    U primjeru je svaki osnovni uvjet ((a>100) i (b100) && (b 100) && (b < 32))){

    // naredbe

    }

    a = "2"; b = "2";,

    c = a + b; // c je 22, a ne 4!!!

    1 + 2 // Oba operanda su brojevi, rezultat je 3.

    "1" + "2" // Oba operanda su nizovi znakova, rezultat je "12".

    "1" + 2 // Drugi operand se pretvara u niz znakova, rezultat je "12".

    11 < 3 // Oba operanda su brojevi, rezultat je false.

    "11" < "3" // Oba operanda su nizovi znakova, rezultat je true.

    "11" < 3 // Prvi operand se pretvara u broj, rezultat je false.

    "one" < 3 // Prvi operand se pretvara u broj (postaje Nan), rezultat je false.

  • Osnove JavaScripta

    T E A J E V I s r c a 30

    Saetak

    U ovom poglavlju saznali smo poneto o najvanijim operatorima:

    aritmetikim operatorima

    operatorima pridruivanja

    operatorima usporeivanja

    logikim operatorima

    operatorima spajanja

  • Osnove JavaScripta

    T E A J E V I s r c a 31

    Vjeba (4_operatori.html)

    Deklarirajte dvije varijable i_a i i_b te im dodijelite proizvoljne vrijednosti.

    Poetne vrijednosti prikaite pomou funkcije document.write.

    Deklarirajte varijable i_suma, i_razlika, i i_mod koje e sadravati redom: sumu, razliku, modulo varijabli i_a i i_b.

    Deklarirajte varijablu b_logicka.

    Rezultate prikaite pomou funkcije document.write.

    Izraunajte tri aritmetike operacije iz druge toke i dodijelite ih odgovarajuim varijablama.

    Inkrementirajte varijablu i_a i dekrementirajte varijablu i_b te ispiite nove vrijednosti varijabli i_a i i_b.

    Ve izraunatoj sumi dodajte novu vrijednost varijable i_a. Ispiite novu vrijednost varijable i_suma.

    Varijabli b_logicka dodijelite rezultat usporedbe je li vrijednost varijable a vea od 5. Ispiite vrijednost varijable b_logicka.

    Ispiite i_a + i_b i uoite da se ne dobije zbroj ve niz znakova.

    Ispiite (i_a + i_b) i provjerite da je zbroj tono ispisan.

    Poetna vrijednost i_a: 10 Poetna vrijednost i_b: 3 Suma: 13

    Razlika: 7

    Mod: 1

    i_a nakon ++: 11

    i_b nakon --: 2

    Sumi dodamo i_a: 24

    Je li i_a > 5: true

    Paziti na konverzije i_a + i_b: 112

    Paziti na konverzije (i_a + i_b): 13

  • Osnove JavaScripta

    T E A J E V I s r c a 32

    var i_a = 10, i_b = 3;

    var i_suma, i_razlika, i_mod, b_logicka;

    i_suma = i_razlika = i_mod = 0;

    document.write('Poetna vrijednost i_a: ' + i_a + '');

    document.write('Poetna vrijednost i_b: ' + i_b + '');

    i_suma = i_a + i_b;

    i_razlika = i_a - i_b;

    i_mod = i_a % i_b;

    document.write('Suma: ' + i_suma + '');

    document.write('Razlika: ' + i_razlika + '');

    document.write('Mod: ' + i_mod + '');

    i_a++;

    i_b--;

    document.write('i_a nakon ++: ' + i_a + '');

    document.write('i_b nakon --: ' + i_b + '');

    i_suma += i_a;

    document.write('Sumi dodamo i_a: ' + i_suma + '');

    b_logicka = i_a > 5;

    document.write('Je li i_a > 5: ' + b_logicka + '');

    document.write('Paziti na konverzije i_a + i_b: ' + i_a + i_b + '');

    document.write('Paziti na konverzije (i_a + i_b): ' + (i_a + i_b) +

    '');

  • Osnove JavaScripta

    T E A J E V I s r c a 33

    5. Funkcije

    5.1. Definiranje funkcije

    Funkcija je konstrukcija u JavaScriptu pomou koje grupiramo vei broj naredbi i tu grupu izvravamo navodei ime funkcije. Na ovaj nain skraujemo pisanje programa (ako vie puta pozivamo istu funkciju) te pojednostavljujemo program (npr. cijeli program moe se sastojati od poziva funkcija proizvoljnog imena te na taj nain pokazuje logiku programa, to bi inae bilo skriveno u velikom broju naredbi). Najei nain definiranja funkcije je pomou naredbe function:

    Popis argumenata nije obavezan, dok okrugle zagrade jesu. Tijelo funkcije pie se unutar vitiastih zagrada {...}, koje oznaavaju blok naredbi, tj. nain da se nekoliko naredbi vee u jednu cjelinu.

    Funkcija moe vratiti vrijednost, naredbom return, ali i ne mora. Evo nekoliko primjera:

    function (, , ...){

    }

    // Funkcija koja nita ne vraa

    function print(s_msg){

    document.write(s_msg, "");

    }

    // Funkcija koja vraa udaljenost dviju toaka

    function udaljenost(x1, y1, x2, y2){

    var dx = x2 - x1;

    var dy = y2 - y1;

    return Math.sqrt(dx*dx + dy*dy);

    }

    // Rekurzivna fukncija (poziva samu sebe) koja rauna faktorijel

    // Podsjetnik: x! = x*(x-1)*(x-2)*...*3*2*1

    function faktorijel(x){

    if (x

  • Osnove JavaScripta

    T E A J E V I s r c a 34

    5.2. Poziv funkcije

    Funkcija se poziva tako da se navede njezino ime, a argumenti funkcije u okruglim zagradama. Ukoliko funkcija nema argumenata, ne navodi se nita, ali zagrade su obavezne. Ukoliko se funkciji proslijedi manje argumenata nego ih sadri definicija funkcije, ostali argumenti dobiju vrijednost udefined. Npr. gore definirane funkcije pozivaju se:

    Vjeba (5_funcije.html)

    Iskoristite definicije funkcija print i udaljenost iz toke 5.1.

    Deklarirajte varijable s_mjesto, i_mjerilo i f_ukupno. Varijabli s_mjesto dodijelite proizvoljno mjesto grada te varijabli i_mjerilo

    dodijelite vrijednost 25.

    Izraunajte udaljenost mjesta od mora, tj. duljinu puta od toke (0,0) do toke (3,5) kroz toku (2,1) na karti mjerila pohranjenog u varijabli i_mjerilo.

    Ispiite dobrodolicu u grad.

    Ispiite izraunatu udaljenost do mora.

    print("Kako si, " + ime);

    print("Pozdrav svima!");

    ukupno = udaljenost(0,0,2,1) + udaljenost(2,1,3,5);

    print("Vjerojatnost je: " + faktorijel(39)/faktorijel(52));

    function print(s_msg){

    document.write(s_msg, "");

    }

    function udaljenost(x1, y1, x2, y2){

    var dx = x2 - x1;

    var dy = y2 - y1;

    return Math.sqrt(dx*dx + dy*dy);

    }

    var mjesto = "Velegrad", mjerilo = 25, ukupno;

    ukupno = Math.round(udaljenost(0,0,2,1) + udaljenost(2,1,3,5)) * mjerilo;

    print("Dobrodoli u " + mjesto + "!");

    print(mjesto + " je " + ukupno + " kilometara udaljen od mora.");

    Dobrodoli u Velegrad! Velegrad je 150 kilometara udaljen od mora.

  • Osnove JavaScripta

    T E A J E V I s r c a 35

    6. Naredbe za kontrolu tijeka

    6.1. Uvjetno izvoenje naredbi

    Osnovna naredba za grananje je if naredba. Njezin prvi oblik je:

    gdje je uvjet logiki izraz koji je ili true ili false. Kad operandi u izrazu nisu logiki prevode se u logike vrijednost i to tako da vrijednost null, undefined, 0, "", ili NaN postaje false. Sve ostale vrijednosti su true.

    Blok naredbi izvrava se samo ako je uvjet zadovoljen, tj. ako je izraz u uvjetu jednak true. Vitiaste zagrade, koje oznaavaju blok naredbi, nisu potrebne ukoliko iza uvjeta slijedi samo jedna naredba, ali se preporua uvijek ih pisati radi jednoznanosti.

    Drugi oblik je if..else oblik:

    Ovaj oblik ima jo jedan blok, koji se izvodi ako uvjet nije zadovoljen.

    6.2. Viestruka usporedba

    Ukoliko je potrebno jednu vrijednost usporediti vie puta, rabi se nekoliko if..else naredbi:

    Meutim, ovakav nain prilino je spor jer se, u najgorem sluaju, provjeravaju sve mogunosti pa program nije pregledan. U ovakvom sluaju rabi se naredba switch:

    if(){

    // naredbe

    }

    if(){

    // naredbe

    }

    else {

    // naredbe

    }

    if(n == 1){

    // naredbe1

    }

    else if(n == 2){

    // naredbe2

    }

    else if(n == 3){

    // naredbe3

    }

    else {

    // naredbe4

    }

  • Osnove JavaScripta

    T E A J E V I s r c a 36

    Ova naredba provjerava je li izraz u okruglim zagradama (odmah iza

    kljune rijei switch), istovjetan (koristi se operator ===), dakle, i po vrsti

    jednak, jednoj od vrijednosti iza case kljune rijei. Ako takva vrijednost

    postoji, izvrava se blok naredbi iza te vrijednosti do kraja cijele switch

    naredbe ili do kljune rijei break, koja prekida blok koji se trenutano

    izvrava, tj. zavrava switch naredbu. Dakle, mogue je napisati ovu naredbu tako da se jedan blok izvri za vie vrijednosti:

    Ukoliko ne postoji vrijednost koja je istovjetna provjeravanom izrazu,

    izvrava se blok iza kljune rijei default. Iako je uobiajeno da se

    default blok pie posljednji (jer onda nije potrebno pisati break naredbu), to nije obavezno. Taj blok je ravnopravan ostalim blokovima.

    6.3. Uvjetni operator

    Uvjetni operator je jedini operator s tri operanda u JavaScriptu:

    to je jednako sljedeem:

    Ovaj operator najee se koristi pri inicijalizaciji varijabli:

    switch(n){

    case 1:

    // naredbe1

    break;

    case 2:

    // naredbe2

    break;

    case 3:

    // naredbe3

    break;

    default:

    // naredbe4

    break;

    }

    switch(n){

    case 1:

    case 2:

    case 3:

    // naredbe1

    break;

    case 4:

    // naredbe2

    break;

    default:

    // naredbe3

    break;

    }

    ? naredba1 : naredba2;

    if()

    naredba1;

    else

    naredba2;

    puno_ime = ime != null ? ime : 'Nepoznato';

  • Osnove JavaScripta

    T E A J E V I s r c a 37

    6.4. Petlja s uvjetom na poetku

    Osnovna petlja u JavaScriptu je while petlja:

    Tijelo petlje izvrava se sve dok je uvjet zadovoljen. Stoga

    naredbom while(true){...} napravila bi se beskonana petlja. Ako uvjet nije zadovoljen prije poetka petlje, njezino tijelo se nee izvesti ni jednom.

    6.5. Petlja s uvjetom na kraju

    esto je potrebno izvriti neke postupke barem jednom i tek tada provjeriti odreeni uvjet. U takvom sluaju koristi se do..while konstrukcija:

    Konstrukcija do..while se mora zavriti kao naredba toka-zarezom

    (zato jer zavrava uvjetom, a ne blokom kao osnovna while petlja).

    6.6. Klasina petlja

    U sluaju kad je tono poznat broj ponavljanja nekog postupka ili su poznati poetni i krajnji uvjet, koristi se klasina for petlja:

    To je pojednostavljena while petlja:

    Primjer uporabe:

    while(){

    // naredbe

    }

    do {

    // naredbe

    } while();

    for(; ; ) {

    // naredbe

    }

    ;

    while(){

    // naredbe

    ;

    }

    for(i = 0; i

  • Osnove JavaScripta

    T E A J E V I s r c a 38

    Vjeba (6_petlje.html)

    Definirajte funkciju print kao u vjebama petog poglavlja.

    Deklarirajte varijable i_a, i_b, s_operacija i i_raz.

    Variajblama i_a i i_b dodijelite proizvoljne vrijednosti. Varijabli s_peracija dodijelite niz znakova +.

    Provjerite je li varijabla i_a vea ili manja od i_b, rabei jednostavno grananje.

    Ispiite koja je operacija zapisana u varijabli s_operacija, rabei viestruko grananje.

    Izraunajte i ispiite "pravu razliku", tj. oduzmite vei broj od manjeg. Uporabite uvjetni operator.

    Klasinom for petljom ispiite 10 redaka teksta: "For: redak x" gdje je x broj retka.

    Napiite prethodnu for petlju pomou while petlje.

    Saetak

    U ovom poglavlju saznali smo kako se kontrolira tijek programa:

    kontrola tijeka programa uvjetnim grananjem (if-else)

    kontrola tijeka programa viestrukom usporedbom (switch)

    kontrola tijeka programa uvjetnim operatorom

    ponavljanje dijela programa petljom s uvjetom na poetku (while)

    ponavljanje dijela programa petljom s uvjetom na kraju (do-while)

    ponavljanje dijela programa klasinom petljom (for)

    i_a je manji

    Zbrajanje

    Prava razlika: 3

    For: redak 0

    For: redak 1

    For: redak 2

    For: redak 3

    For: redak 4

    For: redak 5

    For: redak 6

    For: redak 7

    For: redak 8

    For: redak 9

    For: redak 10

    While: redak 0

    While: redak 1

    While: redak 2

    While: redak 3

    While: redak 4

    While: redak 5

    While: redak 6

    While: redak 7

    While: redak 8

    While: redak 9

    While: redak 10

  • Osnove JavaScripta

    T E A J E V I s r c a 39

    function print(s_msg){

    document.write(s_msg, "");

    }

    var i_a = 10, i_b = 13, s_operacija = '+', i_raz;

    if(i_a > i_b){ print("i_a je veci"); }

    else{ print("i_a je manji"); }

    switch(s_operacija){

    case '+' : print("Zbrajanje"); break;

    case '-' : print("Oduzimanje"); break;

    case '*' : print("Mnoenje"); break;

    case '/' : print("Dijeljenje"); break;

    default : print("Nepoznato");

    }

    i_raz = i_a > i_b ? i_a - i_b : i_b - i_a;

    print("Prava razlika: " + i_raz);

    for(i = 0; i

  • Osnove JavaScripta

    T E A J E V I s r c a 40

    7. Obrasci

    7.1. Prvi obrazac

    HTML obrazac je dio dokumenta koji sadri tekst i posebne elemente zvane kontrole (checkbox, radio gumb, izbornik, itd.) Korisnici obino "popune" obrazac mijenjajui kontrole (unose tekst, oznaavaju mogunosti, odabiru izbore, itd.). Na kraju "popunjavanja" korisnik alje podatke na obradu. Obrasci su najei nain prijave ili ispunjavanja podataka na HTML stranicama. Sastoje se od niza elemenata od kojih svaki ima svoje posebnosti. Ovo je najjednostavniji obrazac koja ima samo jedan gumb s tekstom "Poruka":

    Kako je pisanje JavaScripta u odvojenoj datoteci praktinije, preporua se zasebno pisanje HTML-a i JavaScripta:

    function prva(){

    alert('Osnove JavaScripta');

    }

  • Osnove JavaScripta

    T E A J E V I s r c a 41

    U sljedeim e primjerima uglavnom biti naveden dio samo unutar elementa. Ostatak HTML-a se ponavlja.

    7.2. Unos kraih nizova znakova

    Krai nizovi znakova (nizovi koji imaju samo jedan red) unose se u tzv. tekstualno polje. Primjer se nadogradi jednim poljem za unos imena:

    Rabi se niz forms (indeks je 0 stoga to je ovaj obrazac prvi u nizu forms) to je prilino neitko, a moe biti i problematino. Da bi se izbjegao takav nain pisanja, svakom obrascu dodijeli se ime, a pristup svim vrijednostima e bit e preko naziva obrasca:

    Odgovarajui program:

    Dodaje se provjera je li ime prazno, te ukoliko je prazno, korisnik se upozori:

    // obrazac2.js

    function prva(){

    alert('Osnove JavaScripta');

    }

    Unesite ime:

    // obrazac3.js

    function provjeri (){

    var s_ime = '';

    s_ime = document.forms[0].ime.value;

    alert('Ime je: ' + s_ime);

    }

    Unesite ime:

    // obrazac4.js

    function provjeri(){

    var s_ime = '';

    s_ime = document.frm_a.ime.value;

    alert('Ime je: ' + s_ime);

    }

    obrazac2.htm

    obrazac2.js

    src="obrazac2.js"

  • Osnove JavaScripta

    T E A J E V I s r c a 42

    Proiri se obrazac poljem za prezime:

    Dodaje se provjera je li prezime prazno:

    Dakle, u sluaju da su i ime i prezime prazni, korisnik se upozori dva puta. Porastom broja polja, poveao bi se i broj poruka za korisnike to moe biti neugodno. Bolje je neovisno provjeriti polja i zapisati upozorenja u niz znakova koji se ispisuje na kraju:

    // obrazac5.js

    function provjeri(){

    var s_ime = '';

    s_ime = document.frm_a.ime.value;

    if(s_ime == ''){

    alert('Ime je prazno!');

    }

    else {

    alert('Ime je: ' + s_ime);

    }

    }

    Unesite ime:

    Unesite prezime:

    // obrazac6.js

    function provjeri(){

    var s_ime = '';

    var s_prezime = '';

    s_ime = document.frm_a.ime.value;

    s_prezime = document.frm_a.prezime.value;

    if(s_ime == ''){

    alert('Ime je prazno!');

    }

    else {

    alert('Ime je: ' + s_ime);

    }

    if(s_prezime == ''){

    alert('Prezime je prazno!');

    }

    else {

    alert('Prezime je: ' + s_prezime);

    }

    }

  • Osnove JavaScripta

    T E A J E V I s r c a 43

    Sada se poruka prikazuje samo jednom.

    7.3. Odabir jedne od mogunosti

    Dodaje se element radio za vrstu raunala:

    // obrazac7.js

    function provjeri(){

    var s_ime = '';

    var s_prezime = '';

    var s_pogreska = '';

    var s_poruka = '';

    s_ime = document.frm_a.ime.value;

    s_prezime = document.frm_a.prezime.value;

    if(s_ime == ''){

    s_pogreska += 'Ime je prazno!';

    }

    else {

    s_poruka += 'Ime je: ' + s_ime;

    }

    if(s_prezime == ''){

    s_pogreska += '\nPrezime je prazno!';

    }

    else {

    s_poruka += '\nPrezime je: ' + s_prezime;

    }

    if(s_pogreska == ''){

    alert(s_poruka);

    }

    else {

    alert(s_greska);

    }

    }

    Unesite ime:

    Unesite prezime:

    Raunalo:

    Stolno

    Prijenosno

  • Osnove JavaScripta

    T E A J E V I s r c a 44

    Program postaje sve sloeniji:

    // obrazac8.js

    function provjeri(){

    var s_ime = '', s_prezime = '', s_pogreska = '';

    var s_poruka = '', i_sel = -1, o_komp;

    s_ime = document.frm_a.ime.value;

    s_prezime = document.frm_a.prezime.value;

    if(s_ime == ''){

    s_pogreska += 'Ime je prazno!';

    }

    else {

    s_poruka += 'Ime je: ' + s_ime;

    }

    if(s_prezime == ''){

    s_pogreska += '\nPrezime je prazno!';

    }

    else {

    s_poruka += '\nPrezime je: ' + s_prezime;

    }

    o_komp = document.frm_a.komp;

    for(i = 0; i < o_komp.length; i++){

    if(o_komp[i].checked){

    i_sel = i;

    }

    }

    if(i_sel == -1){

    s_pogreska += '\nNiste izabrali vrstu raunala!';

    }

    else {

    s_poruka += '\nRaunalo je: ' + o_komp[i_sel].value;

    }

    if(s_pogreska == ''){

    alert(s_poruka);

    }

    else {

    alert(s_pogreska);

    }

    }

  • Osnove JavaScripta

    T E A J E V I s r c a 45

    7.4. Ukljuivanje i iskljuivanje jedne mogunosti

    Ako je neka mogunost proizvoljna onda upotrebljava se tzv. checkbox element:

    Obrada takvog elementa je jednostavna:

    Unesite ime:

    Unesite prezime:

    Raunalo:

    Stolno

    Prijenosno

    Modem je vanjski.

    // obrazac9.js

    ...

    if(i_sel == -1){

    s_pogreska += '\nNiste izabrali vrstu raunala!';

    }

    else {

    s_poruka += '\nRaunalo je: ' + o_komp[i_sel].value;

    }

    s_poruka += '\nModem je '

    s_poruka += document.frm_a.modem.checked ? ' vanjski!' : 'unutranji!';

    if(s_pogreska == ''){

    alert(s_poruka);

    }

    else {

    alert(s_pogreska);

    }

    }

  • Osnove JavaScripta

    T E A J E V I s r c a 46

    7.5. Odabir jedne od mogunosti na drugi nain

    Kad postoji veliki broj mogunosti, nepregledno je sve ih ispisati. Element select prikazuje samo izabranu mogunost dok korisnik ne klikne na njega.

    Obrada select elementa malo je sloenija. Naime, svaki select objekt u

    JavaScriptu ima podniz (options) u kojem su smjetene vrijednosti i tekstovi za svaku pojedinu mogunost izbora.

    Unesite ime:

    Unesite prezime:

    Raunalo:

    Stolno

    Prijenosno

    Modem je vanjski.

    Operacijski sustav:

    Windows NT 4

    Windows 2000

    Windows XP

    Windows 2003

    // obrazac10.js

    function provjeri(){

    var s_ime = '', s_prezime = '', s_pogreska = '';

    var s_poruka = '', i_sel = -1, o_komp, i_indeks;

    ...

    s_poruka += '\nModem: ' s_poruka += document.frm_a.modem.checked ? ' vanjski!' : ' unutranji!';

    i_indeks = document.frm_a.os.selectedIndex;

    s_poruka += '\nOS: ';

    s_poruka += document.frm_a.os.options[i_indeks].text;

    if(s_pogreska == ''){

    alert(s_poruka);

    }

    else {

    alert(s_pogreska);

    }

    }

  • Osnove JavaScripta

    T E A J E V I s r c a 47

    Svaki element moe imati atribut value, to je korisno kada je korisniku potrebno prikazati odreeni tekst (tekst unutar elementa), a postaviti vrijednost elementa na drugu vrijednost (tekst u value

    atributu). Vrijednosti teksta pristupamo text svojstvom, a vrijednosti

    atributa value svojstvom. Prepravljeni obrazac izgleda ovako:

    Prilagodi se i skripta:

    Unesite ime:

    Unesite prezime:

    Raunalo:

    Stolno

    Prijenosno

    Modem je vanjski.

    Operacijski sustav:

    Windows NT 4

    Windows 2000

    Windows XP

    Windows 2003

    // obrazac11.js

    function provjeri(){

    var s_ime = '', s_prezime = '', s_pogreska = '';

    var s_poruka = '', i_sel = -1, o_komp, i_indeks;

    ...

    s_poruka += '\nModem: ' s_poruka += document.frm_a.modem.checked ? ' vanjski!' : ' unutranji!';

    i_indeks = document.frm_a.os.selectedIndex;

    s_poruka += '\nOS: ';

    s_poruka += document.frm_a.os.options[i_indeks].text;

    s_poruka += ' (';

    s_poruka += document.frm_a.os.options[i_indeks].value;

    s_poruka += ')!';

    if(s_pogreska == ''){

    alert(s_poruka);

    }

    else {

    alert(s_pogreska);

    }

    }

  • Osnove JavaScripta

    T E A J E V I s r c a 48

    Meutim operacijski sustavi imaju i zakrpe o kojima ovisi kako se ponaa sam sustav, a i pojedine aplikacije. Stoga se dodaje jo i izbor "Service packa":

    Unesite ime:

    Unesite prezime:

    Raunalo:

    Stolno

    Prijenosno

    Modem je vanjski.

    Operacijski sustav:

    Windows NT 4

    Windows 2000

    Windows XP

    Windows 2003

    Service pack:

    Service pack 1

    Service pack 2

    Service pack 3

    Service pack 4

    Service pack 5

    Service pack 6

  • Osnove JavaScripta

    T E A J E V I s r c a 49

    I prilagodi se skripta:

    U ovakvom obrascu korisnik moe izabrati dosta neobine kombinacije, kao to su: Windows XP SP 6 ili Windows 2003 SP3. Dakle, za svaki operacijski sustav treba definirati njegov skup zakrpa, koji se dinamiki mijenja ovisno o odabranom sustavu. Stoga se u obrascu isprazni popis zakrpa:

    // obrazac12.js

    function provjeri(){

    var s_ime = '', s_prezime = '', s_pogreska = '';

    var s_poruka = '', i_sel = -1, o_komp, i_indeks, i_indeks_sp;

    ...

    i_indeks = document.frm_a.os.selectedIndex;

    s_poruka += '\nOS: ';

    s_poruka += document.frm_a.os.options[i_indeks].text;

    s_poruka += ' (';

    s_poruka += document.frm_a.os.options[i_indeks].value;

    s_poruka += ')!';

    i_indeks_sp = document.frm_a.srv_pack.selectedIndex;

    s_poruka += '\nSP: ';

    s_poruka += document.frm_a.srv_pack.options[i_indeks_sp].text;

    s_poruka += ' (';

    s_poruka += document.frm_a.srv_pack.options[i_indeks_sp].value;

    s_poruka += ')!';

    if(s_pogreska == ''){

    alert(s_poruka);

    }

    else {

    alert(s_pogreska);

    }

    }

    Unesite ime:

    Unesite prezime:

    Raunalo:

    Stolno

    Prijenosno

    Modem je vanjski.

    Operacijski sustav:

    Windows NT 4

    Windows 2000

    Windows XP

    Windows 2003

    Service pack:

  • Osnove JavaScripta

    T E A J E V I s r c a 50

    Nedostaje funkcija koja e puniti popis zakrpa ovisno o odabranom operacijskom sustavu. Kako je popis na poetku prazan, postavit e se kao da je izabran prvi sustav na popisu, tj. onaj s indeksom 0. Pojavljuju se novi

    atributi za obradu dogaaja onChange u elementu i onLoad u

    elementu. Detaljan opis dogaaja nalazi se u dodatku Dogaaji.

    Takoer se pojavljuje objekt this, koji oznaava trenutani objekt. U ovom primjeru bi bilo sukladno napisati

    Definira se nova funkcija i nove varijable:

    document.frm_a.os.selectedIndex

    Unesite ime:

    Unesite prezime:

    Raunalo:

    Stolno

    Prijenosno

    Modem je vanjski.

    Operacijski sustav:

    Windows NT 4

    Windows 2000

    Windows XP

    Windows 2003

    Service pack:

    // obrazac13.js

    var sp = new Array(1); // Definira se novi niz

    // Napuni se niz nizova

    sp = [

    // NT 4

    ["(Nema);nema", "Service Pack 1;sp1", "Service Pack 2;sp2",

    "Service Pack 3;sp3", "Service Pack 4;sp4",

    "Service Pack 5;sp5", "Service Pack 6;sp6",

    "Service Pack 6a;sp6a"],

    // 2000

    ["(Nema);nema", "Service Pack 1;sp1", "Service Pack 2;sp2",

    "Service Pack 3;sp3", "Service Pack 4;sp4",

    "Service Pack 4 & Updates;sp4upd"],

    // XP

    ["(Nema);nema", "Service Pack 1;sp1", "Service Pack 2;sp2"],

    // 2003

    ["(Nema);nema", "Service Pack 1;sp1"]

    ];

  • Osnove JavaScripta

    T E A J E V I s r c a 51

    // Funkcija koja puni odereeni select element

    // Argumenti:

    // o_select: objekt kojega se puni

    // a_array: niz iz kojega se puni

    // i_index: iz kojeg podniza se puni

    function puni_select(o_select, a_array, i_index){

    var i_separator, i, s_opt_text, s_opt_value;

    // Postavi se duljina niza na 0, tj. brie se

    o_select.options.length = 0;

    for(i=0; i < a_array[i_index].length; i++){

    // Provjeri se gdje je separator

    i_separator = a_array[i_index][i].indexOf(';');

    // Nema ga

    if(i_separator == -1){

    // Tekst za prikaz odabira

    s_opt_text = a_array[i_index][i];

    // Vrijednost odabira

    s_opt_value = s_opt_text;

    }

    // Separator postoji

    else {

    // Prvi dio je tekst za prikaz odabira

    s_opt_text = a_array[i_index][i].substr(0, i_separator);

    // Drugi dio je vrijednost odabira

    s_opt_value = a_array[i_index][i].substr(i_separator + 1);

    }

    // Stvori se novi lan niza i postavi se vrijednosti

    o_select.options[i] = new Option(s_opt_text, s_opt_value);

    }

    }

    Saetak

    Ovo poglavlje uvodi mogunost nadzora upisa podataka putem osnovnih elementa obrasca:

    gumba

    polja za unos teksta

    odabira jedne od mogunosti

    ukljuivanja jedne mogunosti

    odabira jedne od mogunosti na drugi nain (kompaktniji)

    pristupa pojedinom elementu i njegovim vrijednostima

    izrade dinamikih popisa

  • Osnove JavaScripta

    T E A J E V I s r c a 52

    8. Korisne skripte

    8.1. Rollover

    Rollover (okretanje) je jedan od najee koritenih vizualnih efekata kod kojih se rabi JavaScript. To je efekt kad se slika (obino je to slika s tekstom koja stoji u izborniku) promijeni u trenutku kad korisnik postavi mi na tu sliku.

    Primjer:

    Napisana je jedna funkcija koja postavlja src argument za odreeni objekt (u naem sluaju je to this, tj. trenutani objekt).

    Uporabom iste funkcije mogue je upravljati i drugim objektima. Npr. napravite mali album:

    function roll(o_img, s_new_src){

    o_img.src = s_new_src;

    }

    Slika A

    Slika B

    Slika C

  • Osnove JavaScripta

    T E A J E V I s r c a 53

    8.2. Vrsta preglednika

    Kao to je ranije pokazano JavaScript nije jednak u svim preglednicima. Takoer niti HTML nije jednak u svim preglednicima. Stoga postoji potreba identificiranja preglednika da bi se elementi prikazali na najbolji mogui nain u odreenom pregledniku. Svi preglednici trebali bi se predstaviti odreenim postupkom. Veina ih to i ini no to treba pisati u toj "posjetnici" nije odreeno te nastaju problemi. Stoga je kd sloen. Dio koji ide u HTML dokument izgleda ovako:

    A program koji puni odreene varijable ovako:

    document.write('Browser name/version: ');

    if(is_ie){

    document.write("Internet Explorer");

    }

    else if(is_nav){

    document.write("Netscape Navigator");

    }

    else if(is_moz){

    document.write("Mozilla");

    }

    else if(is_fb){

    document.write("Firebird");

    }

    else if(is_fx){

    document.write("Firefox");

    }

    if(is_gecko){

    document.write(" (Gecko)");

    }

    document.write(" " + i_major + " (" + i_minor + ")");

    document.write('navigator.appCodeName: ' + navigator.appCodeName + '');

    document.write('navigator.appName: ' + navigator.appName + '');

    document.write('navigator.appVersion: ' + navigator.appVersion + '');

    document.write('navigator.userAgent: ' + navigator.userAgent + '');

    document.write('navigator.platform: ' + navigator.platform + '');

  • Osnove JavaScripta

    T E A J E V I s r c a 54

    var s_agent = navigator.userAgent.toLowerCase();

    var s_app_ver = navigator.appVersion.toLowerCase();

    var i_minor = parseFloat(s_app_ver);

    var i_major = parseInt(i_minor);

    var i_ie_pos = s_app_ver.indexOf('msie');

    if (i_ie_pos != -1) {

    i_minor = s_app_ver.substring(i_ie_pos + 5, s_app_ver.indexOf(';',

    i_ie_pos));

    i_major = parseInt(i_minor);

    }

    var is_ie = (i_ie_pos != -1);

    var is_gecko = ((navigator.product) &&

    (navigator.product.toLowerCase()=="gecko")) ? true : false;

    var is_gver = navigator.productSub;

    var is_moz = ((s_agent.indexOf('mozilla/5')!= -1) &&

    (s_agent.indexOf('compatible') == -1) &&

    (is_gecko) &&

    ((navigator.vendor == "") ||

    (navigator.vendor == "Mozilla") ||

    (navigator.vendor == "Debian")));

    var is_fb = ((s_agent.indexOf('mozilla/5')!= -1) &&

    (s_agent.indexOf('compatible')== -1) &&

    (is_gecko) &&

    (navigator.vendor == "Firebird"));

    var is_fx = ((s_agent.indexOf('mozilla/5')!= -1) &&

    (s_agent.indexOf('compatible') == -1) &&

    (is_gecko) &&

    (navigator.vendor == "Firefox"));

    if ((is_moz)||(is_fb)||(is_fx)) {

    var i_moz_ver = (navigator.vendorSub) ? navigator.vendorSub : 0;

    if(!(i_moz_ver)) {

    i_moz_ver = s_agent.indexOf('rv:');

    i_moz_ver = s_agent.substring(i_moz_ver+3);

    i_paren = i_moz_ver.indexOf(')');

    i_moz_ver = i_moz_ver.substring(0, i_paren);

    }

    i_minor = i_moz_ver;

    i_major = parseInt(i_moz_ver);

    }

    var is_fb_ver = i_moz_ver;

    var is_fx_ver = i_moz_ver;

    var is_nav = ((s_agent.indexOf('mozilla')!=-1) &&

    (s_agent.indexOf('compatible') == -1) &&

    (!is_moz) &&

    (!is_fb) &&

    (!is_fx));

  • Osnove JavaScripta

    T E A J E V I s r c a 55

    8.3. Preusmjeravanje

    Ponekad postoji potreba da se na osnovu odreenih kriterija (recimo jezik u kojemu su stranice pisane ili vrsta preglednika koju ima korisnik) korisnici upute na druge stranice. U tu svrhu rabi se preusmjeravanje, pomou location objekta:

    8.4. Provjera pomou regularnih izraza

    Prilikom unosa podataka, korisnici sluajno unose nepravilne podatke. Bilo bi poeljno da se moe provjeriti to su korisnici unijeli te da ih se moe upozoriti ukoliko su podaci neispravni. JavaScript od inaice 1.2 ima u sebi podrku za regularne izraze (regular expressions), koji omoguuju pisanje odreenih pravila (izraza) i provjeru pridrava li se odreeni niz znakova tih pravila. Sr je regularnih izraza suradnja dvaju dijelova: to elimo i koliko toga elimo. Prvi se naziva kvalifikator, a drugi kvantifikator.

    Kvalifikator Znaenje

    Tono taj znak

    [...] Skup znakova unutar uglatih zagrada

    [^...] Komplement skupa znakova, tj. ne znakove unutar uglatih zagrada

    . Bilo koji znak, osim kraja reda

    \w Bilo koje ASCII podcrta, slovo ili broj, isto kao [a-zA-Z0-9_]

    \W Bilo koji znak koji nije ASCII podcrta, slovo ili broj, isto kao [^a-zA-Z0-9_]

    \s Razmak

    \S Bilo koji znak koji nije razmak

    \d Broj, isto kao [0-9]

    \D Bilo koji znak koji nije broj, isto kao [^0-9]

    Kvantifikator Znaenje

    {n,m} Prethodni kvalifikator se mora pojaviti najmanje n puta, a najvie m puta

    {n,} Prethodni kvalifikator se mora pojaviti najmanje n puta (ili vie)

    {n} Prethodni kvalifikator se mora pojaviti tono n puta

    ? Prethodni kvalifikator se moe pojaviti jednom, a i ne mora; isto kao {0,1}.

    + Prethodni kvalifikator se mora pojaviti barem jednom; isto kao {1,}

    * Prethodni kvalifikator se moe pojaviti bilo koliko puta, a i ne mora; isto kao {0,}.

  • Osnove JavaScripta

    T E A J E V I s r c a 56

    Ako je u proizvoljan izraz potrebno staviti nekoliko mogunosti, onda se one grupiraju u okrugle zagrade i odvoje okomitom crtom. Npr. sljedei izraz odgovara brojevima 099, 098, 091 i 092:

    Sljedei izraz odgovara bilo kojem nainu pisanja rijei JavaScript:

    Analiza izraza:

    ^ znak za poetak (retka ili niza znakova)

    [Jj] na poetku se moe pojaviti bilo koji znak (samo jedan) iz skupa (ovdje J i j)

    (ava)? niz znakova "ava" (grupirani okruglim zagradama) moe se, ali i ne mora pojaviti

    \s? jedan razmak moe se pojaviti, ali i ne mora

    [Ss] moe se pojaviti bilo koji znak (samo jedan) iz skupa (ovdje S i s)

    $ znak za kraj (retka ili niza znakova)

    Dakle, bilo koji od sljedeih nizova odgovara izrazu: "JavaScript", "javascript", "JScript", "Java Script", pa ak i "javaScript".

    Nedostaje funkcija koja e uneseni niz znakova usporediti s navedenim izrazom te vratiti informaciju odgovara li niz znakova izrazu. Najprije obrazac:

    U ovom obrascu dozvoljeno je da se za ime i prezime upiu samo slova (ASCII i slova s dijakritikim znakovima), razmak i crtica barem jednom (uoite znak + pred kraj izraza). Za telefonski broj mogue je unijeti

    predbroj i znak za razdvajanje (uoite ? iza grupirajuih zagrada). Predbroj

    poinje znakom 0, nakon kojega slijedi ili 1 ili dvije znamenke. Znak za razdvajanje moe biti ili razmak ili kosa crta (ovdje osigurana s obrnutom kosom crtom, jer kosa crta oznaava poetak i kraj regularnog izraza). Nakon toga slijedi jedan broj od 1 do 9 (prva nula nema smisla) te nakon njega dva ili tri broja koje moe, ali ne mora, slijediti crtica za razdvajanje. Na kraju slijede tono tri broja. Ovdje se nalazi program koji provjerava izraze (program uz provjeru izraza i vraa fokus na polje koje nije ispravno, jer se hvata dogaaj onBlur koji se okida u trenutku naputanja polja):

    09(9|8|2|1)

    ^[Jj](ava)?\s?[Ss]cript$

    Ime i prezime

    Telefonski broj

  • Osnove JavaScripta

    T E A J E V I s r c a 57

    Program se doradi tako da se doda argument koji predstavlja poruku koja e se prikazati prilikom pogreke te se korisniku pomogne tako da se iz njegovog neispravnog niza znakova uklone znakovi koji tu ne smiju biti (no, to jo uvijek ne znai da je niz pravilnog oblika):

    Odgovarajui obrazac:

    function test(s_in, o_focus, s_regex){

    var re = new RegExp(s_regex); // regularni izraz

    if((s_in != '') && (re.test(s_in) == false)){

    alert('Uneena vrijednost nije pravilnog oblika!');

    // Ovo je hack jer focus ne radi po standardu u Mozilli/Firefoxu

    setTimeout(function(){o_focus.focus();},10);

    }

    }

    function test(s_in, o_focus, s_regex, s_keep, s_msg){

    var re = new RegExp(s_regex); // glavni regularni izraz

    var re2 = new RegExp(s_keep); // regularni izraz dozvoljenih znakova

    var s_znak, i, s_out = s_in;

    if((s_in != '') && (re.test(s_in) == false)){

    alert(s_msg);

    s_out = '';

    for (i = 0; i < s_in.length; i++){

    s_znak = s_in.charAt(i)

    if (re2.test(s_znak) != false){

    s_out += s_znak;

    }

    }

    // Ovo je hack jer focus ne radi po standardu u Mozilli/Firefoxu

    setTimeout(function(){o_focus.focus();},10);

    }

    return(s_out);

    }

    Ime i prezime

    Telefonski broj

  • Osnove JavaScripta

    T E A J E V I s r c a 58

    8.5. Upravljanje preglednikom

    Window objekt omoguuje rukovanje prozorom preglednika. Ovaj primjer pokazuje rukovanje trenutanim prozorom:

    Ovim se programom upravlja stanjem preglednika:

    Rukovanje trenutanim prozorom preglednika esto su zlorabili oglaivai, pa je u dananjim preglednicima mogue iskljuiti odziv na mijenjanje izgleda prozora preglednika.

    esto je potrebno kakav sadraj (najee hijerarhijski organiziran sadraj) prikazati u novom prozoru. To se postie uporabom window.open funkcije, koja ima openiti oblik:

    Od parametara su najzanimljiviji ovi:

    top, left, height, width: y koordinata gornjeg ruba, x koordinata lijevog ruba, visina, irina

    menubar, toolbar, location, scrollbars, status, resizable: izbornik, alatna traka, adresno polje, trake za pomak, statusno podruje, prozoru se moe mijenjati veliina

    Trenutni prozor:

    function resize(){

    window.resizeTo(document.frm_win.wd.value, document.frm_win.ht.value);

    }

    function resize_by(){

    window.resizeBy(document.frm_win.wd_by.value, document.frm_win.ht_by.value);

    }

    function move(){