Professional Documents
Culture Documents
Ksigarnia internetowa
Lubi to! Nasza spoeczno
autorzy
Ryan
Ronan
spis treci
23
1.
37
2.
3.
111
4.
159
5.
211
6.
251
7.
289
8.
327
9.
361
10.
407
71
11.
447
483
497
Skorowidz
518
24
27
Oto co zrobilimy
28
29
Przeczytaj mnie
30
Pobierz jQuery
32
Konfiguracja folderw
33
34
Podzikowania
35
spis treci
Zaczynamy z jQuery
jQuery( )
$( )
$( )
Syszaem kliknicie
przycisku.
10
38
39
40
41
43
44
45
Jak to dziaa?
47
49
50
51
jQuery przetumaczony
52
56
60
Wysu si...
62
63
66
69
Przesu element
do gry.
Interpreter
JavaScriptu
spis treci
Selektory i metody
Chwytaj i w drog
jQuery pomaga chwyta elementy strony internetowej i robi z nimi rne
rzeczy. W tym rozdziale zagbimy si w selektory i metody jQuery. Dziki selektorom moemy
chwyta elementy na stronie, a metody pozwalaj na robienie z nimi rozmaitych sztuczek.
Podobnie jak wielka ksiga zakl magicznych, biblioteka jQuery pozwala nam zmienia mas
rzeczy w locie. Moemy sprawia, e obrazy rozpywaj si w powietrzu i pojawiaj znikd.
Moemy wybra okrelony fragment tekstu i w animowany sposb zmieni rozmiar jego czcionki.
Rozpocznijmy wic pokaz zapmy kilka elementw strony i do roboty!
72
73
Zagbiamy si w sekcje
75
78
81
Bd bardziej konkretny
83
84
ID-entyfikowanie elementw
85
88
91
92
cz za pomoc konkatenacji
93
94
95
97
Daj mi $(this)
99
100
102
103
109
110
11
spis treci
3
Suchacz zdarze
syszy zdarzenie
i przekazuje je do...
12
...interpretera
JavaScriptu, ktry
sprawdza, co trzeba
zrobi po kadym
zdarzeniu...
112
113
115
116
Wizanie zdarzenia
117
Wyzwalanie zdarzenia
118
Usuwanie zdarzenia
122
126
132
Dodajemy funkcje
136
137
Funkcja anonimowa
138
139
142
143
145
149
151
153
To ju prawie wszystko...
155
158
spis treci
Twj
element
160
Dla wegetarian
161
166
Pora na przyciski
169
Co teraz?
171
176
177
178
185
186
187
188
190
191
193
194
195
197
198
Przywr hamburgera
201
A co z misem?
202
Treciwa tablica
203
204
To ju wszystko... prawda?
207
210
13
spis treci
14
212
213
214
217
Uaktywniamy interfejs
218
223
224
225
226
228
229
230
233
235
236
238
241
242
243
245
248
250
spis treci
jQuery i JavaScript
252
254
255
256
Interakcja z obiektami
257
Konfiguracja strony
258
Powrt tablic
261
Dostp do tablic
262
263
265
268
275
276
Czyszczenie w jQuery...
282
286
288
15
spis treci
Nadciga burza
290
291
292
299
302
310
Zacznijmy losowa
311
312
312
316
325
326
16
spis treci
jQuery i Ajax
328
329
Dynamizujemy
332
333
Zrozumie Ajax
334
334
335
340
342
346
Funkcje samowywoujce si
347
350
Ktra godzina?
351
356
360
$(li).find(ul)
li
17
spis treci
18
362
363
364
Co zrobi z danymi
367
368
369
371
372
374
377
378
379
381
383
386
387
388
389
390
397
400
405
spis treci
10
408
409
412
416
417
jQuery za kulisami
418
419
422
426
435
438
442
446
Kiedy wreszcie
dadz mi spokj
ci paparazzi?
?
19
spis treci
11
jQuery i API
20
448
450
451
453
456
460
464
474
Udao si!
478
481
spis treci
Ostatki
484
487
488
489
490
6. Walidacja formularzy
491
492
493
494
10. Szablony
495
21
spis treci
S
22
498
498
499
499
500
501
502
Instalacja PHP
502
503
504
Instalacja MySQL
504
505
510
510
Skorowidz
518
-DNNRU]\VWD]bWHMNVLNL
Wstp
Dlaczego
palce pytanie:
odpowiemy na ?.
le
zia
zd
ro
m
ty
ry
W
ksice o jQue
zamiecili to w
24
wstp
wstp
Wiemy, co mylisz
Jak co takiego moe by powan ksik o programowaniu w jQuery?
O co chodzi z tymi obrazkami?
Twj m
e TO zg myli,
jest wa
ne.
zg
Twj m e TEGO
myli, rto
nie waitywa.
zapam
wietnie,
jeszcze tylko
500 nijakich,
drtwych
i nudnych stron.
jeste tutaj
25
ia.
a R
Uwaamy czytelnik
zagwarantowa,
eba to zrozumie, a potem
trz
rw
jpie
Na
?
czy
nau
dnie z najnowszymi
eby si czego
tw do Twojej gowy. Zgo
Co zatem trzeba zrobi,
fak
e
ani
le
ych
wp
o
sam
o
chodzi
uczenie si wymaga o wie
e si tego nie zapomni. Nie
gii i fizjologii nauczania
iolo
rob
neu
niu
wa
zna
po
odkryciami w naukach o
Twj mzg.
stronie. Wiemy, co pobudza
na
stu
tek
o
tylk
ni
cej
wi
gow!:
uczenia si z Rusz
Oto niektre z regu
wa
itania ni same tylko so
wiele atwiejsze do zapam
o
s
%
ki
89
un
Rys
(do
j.
y
zu
wn
ali
kty
zu
efe
Wi
dziej
czania i uczenia si jest bar
i sprawiaj, e proces nau
aniem wiedzy). Poza tym
zyw
eka
prz
i
m
nie
aja
ysw
prz
nad
ach
ani
bad
poprawy w
jQuery( )
si bardziej zrozumiay.
dziki nim materia staje
Zdjcie kudatego
grafiki,
st w obrbie lub blisko
tek
ie
Um
yjaciela po prostu
prz
$( )
u dou lub
t
ias
zam
si,
no
sz zrobi
od
si
rej
do kt
wyskakuje. Czy moe
z dwukrotnie
woli si
po
cz
da
ku
by
e
na innej stronie, a ucze
,
tak
wie
roz
em
stw
pniowo
ie
sto
ob
od
tak
op
o
wikszym prawd
wysuwa i jak
.
my
ble
?
pro
sb
nabiera barw
przedstawione w ten spo
go
ne
wa
lizo
na
i sperso
$( )
Uyj konwersacyjnego
h bada studenci osigali
nyc
daw
nie
s
cza
stylu. Pod
awia
tach, jeli materia przem
o 40% lepsze wyniki w tes
o stylu
neg
cyj
rsa
we
kon
ika z uyciem
bezporednio do czyteln
historie zamiast
malnego stylu. Opowiadaj
for
era
ybi
prz
nie
i
bie
j siebie zbyt powanie.
w pierwszej oso
tocznego jzyka. Nie traktu
po
aj
yw
U
w.
d
ka
wy
wygaszania
ystwu przy obiadku czy te
agi: stymulujcemu towarz
uw
cej
wi
isz
ic
w
po
Czemu
wykadowi?
neurony
Innymi sowy, jeli Twoje
ego zastanowienia si.
bsz
Twojej
w
g
si
do
rzy
nia
zda
ucz
nie
u
Zm
u, nic specjalnego
sik
wy
do
e
on
usz
zm
nie
i i zainspirowa do
nie zostan aktyw
, zaangaowa, zaciekaw
wa
wo
oty
tego
zm
eba
trz
ika
wania nowej wiedzy. Do
gowie. Czyteln
gania wnioskw i genero
ci
wy
noci
w,
yw
m
akt
z
ble
ora
pro
a
a
ani
ani
pyt
rozwizyw
ajce do mylenia
usz
zm
a,
eni
icz
w
a,
ani
celu potrzebne s wyzw
mzgowe i rne zmysy.
angaujce obie pkule
z nas tego
uwag czytelnika. Kady
Przycignij i zatrzymaj
czy, ale nie mog
aprawd chc si tego nau
bitu
N
:
d
czy
O
iad
j mzg zwraca uwag
w
g
do
ie
b
przez pierwsz stron. Tw
et
naw
w
Coroczny
a
ani
ane.
tr
ypi
e
zas
m
bez
o
przebrn
jce wzrok i niespodziew
a 10 kil
sujce, dziwne, przyciga
ere
do bajtu n
int
mzg
e,
j
yk
Tw
zw
na.
nie
nud
czy
by
rze
na
adnie nie musi
zag
h
nyc
icz
hn
tec
,
ych
dn
Nauka nowych, tru
ej, jeli taka nie bdzie.
opanuje je o wiele szybci
czego w duej
zdolnoci do zapamitania
oje
Tw
e
y,
em
Wi
.
ach
czym Ci zaley.
Zagraj na emocj
izanych. Pamitasz to, na
zw
tym
z
i
ocj
em
od
e
mierze zal
ciskajcych zy historiach
. Nie, nie mwimy tu o wy
jesz
czu
ie,
co
li
je
sz,
ita
Pam
ach takich jak zaskoczen
o psie. Mwimy o emocj
re
kt
!,
em
trz
mis
m
takich jak o chopcu i jeg
ste
e o uczuciu je
tak
a
!,
ba
dia
u
co
,
cy
o
zys
czym ws
ciekawo, rad
, nauczysz si czego, o
zi, kiedy rozwiesz zagadk
stem zdolniejszy
od
je
t
ych
ber
prz
:
Ro
te
m
czy
z
o
,
c
rozpo
albo gdy wiesz co
e,
dn
tru
t
jes
e
,
l
my
i
Odliczanie tartu!
inn
inynierii nie ma pojcia.
3 dni do s
technicznie ni ty z dziau
26
wstp
wstp
jeste tutaj
27
Oto co zrobilimy
Uylimy rysunkw, poniewa Twj mzg jest zorientowany na obrazy, a nie na tekst. Jeli
chodzi o Twj mzg, to obraz rzeczywicie wart jest tysica sw. Tam gdzie tekst i obrazy
maj wspistnie, osadzilimy napisy wewntrz rysunkw, poniewa Twj mzg pracuje
efektywniej, kiedy tekst znajduje si w rodku rzeczy, do ktrych si odnosi, ni gdy jest on
umieszczony w podpisach albo zagrzebany gdzie w treci.
Uylimy powtrek, podajc t sam informacj na rne sposoby, za pomoc innych mediw
i poprzez odwoanie si do wielu zmysw, aby zwikszy szanse, e tre zostanie zakodowana
nie tylko w jednym rejonie Twojego mzgu.
Uylimy koncepcji i rysunkw w niespodziewany sposb, poniewa Twj mzg jest nastawiony
na nowoci. Skorzystalimy z obrazw i pomysw zawierajcych jaki emocjonalny przekaz,
poniewa Twj mzg jest nastawiony na zwracanie uwagi na biochemi emocji. Co, co
skania Ci do odczucia czego, zapamitasz z wikszym prawdopodobiestwem, nawet
jeli uczucie to bdzie niczym wicej jak tylko przejawem humoru, zaskoczeniem albo
zaciekawieniem.
Uylimy spersonalizowanego, konwersacyjnego stylu, gdy Twj mzg jest nastawiony na
zwracanie na co wikszej uwagi, kiedy sdzi, e uczestniczysz w rozmowie, ni gdy myli,
e pasywnie suchasz wykadu. Twj mzg dziaa tak nawet wtedy, kiedy czytasz.
Jazda prbna
Zmienna
Tablica
Zamiecilimy wiele aktywnoci, poniewa Twj mzg jest nastawiony na lepsz nauk
i zapamitywanie, kiedy co robisz, ni kiedy o tym czytasz. Wybralimy wiczenia stawiajce
wyzwania, ale wykonalne, poniewa wikszo osb woli wanie takie.
Uylimy wielu stylw nauczania, poniewa Ty moesz wole procedury opisane krok po
kroku, podczas gdy kto inny woli obraz caoci, a kto jeszcze inny chce po prostu zobaczy
przykad. Niezalenie jednak od indywidualnych preferencji kady moe odnie korzyci,
widzc ten sam materia przedstawiony na wiele rnych sposobw.
Zamiecilimy materiay dla obu pkul Twojego mzgu, gdy im bardziej Twj mzg si
zaangauje, z tym wikszym prawdopodobiestwem nauczysz si i zapamitasz i tym duej
bdziesz pozostawa skupiony. Jako e praca jedn pkul czsto daje drugiej pkuli szans
na odpoczynek, moesz by bardziej produktywny, kiedy musisz uczy si przez dusze okresy
czasu.
Zamiecilimy historie oraz wiczenia, ktre przedstawiaj wicej ni tylko jeden punkt
widzenia, poniewa Twj mzg jest nastawiony na gbsz nauk, kiedy jest zmuszony do
wydawania ocen i osdw.
Zamiecilimy wyzwania z wiczeniami oraz zadalimy pytania, na ktre nie zawsze istniej
proste odpowiedzi, poniewa Twj mzg jest nastawiony na nauk i pamitanie, kiedy musi
nad czym pracowa. Pomyl o tym od samego ogldania ludzi na siowni Twoje ciao nie
nabierze ksztatu. Zrobilimy wszystko, co w naszej mocy, aby kiedy ju zabierzesz si do
cikiej pracy pracowa nad waciwymi problemami. Upewnilimy si, e nie powicisz
nawet jednego dodatkowego dendrytu na analiz trudnego do zrozumienia przykadu lub
przetwarzanie cikiego, wypenionego argonem albo suchego tekstu.
Skorzystalimy z ludzi w historiach, przykadach, na rysunkach itd. poniewa Ty jeste
czowiekiem i Twj mzg zwraca wiksz uwag na ludzi ni na inne rzeczy.
28
wstp
wstp
Wytnij ponis
i naklej je na ze porady
lodwk.
Poczuj co!
Twj mzg chce wiedzie, e to ma znaczenie. Angauj
si w historie. Wymylaj wasne podpisy do zdj.
Zymanie si na zy dowcip i tak jest lepsze ni brak
jakiejkolwiek reakcji.
Mw o tym. Na gos.
Stwrz co!
Stosuj nabyt wiedz w codziennej pracy. Korzystaj
z tego, czego si nauczye, przy podejmowaniu decyzji
w swoich projektach. Po prostu zrb co, eby zdoby
troch dowiadczenia wykraczajcego poza wiczenia
i aktywnoci zawarte w tej ksice. Wszystko, czego
potrzebujesz, to owek i problem do rozwizania
Problem, przy ktrym mgby odnie korzyci,
stosujc narzdzia i techniki, ktre poznajesz na
potrzeby egzaminu.
jeste tutaj
29
Przeczytaj mnie
Ksika ta ma stanowi dowiadczenie zwizane z nauk i nie jest leksykonem. Celowo pozbylimy si
wszystkiego, co tylko mogoby przeszkodzi w procesie poznawania tego, czym zajmujemy si w danym
miejscu ksiki. Pierwsze jej czytanie bdziesz jednak musia zacz od pocztku, poniewa przyjlimy
w tej ksice pewne zaoenia co do tego, co ju widziae i co wiesz.
http://code.google.com/chrome/devtools/docs/overview.html
http://getfirebug.com/wiki/index.php/FAQ
Safari
http://www.apple.com/safari/features.html#developer
Internet Explorer 8
http://msdn.microsoft.com/en-us/library/dd565628(v=vs.85).aspx
Internet Explorer 9
http://msdn.microsoft.com/en-us/ie/aa740478
http://www.opera.com/dragonfly/
30
wstp
wstp
Wymagania softwareowe
Aby pisa kod w jQuery, potrzebujesz edytora tekstw, przegldarki, serwera WWW (moe dziaa
lokalnie na Twoim komputerze) oraz biblioteki jQuery.
Edytory tekstw, jakie polecamy dla Windows, to PSPad, TextPad, EditPlus (ale jeli musisz, moesz
korzysta te z Notatnika). Edytorem, ktry polecamy dla Maca, jest TextWrangler. Jeli pracujesz
w systemie Linux, masz do dyspozycji mnstwo wbudowanych edytorw i wierzymy, e nie ma
koniecznoci opowiadania Ci o nich.
Jeli zamierzasz programowa aplikacje WWW, bdzie Ci potrzebny serwer. Aby przerobi pniejsze
rozdziay (9., 10. i 11.), bdziesz musia zapozna si z dodatkiem opisujcym instalacj PHP, MySQL
oraz serwera WWW (Apache albo IIS) i wykona opisane tam czynnoci. Zalecamy, aby zrobi to teraz.
Naprawd! Przejd do dodatku, zastosuj si do instrukcji i wr tu, kiedy skoczysz.
Bdzie Ci te potrzebna przegldarka oraz narzdzia dla programistw przegldarki (zapoznaj si
z tekstem na poprzedniej stronie). Warto te powici czas na nauk korzystania z konsoli JavaScript
w narzdziach Google Chrome. T prac domow bdziesz musia odrobi sam.
I wreszcie bdzie Ci potrzebna biblioteka jQuery. Odwr stron, a pokaemy Ci, skd j wzi.
jeste tutaj
31
Pobierz jQuery
No to zaczynamy. Przejd na stron jQuery i pobierz kopi
biblioteki, z ktrej bdziesz korzysta podczas lektury tej ksiki.
Krok pierwszy:
Uruchom swoj ulubion przegldark i wska
jej nastpujcy adres: http://jquery.com/.
Krok drugi:
Odszukaj sekcj zatytuowan Grab the Latest Version!
(czyli Pobierz najnowsz wersj!), a nastpnie zaznacz
pole wyboru obok opcji Production (wersja produkcyjna).
Krok trzeci:
Kliknij przycisk Download jQuery (czyli Pobierz jQuery).
Krok czwarty:
Na nastpnej stronie zobaczysz mniej wicej co
takiego:
Stron zapisz na swoim dysku w folderze scripts.
jquery-1.7.min.js
scripts
32
wstp
wstp
Konfiguracja folderw
Po pobraniu i rozpakowaniu kodw z ksiki ze strony wydawnictwa Helion
(ftp://ftp.helion.pl/przyklady/jquerg.zip) stwierdzisz, e s one poumieszczane
w folderach zorganizowanych wedug poszczeglnych rozdziaw. Spjrzmy
na przykad na r03:
W folderze styles
znajduje
si plik my_style
za
wszystkie style po wierajcy
trzebne do
rozpoczcia pracy
w danym
rozdziale.
Plik index.htm
zawiera kod l
dl
aplikacji WW a
W.
Folder end zawiera kocowy kod dla rozdziau. Namawiamy Ci, eby korzysta
z tego folderu tylko dla sprawdzenia wynikw swojej pracy.
iera kod,
Plik my_scripts.js zaw . Sprbuj
sam
a
pis
sz
ktry bdzie
nie zagldaj
wysili swj umys i ziesz ju
tutaj, chyba e nie bd
mia innego wyjcia.
Moesz korzysta z biblioteki jQuery w dowolnym ze swoich projektw. Dla Twojej wygody
umiecilimy j w folderze z kodami udostpnionymi dla tej ksiki, niemniej jednak
powiniene wiedzie, skd j wzi, na potrzeby swoich przyszych projektw i ze wzgldu
na jej aktualizacje. Ludzie od jQuery aktualizuj t bibliotek regularnie.
jeste tutaj
33
zesp recenzentw
Bill Mietelski
Paul Barry
ran
Jim Do
Jim Doran pracuje jako inynier oprogramowania na Uniwersytecie Johna Hopkinsa w Baltimore w stanie Maryland.
Naucza JavaScriptu w Community College of Baltimore County i opowiada o tym jzyku podczas konferencji
powiconych sieci WWW. Kiedy nie zajmuje si tym wszystkim, prowadzi pod adresem http://jimdoran.net blog
powicony sztuce, a take bierze udzia w studenckich rozgrywkach roller derby league.
Bill Mietelski by recenzentem technicznym kilkunastu ksiek z serii Head First. Obecnie, jako inynier oprogramowania
w czoowym krajowym centrum medycznym w metropolii chicagowskiej, prowadzi badania biostatystyczne. Kiedy nie
zbiera ani nie analizuje danych, mona go spotka na lokalnym polu golfowym uganiajcego si za ma bia pieczk.
Lindsey Skouras jest prawnikiem w Waszyngtonie DC. W wolnym czasie nauczya si programowa dziki ksikom
z serii Head First. Do jej pozostaych zainteresowa nale czytanie, robtki rczne, zwiedzanie muzew oraz spdzanie
czasu z mem oraz psami.
Paul Barry wykada informatyk na politechnice w Carlow w Irlandii. Paul jest redaktorem czasopisma Linux Journal
oraz autorem ksiek technicznych. Napisa take Head First Python i jest wspautorem Head First Programming. Kiedy
ma czas, zajmuje si konsultacjami w sektorze maych i rednich przedsibiorstw oraz w zakresie uruchamiania projektw
programistycznych.
34
wstp
wstp
Podzikowania
Nasza redaktor:
Dzikujemy (i gratulujemy!) Courtney Nash, ktra nakonia nas do
stworzenia najlepszej chyba ksiki, jak bylimy w stanie napisa. Sprostaa
wielkiej liczbie naszych e-maili, pyta, gdera i okazyjnych dziwactw.
Wytrzymaa z nami przez cay czas powstawania tej ksiki i ufaa nam,
kiedy ufalimy naszej intuicji.
Courtney Nash
Ludzie w OReilly:
Dzikujemy Lou Barr za byskawiczn, wspania i magiczn prac, jak wykonaa, aby uksztatowa t ksik
i sprawi, e jest pikna.
Dzikujemy Laurie Petryckiej za danie nam zielonego wiata. Ryan bardzo mio wspomina
szkolenie w siedzibie HF w Bostonie i nigdy nie zapomni ciepej rodzinnej atmosfery, o ktr
zadbaa Laurie.
Dzikujemy Karen Shaner. Dzikujemy wszystkim z ekipy recenzentw technicznych.
Ryan nigdy nie zapomni dnia, w ktrym odkry w ksigarni seri Head First. Podzikowania dla
Kathy Sierry i Berta Batesa za wzbudzanie neuronw u maniakw komputerowych, gdziekolwiek
si ci maniacy znajduj. Dzikujemy Bertowi za suchanie naszego zrzdzenia i wycignicie nas
z problemw zwizanych z ukoczeniem ksiki oraz za wskazywanie nam jasnych celw ;).
Dzikujemy Timowi OReilly za jego wizj stworzenia najlepszej literatury dla komputerowcw!
Przyjaciele i rodzina Ronana:
Lou Barr
Szczeglne podzikowania dla mojej ony Caitlin, ktra pomoga w urzeczywistnieniu tej ksiki, suc swoj
fantastyczn znajomoci wszystkich funkcji w Adobe. Dzikuj te za jej cierpliwo bez Ciebie nie mgbym
tego wszystkiego zrobi! Wielkie dziki wszystkim, ktrzy wspierali nas w tym wysiku moim wspaniaym
ssiadom, naszym kumplom z piwnicznego mieszkania na Uniwersytecie Portlandzkim, moim wyrozumiaym
druynom piki nonej i kolegom od golfa. Dzikuj mojej rodzinie w Irlandii za jej wsparcie i sowa zachty.
Przede wszystkim dzikuj Ryanowi Benedettiemu, mojemu wspaniaemu wspautorowi, koledze i przyjacielowi.
Dziki za zabranie mnie w t podr i danie mi szansy. To byo wspaniae dowiadczenie!
Przyjaciele i rodzina Ryana:
Dzikuj mojej crce Josie, mojemu synowi Vinniemu i mojej narzeczonej Shonnie, ktra wierzya we mnie
i codziennie wspieraa mnie na wiele rnych sposobw, kiedy pisaem t ksik. Ti amo, i miei tre miracoli.
Tak bardzo Was kocham, moje trzy cuda!
Dzikuj mojej mamie i mojemu tacie, mojemu bratu Jeffowi i moim siostrzenicom Claire i Quinn. Dzikuj
moim piwnicznym wsplokatorom oraz zaodze WAS na Uniwersytecie Portlandzkim, a mianowicie Jenny Walsh,
Jacobowi Caniparolemu oraz wtorkowej ekipie technicznej (wiecie, kogo mam na myli). Dziki dla Caitlin PierceCranley za jej niesamowit wiedz o projektowaniu. Dzikuj mojemu kumplowi, irlandzkiemu ninja (znanemu
te jako Ronan Cranley) za jego doskonae umiejtnoci programowania w jQuery, JavaScripcie i PHP, za jego
poczucie humoru oraz za niewiarygodn etyk pracy nad t ksik.
jeste tutaj
35
36
wstp
1.=DF]\QDP\]bM4XHU\
Chcesz wicej dla swoich stron. Masz w zanadrzu HTML oraz CSS i chciaby wzbogaci
swoje umiejtnoci o pisanie skryptw, ale nie masz zamiaru spdzi caego ycia, piszc je wiersz
po wierszu. Potrzebujesz biblioteki skryptw, ktra pozwoli Ci zmienia strony internetowe w locie.
A skoro wyraamy ju nasze yczenia, to moe doda jeszcze wspprac z Ajaksem i PHP? Czy da
si zrobi w trzech wierszach to, do czego wikszo jzykw po stronie klienta potrzebuje pitnastu?
Pobone yczenia? W adnym wypadku! Musisz zapozna si z jQuery.
37
ruszaj rzeczami
Chcesz p
ntrol nad swoimi stronami i uczyni je przydatniejszymi dla swoich goci?
Na poniszej licie zaznacz wszystkie opcje, ktre mog zosta do tego zastosowane.
D
D
D
D
D
38
Rozdzia 1.
zaczynamy z jquery
..----o
/1--1
Fflllltt\
---
index.html
Serwer WWW
index.html
Przegldarka pobiera
srom i wywietla j
uzytkownikowi.
jeste tutaj
39
trzymaj si skryptu
<seript>
pt::>
<scri
Znacznik
mieszczony
zostaje u
T ML
</scrip
index.html
e?
()
f!:i l
40
Rozdzia 1.
zaczynamy z jquery
iptu
Interpreter JavaSc
.ch
uchuje" zdarzen tak
"nast
" ktore
jak kliknicie mys
zachodz. na stron1e.
'.
Intrpre
moze tez
riptu
a
lqdanoe
'Ojauery to biblioteka
o
o
e?
jzyka JavaScript
wyspecjalizowana
w zmienianiu w locie
dokumentw strony
WWW.
<script>
A...\..
$(document).ready(function(){
$("button").click(function(){
$("hl").hide("slow");
$("h2").show("fast");
$("img").slide Up();
});
} );
<jscript>
jeste tutaj
41
zaostrz rozwizanie
Rozwizanie
<script>
$(document).ready(function(){
$("button").click(function(){
$("hl").hide("slow");
$("h2").show("fast");
$("img").slide Up();
});
} );
<jscript>
42
Rozdzia 1.
zaczynamy z jquery
!"#
3
To wszystko dzieje
si w przegldarce.
index.html
2
'
!"#*
+, -
'
/" 0 !"#10/"2
index.html
Wersja DOM
strony
oknie roboczym.
Okno robocze
to gwne okno
przegldarki.
Interpreter
JavaScriptu
Wersja DOM
strony
jeste tutaj
43
html
head
Kada cz drzewa
DOM nazywana jest
wzem.
body
title
Wszystko, co odnosi si
do znacznika <html>, jest
wzem elementu.
div
Koci DOM
Twoje koci
nie
o
o DOM
Drzew dza si tylk
a
o
w
T
o
r
.
w
sp
e.
ment
do ele zy tekstow
w
s
img
Ko
palucha
czy si
z koci
stopy
ul
li
li
Ko stopy
czy si
z koci
kostki
44
Rozdzia 1.
li
Ko kostki
czy si
z koci
nogi
zaczynamy z jquery
Podaj mi wszystkie
elementy z nazw
znacznika p.
Sposb z jQuery
Zap element
akapitu.
!#%&
document.getElementsByTagName("p")
Podaj mi elem
ent
zerowy.
Skonfiguruj HTML
wewntrz tego
elementu...
...eby zrobi
co takiego.
lnika
jQuery korzysta z si czy, e
zna
co
,
go
we
oro
selekt
elementy za
moesz okrela rne jak w CSS.
tak
w,
or
ekt
pomoc sel
{
}
document.getElementsByTagName("p")[i].
!#%&
Podaj mi element,
ktry wanie mamy
w ptli.
Jedn z mocnych stron jQuery jest moliwo pracy z drzewem DOM bez potrzeby
zagbiania si w szczegy na jego temat. Gdzie tam w gbi ca cik prac
wykonuje JavaScript. W ksice tej nauczysz si, jak korzysta z JavaScriptu i jQuery
razem. W rozdziale 6. dowiemy si czego wicej na temat ich zwizku, a po drodze
udoskonalimy nasze umiejtnoci posugiwania si jzykiem JavaScript. Na razie jednak,
kiedy zdarzy si potrzeba pracy z drzewem DOM, bdziemy korzysta z jQuery.
jeste tutaj
45
Kod
gotowy do
wysmaenia
<!DOCTYPE html>
<html><head> <title>jQuery przybywa do DOMowic</title>
<style>
#change_me {
position: absolute;
top: 100px;
&+#,
+-#,3 3&4
#move_up #move_down #color #disappear {
padding: 5px;}
</style>
<script src="scripts/jquery-1.7.min.js"></script>
</head>
<body>
<button id="move_up">Do gry</button>
89?@A?FGH?IJK89G
89?L& GR& K89G
89??3##3 GRSKVS3FK89G
?@?L%3WAG I8LXZ\^K?@G
<script>
$(document).ready(function() {
$("#move_up").click( function() {
$("#change_me").animate({top:30},200);
});//koniec move_up
$("#move_down").click( function() {
$("#change_me").animate({top:500},2000);
});//koniec move_down
$("#color").click( function() {
$("#change_me").css("color", "purple");
});//koniec color
$("#disappear").click( function() {
$("#change_me").toggle("slow");
});//koniec disappear
});//koniec doc ready
</script>
</body>
</html>
%&
46
Rozdzia 1.
zaczynamy z jquery
Jak to dziaa?
To bardzo sprytne, jak jQuery moe manipulowa stron, prawda? Najwaniejsze do zapamitania
jest to, e kiedy klikae dowolny z przyciskw, aden z fragmentw oryginalnego kodu HTML
ani CSS nie ulega zmianie. Jak wic jQuery to zrobio? Sprawd sam.
1
/
'
'
Za kulisami
2
4
5
6
'
,-
''&
7'
Syszaem
kliknicie przycisku.
8
3
4
5
6
'
'
0/"
Dobra, dobra.
Po prostu mi powiedz,
co mam zrobi.
Przesu
element do gry.
Wersja DOM
strony
Interpreter
JavaScriptu
47
funkcje jquery
O co chodzi z tymi
znakami dolara w kodzie?
jQuery( )
To jest skrt jQuery. Zamiast
wpisywa sze liter tworzcych
wyraz jQuery, wprowadzasz tylko
jeden znak.
, ktrej
To jest funkcja jQuery si
caa praca sprowadza w
do chwytania element bie
Cie
umieszczanych przez
midzy nawiasami.
$( )
Skrt i pena nazwa wskazuj na to samo: duy blok kodu znany jako
jQuery. W ksice tej bdziemy uywa skrtu. Oto trzy rne rzeczy,
ktre moesz wstawi do funkcji jQuery:
$( )
Jeli wstawisz tu sel
ekt
jQuery zwrci zbir ele or CSS,
pasuj do selektora. mentw, ktre
Wanie z tej
opcji bdziesz korzys
ta najczciej.
48
Rozdzia 1.
zaczynamy z jquery
h1 {
text-align: left;
}
To jest wac
iwo CSS...
To wszystko
s reguy CSS.
S
Klasa CS aczyna
z
zawsze pki.
ro
si od k
.my_class {
position: absolute;
}
Identyfikator
zawsze zaczynCSS
znakiem hash a si
.
#my_id {
color: #3300FF;
}
jeste tutaj
49
Selektor CSS
Selektor jQuery
Selektor elementu jQu
ery
Selektor elementu
h1 {
Metoda
$("h1").hide();
text-align: left;
Ukrywa wszystkie
elementy h1 na stroni
e.
Selektor klasy
.my_class {
position: absolute;
}
Selektor identyfikatora
#my_id {
color: #3300FF;
};
$(".my_class").slideUp();
gry
Przesuwa doementy,
el
ie
tk
ys
wsz
do klasy
ktre nale s.
as
cl
y_
m
CSS
Selektor identyfikatora
jQuery
Rozdzia 1.
Metoda
$("#my_id").fadeOut();
Metoda
A ta instrukcja jQuery
stopniowo wygasza
wszystkie elementy
o identyfikatorze CSS
my_id, a stan si
niewidoczne.
zaczynamy z jquery
img{
float:left;
height:350px;
text-align:center;
border: solid #000 5px;
}
img
"
$ (
"
)
$ ("img")
Kwerendowa cz jQuery
sprowadza si do poproszenia
o elementy za porednictwem
JavaScriptu...
Selektor CSS
Prosz bardzo.
9
0/"
4
5
6
'
...i zwrcenia ich
(cz oddajca).
Ze zwracaniem
elementw bdziesz
mie wicej do czynienia
w rozdziale 4. Na razie
zajmijmy si tylko ich
wybieraniem.
jeste tutaj
51
parlez-vous jquery?
jQuery przetumaczony
Aby pokaza Ci, jak atwo mona si nauczy jQuery, rozbilimy na czci
skadowe kilka zda w tym jzyku, z ktrych moesz korzysta podczas swoich
podry po DOMowicach.
$("button").click(function(){}
...kiedy
Hej,
elemencie uytkownik
ci kliknie...
button...
...chciabym, eby
co dla mnie zrobi.
ej instrukcji
Na kocu kadje si rednik.
jQuery znajdu
$("p").hide;
Hej, elementy p
(czyli akapitu)...
Kiedy uytkownik
mnie kliknie, uruchomi
instrukcje jQuery
w nawiasach
klamrowych.
Tekst znajdujcy si
midzy dowolnymi
elementami akapitu
zniknie.
niewidzialne.
...stacie si
$("#myTop").css({"background-color":"blue"});
Hej, elemencie
z identyfikatorem
myTop...
52
Rozdzia 1.
...ustaw swoj
regu CSS...
ta...
...dla koloru
i.
...na niebiesk
Stan si
niebieski.
<div id="myTop>
</div>
zaczynamy z jquery
Bd przegldark
Twoje zadanie polega na wcieleniu si w przegldark
i zakreleniu elementw HTML (z prawej), na ktre
wpynie polecenie jQuery (z lewej).
Polecenie jQuery
Elementy HTML
#G? W 3389?ZJ#FW 33
Z#RSL%IFK#G
$("p").hide();
$("span.Italian").toggle();
$("p#mytext").show();
#?,GF ?ZJZJFJIR9
F#F W 83R3K#G
#G
3J3W Z8LF3 ?S3R#3L Z3R?9IJ
LWJFK#G
* Fragmenty Przemiany Franza Kafki w przekadzie Juliusza Kydryskiego przyp. tum.
jeste tutaj
53
bd przegldark rozwizanie
Bd przegldark rozwizanie
Twoje zadanie polega na wcieleniu si w przegldark i zakreleniu
elementw HTML (z prawej), na ktre wpynie instrukcja jQuery
(z lewej). Oto nasze rozwizanie:
Polecenie jQuery
Elementy HTML
#G? W 3389?ZJ#FW 33
Z#RSL%IFK#G
$("p").hide();
$("span.Italian").toggle();
$("p#mytext").show();
#?,GF ?ZJZJFJIR9
F#F W 83R3K#G
#G
3J3W Z8LF3 ?S3R#3L Z3R?9IJ
LWJFK#G
54
Rozdzia 1.
zaczynamy z jquery
Nie istniej
gupie pytania
wspomniae o pisaniu
skryptw po stronie klienta.
Dokadnie co to takiego?
P: O co chodzi z tymi
znakami dolara?
O:
O:
O:
jeste tutaj
55
'
Zdjcie kudatego
przyjaciela po prostu wyskakuje.
Czy moesz zrobi tak, eby
kudacz powoli si wysuwa i jako
tak stopniowo nabiera barw?
Kiedy uytkownik
kliknie tutaj...
...poka t sekcj
i wysu j, aby
zaprezentowa
kudatego przyjaciela
na dzi.
56
Rozdzia 1.
zaczynamy z jquery
Zaostrz owek
Zanim wymylisz, jak doda funkcjonalno jQuery do strony, spjrzmy,
jak zostay skonfigurowane HTML i CSS. Poniej masz pliki z zeszorocznej
kampanii. Obok elementw, ktre wedug Ciebie bd Ci potrzebne, napisz,
co trzeba zrobi, aby otrzyma funkcje, jakie chcieliby mie marketingowcy.
Pierwszy element uzupenilimy za Ciebie.
<!DOCTYPE html><html> <head>
&G3#339?J3LV ZS3L&+
weryfikacja koncepcji jQuery </title>
<link rel="stylesheet" type="text/
css" href="styles/my_style.css">
</head>
<body>
<div id="showfriend">
3% G3R9?J3L# ZS3L&
# Z89S\FSS#L
<img src="images/furry_friend.jpg">
</a>
</div>
index.html
a:link img, a:visited img {
display:none;
}
jeste tutaj
57
zaostrz rozwizanie
Zaostrz owek
Zanim wymylisz, jak doda funkcjonalno jQuery do strony, spjrzmy, jak
zostay skonfigurowane HTML i CSS. Poniej masz pliki z zeszorocznej kampanii.
Obok elementw, ktre wedug Ciebie bd Ci potrzebne, napisz, co trzeba
zrobi, aby otrzyma funkcje, jakie chcieliby mie marketingowcy. Oto nasze
odpowiedzi nie przejmuj si, jeli Twoje nie s dokadnie takie same:
Rozwizanie
css" href="styles/my_style.css">
</head>
<body>
<div id="showfriend">
3% G3R9?J3L# ZS3L&
# Z89S\FSS#L
<img src="images/furry_friend.jpg">
</a>
</div>
index.html
a:link img, a:visited img {
Ten selektor CSS zmienia waciwo display
display:none;
a{
text-decoration:none;
si pojawi.
color: #000;
}
my_style.css
58
Rozdzia 1.
zaczynamy z jquery
OK, teraz moemy zabra
si za pisanie kodu w jQuery
dla wszystkich funkcjonalnoci,
ktre s nam potrzebne,
prawda?
Zweryfikuj wymagania
Kiedy mylisz o strukturze, zawsze dobrze jest wrci do
tego, co prbujesz stworzy. Dzia marketingu chce, eby
rysunek wysuwa si i nabiera kolorw, kiedy ludzie klikn
sekcj Poka mi kudatego przyjaciela na dzi. Jakie zmiany
w HTML-u i CSS mog by konieczne?
jeste tutaj
59
posprztaj w domu
60
Rozdzia 1.
my_style.css
Zrb to!
Tutaj zrobimy
aktywn sekcj,
a styl nadamy jej
w pliku CSS poniej,
dziki czemu bdzie
ona mie taki sam
wygld i dziaanie
jak sekcja picframe.
zaczynamy z jquery
jQuery w zblieniu
Teraz, kiedy skonfigurowae ju pliki HTML i CSS, przejdmy do
kodu, ktry siedzi sobie midzy znacznikami <script>.
co
...chc, eby i.
dla mnie zrob
DOM
$(document).ready(function(){
Oto nasz identyfikator
selektora dla sekcji clickMe.
$("#clickMe").click(function() {
{
Kropka oddziela cz
z selektorem od czci
z metod.
});
});
Ten rednik
koczy funkcj
jQuery ready.
ie
Sp
ojn
ok
jeste tutaj
61
Wysu si...
Pierwsz rzecz, jak zaimplementujemy, bdzie
wysunicie si i ukazanie rysunku, co jest jednym
z efektw, ktre chciaby zobaczy szef marketingowcw.
Z wysuwaniem mona sobie poradzi na trzy sposoby:
$("div").slideUp();
62
Rozdzia 1.
$("div").slideDown();
$("div").slideToggle();
zaczynamy z jquery
$("img").fadeIn();
WYSIL
SZARE KOMRKI
Jak mylisz, ile instrukcji w jQuery bdzie potrzebnych, aby zrealizowa efekt, o ktry nam chodzi?
Sprbuj zapisa te instrukcje na kawaku papieru. Jeli nie masz co do nich pewnoci, najpierw
napisz je po polsku, a potem sprbuj przestawi swj mzg na mylenie w jQuery.
jeste tutaj
63
To wszystko?
To zdumiewajce, ale potrzebujesz napisa tylko dwa wiersze kodu
w jQuery, aby nasze efekty zadziaay. Chyba zaczynasz rozumie,
dlaczego tyle osb lubi jQuery. Do pliku index.html dodaj
wyrnione pogrubion czcionk wiersze i gotowe.
Zrb to!
<!DOCTYPE html>
<html>
<head>
&G3#339?J3LV ZS3L&K&G
<link rel="stylesheet" type="text/css" href="styles/my_style.css">
</head>
<body>
?@?L&LRGVR3R9?J3W# ZS3L&33?ZXK?@G
<div id="picframe">
<img src="images/furry_friend.jpg">
</div>
<script src="scripts/jquery-1.7.min.js"></script>
<script>
$(document).ready(function(){
$("#clickMe").click(function() {
)*+#
A*':::+0
)*-
+#!
B
*!
=+0
});
});
</script>
</body>
y
Najpierw wywoam
barw.
nia
ra
bie
na
kt
efe
Midzy nawia
ekstra, aby efsami dodalimy co
Przyjrzymy si ekt by jeszcze lepszy.
w rozdziale 5. tym sposobom bliej
</html>
%&
64
Rozdzia 1.
zaczynamy z jquery
Jazda prbna
Otwrz stron w swojej ulubionej przegldarce i sprawd, czy wszystko dziaa.
Kliknij tutaj.
Twj rysunek
powinien nabra
barw i wysun
si w d.
2EHMU]\MWR
jeste tutaj
65
psi krzyowiec
66
Rozdzia 1.
zaczynamy z jquery
Krzywka jQuery
Nadszed czas, aby wygodnie usi i da swojej lewej pkuli
jakie zajcie. Bdzie to zwyka krzywka. Wszystkie wyrazy
stanowice hasa pochodz z biecego rozdziau.
Poziomo
Pionowo
jeste tutaj
67
rozwizanie krzywki
68
Rozdzia 1.
zaczynamy z jquery
Funkcja
jQuery
iera na
aby wyb rymi
j,
ie
n
, kt
asz z
Korzyst TML elementy
H
.
ie
a
n
o
w
str
ulo
ia
z manip
nie mus
bdzies
o, aby uery.
t
o
p
t
jQ
jes
Skrt $ m razem pisa
y
d
a
a
k
za
obsugiw
ry moe a nawet
e
u
jQ
Funkcja , kod HTML,
y
selektor avaScript.
J
obiekty
Selektory
jQuery wybiera ele
menty tak
samo jak CSS: za
pomoc
selektorw.
Praktycznie kady
rodzaj
elementu HTML b
dzie dobry
dla selektora jQue
ry.
Efekt
wygaszania
moesz
erzesz element, e rnych
Kiedy ju wybi
el
pokaza na wi
go wygasi lub tajc z metod fadeIn,
ys
rz
sposobw, ko
i fadeToggle.
fadeOut, fadeTo
stkich
osowa do wszy
Efekt moesz st w, poczwszy od tekstu,
t
rodzajw elemen obrazach i nie tylko.
na
y
sz
yw
cz
o
a sk
wa,
moesz kontrolo
Prdko efektu o czasu
rt
umieszczajc wa wewntrz nawiasw
h)
ac
nd
ku
se
ili
m
(w
kcji.
na kocu instru
jeste tutaj
69
70
Rozdzia 1.
2.6HOHNWRU\LbPHWRG\
Chwytaj i w drog
Hej, kotku, czy moje
selektory i metody
mogyby troch
poczarowa z elementami
twojej strony...
71
szerz si wieci
Od: Emilia
Cze!
teraz bardziej interaktywne
Zobaczyam na Twoim Twitterze, e robisz
zrobi par interaktywnych
c
strony, i pomylaam, e mgby mi pom
radoci. Chciaabym da
z
cz
Ska
rzeczy w mojej witrynie z promocj
d udaniem si do kasy, eby
prze
u
rabat
kanie
uzys
moim gociom szans na
(i w rezultacie by moe
zachci ich do poklikania po mojej stronie
zrobienia wikszych zakupw!).
z nich bdzie jeden z czterech
Strona powinna mie cztery sekcje; w kadej
j rabat to, ktry bdzie
Tw
i
obrazkw. Potrzebuj komunikatu o trec
do 10 procent). Kiedy
5
(od
u
rabat
wywietla losowo wybran wielko
nien si pokaza pod
powi
nikat
komu
i,
sekcj
tych
z
uytkownik kliknie jedn
, eby poprzedni
abym
chcia
obrazem w tej sekcji. Jeli kliknie jeszcze raz,
komunikat znik i eby pojawi si nowy.
powinno to wyglda.
Doczam schemat pokazujcy, jak wedug mnie
Mylisz, e moesz mi pomc?
-Emilia
72
Rozdzia 2.
selektory i metody
Zaostrz owek
Wyszukaj w e-mailu wymagania i rozpisz je w formie listy rzeczy, ktre
nasza aplikacja internetowa powinna robi. Lista ta bdzie naszym
przewodnikiem gwarantujcym, e aplikacja speni wymagania klienta.
Lista rzeczy do zrobienia:
1.
2.
3.
4.
5.
jeste tutaj
73
zaostrz rozwizanie
Zaostrz owek
Rozwizanie
Strona powinna mie cztery sekcje. W kadej sekcji powinno znajdowa si jedno ze zdj
Skacz z radoci.
4.
Kiedy uytkownik kliknie jedn z sekcji, komunikat powinien pojawi si pod obrazem
w tej sekcji.
5.
74
Rozdzia 2.
selektory i metody
Zagbiamy si w sekcje
Potrzebujemy na stronie czterech aktywnych obszarw, a zatem utwrzmy je w pierwszej
kolejnoci. Najbardziej uytecznym i wszechstronnym elementem HTML, ktry spenia
nasze wymogi, jest znacznik sekcji <div>. Bardzo dobrze nadaje si on do ustalania
struktury, poniewa jest elementem na poziomie bloku. Moemy take w prosty sposb
nadawa elementom div styl, dziki czemu bd one robi dokadnie to, czego oczekujemy.
wiczenie
Otwrz swj ulubiony edytor tekstu, aby utworzy potrzebne pliki HTML i CSS. Poniej znajduje
si kod na dobry pocztek z brakujcymi niektrymi kluczowymi elementami. Dodaj do strony
nastpujce elementy i odhacz je na licie, kiedy bd ju gotowe:
znacznik doczajcy bibliotek jQuery w wersji 1.7;
znacznik <div> z identyfikatorem header;
znacznik <div> z identyfikatorem main;
inne zdjcie w obrbie kadego z czterech elementw div, wewntrz main div
(zdjcia moesz pobra std: ftp://ftp.helion.pl/przyklady/jquerg.zip).
<html>
div{
<head>
float:left;
&GR3LZZ 3?XLK&G
%W%+-#,
text-align:left;
</head>
<body>
}
#header{
width:100%;
</div>
border: 0px;
height:50px;
<div><img src="images/jump1.jpg"/></div>
<div>
</div>
#main{
<div>
</div>
<div>
</div>
background-color: grey;
height: 500px;
</div>
my_style.css
index.html
jeste tutaj
75
rozwizanie wiczenia
Rozwizanie
wiczenia
Otwrz swj ulubiony edytor tekstu, aby utworzy potrzebne pliki HTML i CSS. Poniej znajduje
si kod na dobry pocztek z brakujcymi niektrymi kluczowymi elementami. Dodaj do strony
nastpujce elementy, tak aby Twoja strona wygldaa jak w naszym rozwizaniu:
znacznik doczajcy bibliotek jQuery w wersji 1.7;
znacznik <div> z identyfikatorem header;
znacznik <div> z identyfikatorem main;
inny obraz w obrbie kadego z czterech elementw div, wewntrz main div.
S
Twoje pliki HTML i CS
da
gl
wy
y
powinn
nastpujco:
div{
float:left;
%W%+-#,
text-align:left;
border: solid #000 3px;
<html>
<head>
#header{
&GR3LZZ 3?XLK&G
width:100%;
Element div
der
z identyfikatorem hea
<body>
<div id="header">
<div id="main">
<div>
<div>
<script src="scripts/jquery-1.7.min.js"></script>
76
Rozdzia 2.
height: 500px;
}
Elementy div
dla obrazw
</div>
Docz bibliotek
jQuery.
}
background-color: grey;
Element div
z identyfikatorem main
<div><img src="images/jump1.jpg"/></div>
<div>
height:50px;
#main{
border: 0px;
index.html
my_style.css
selektory i metody
Jazda prbna
Otwrz stron w swojej ulubionej przegldarce i upewnij si, e wszystko dziaa. Da
nam to okazj, aby zwrci uwag na nasze zaoenia co do funkcjonowania strony.
Element div
z identyfikatorem
header
Element div
z identyfikatorem
main zawierajcy...
...cztery elementy
div dla obrazw
WYSIL
SZARE KOMRKI
Teraz mamy na naszej stronie cztery obszary z obrazami.
Co zrobi, eby byy aktywne?
jeste tutaj
77
niech klika
emy
Do tego elementu chc k.
doczy zdarzenie clic
Funkcja to sposb na
zgromadzenie razem
wielu rzeczy, ktre
chcemy zrobi.
$("p").click( function() {
3& V3?ZFJ
Polecenia alert uywamy,
kiedy chcemy sprawdzi,
czy nasza funkcja zostaa
wywoana poprawnie.
});
Zamykajcego nawiasu
klamrowego uywamy,
aby zakoczy blok kodu.
78
Rozdzia 2.
Otwierajcych nawiasw
klamrowych uywamy, aby
rozpocz blok kodu. Blok
bardzo przypomina akapit
zawiera powizane ze sob
instrukcje.
Wszystko, co ws
midzy znaki cu tawimy
dz
pokae si w no ysowu,
wym
oknie.
selektory i metody
Magnesiki z kodem
Poukadaj magnesiki, aby utworzyy kod, dziki ktremu wszystkie elementy
div bd aktywne. Kiedy div zostanie kliknity, uyj funkcji alert jzyka
JavaScript, by wywietli tekst Zostaem kliknity. Kilka z magnesikw
umiecilimy ju na waciwych miejscach.
alert
div
<script>
*+
,
$("
)* +
+0
*+
F!
G#
</script>
+#
.+0
.+0
("
click(
,
#
*
jeste tutaj
79
ik <script>.
Otwrz znaczn
<script>
)* +
$("
# *
div
+#
*+
click(
*+
Uaktywnij
>.
znaczniki <div
alert
.+0
("
F!
G#
ki
armowe, dzi
Poka okno al y si, e funkcja
m
ie
w
do
czemu
a.
click zadziaa
.+0
</script>
znik <script>
Zamknij znac
80
Rozdzia 2.
+0
selektory i metody
Zrb to!
<html>
<head>
&GR3LZZ 3?XLK&G
<link href="style/my_style.css" rel="stylesheet">
</head>
<body>
<div id="header">
%-GV LS3R3LZZ 3?XLK%-G
</div>
<div id="main">
<div><img src="images/jump1.jpg"/></div>
<div><img src="images/jump2.jpg"/></div>
<div><img src="images/jump3.jpg"/></div>
?@GW L3WKS9#S#WKGK?@G
</div>
<script src="scripts/jquery-1.7.min.js"></script>
<script >
)*
+#
* *+,
Funkcja alarmowa wywouje
w przegldarce okno
z komunikatem. Bdziemy
z niej korzysta za kadym
razem, kiedy bdziemy
chcieli sprawdzi wyniki
dziaania elementw, ktre
dodalimy do kodu, takich
jak zmienne i funkcje.
)*+#
* *+,
*F!
G#+0
.+0
Wstaw te wiersze
midzy znaczniki
<script>, aby elementy
div stay si aktywne.
Niektrzy programici
komentarze pomagajc dodaj
e
zidentyfikowa nawias
y
zwyke i klamrowe. Jes
kwesti stylu programot to
i zaley wycznie od wania
Ciebie.
index.html
jeste tutaj
81
jazda prbna
Jazda prbna
Otwrz stron w swojej ulubionej przegldarce, aby upewni si, e wszystko dziaa.
Teraz kiedy klikniesz obrazy na stronie powiniene zobaczy komunikat alarmowy.
re dodae.
Oto okno alarmowe, ktk dziaa.
clic
a
kcj
fun
a,
wid
Jak
$("div").click( );
W rzeczywistoci nawet nie musimy klika obrazw, aby otrzyma komunikat.
Struktura strony zawiera elementy div zagniedone w kolejnych elementach
div, tak wic kiedy klikniesz jeden z nich, interpreter pomyli, e klikne
oba, i w rezultacie moesz uzyska dwa komunikaty. Najwyraniej musimy
doprecyzowa, czego chcemy od jQuery...
82
Rozdzia 2.
selektory i metody
Bd bardziej konkretny
Problem polega na tym, e nie okrelilimy precyzyjnie naszego wyboru. Jak wic
mona si dosta do czterech podsekcji i jednoczenie pomin wiksz sekcj
div? Przypomnijmy z rozdziau 1., e selektory jQuery korzystaj z klas oraz
identyfikatorw CSS. Bdziemy mogli dokadniej okreli, ktrymi elementami
jQuery powinien si zaj, kiedy dodamy do nich klasy oraz identyfikatory.
div
div
div
div
div
WYSIL
SZARE KOMRKI
Czy w celu okrelenia powyszych elementw div uyjesz klas oraz
identyfikatorw CSS oddzielnie, czy te cznie? Ktry sposb bdzie
najlepszy i dlaczego?
jeste tutaj
83
oznaczenie klasy
Struktura drzewa
DOM strony
?
Drzewo DOM
1
div
!!
!!
"1
1
.nav {
display: block;
border: solid #00f 1px;
width: 100%;
}
Kod CSS
84
Rozdzia 2.
$(".nav").click( function(){
3& 3JR&R
});
Kod jQuery
selektory i metody
ID-entyfikowanie elementw
Selektor identyfikujcy jest uywany w celu zidentyfikowania pojedynczego i niepowtarzalnego
elementu na stronie. W jQuery, tak samo jak i w CSS, do oznaczania selektora identyfikujcego
uywa si znaku #. Identyfikatory sprawdzaj si idealnie, jeli chcesz okreli konkretny
element albo na stronie istnieje jeden rodzaj elementw taki jak nagwek albo stopka strony.
Selektory identyfikujce
wskazuj jeden niepowtarzalny
element.
#my_blurb {
display: block;
border: 0px;
height: 50%;
}
$("#my_blurb").slideToggle("slow");
Kod CSS
Kod jQuery
Identyfikator
jeste tutaj
85
Rozwizanie
Zaznacz kwadraty w odpowiednich kolumnach, aby okreli, do czego mona
uywa klas, a do czego identyfikatorw. Pamitaj, e czasami klasy oraz
identyfikatory mog suy do tych samych celw
Klasa
Identyfikator
Nie istniej
gupie pytania
O:
P:
O:
86
Rozdzia 2.
selektory i metody
Pogawdki przy kominku
Selektor CSS:
Selektor jQuery:
jeste tutaj
87
zaczynamy spina
Arkusz stylw
przedstawia
i umiejscawia klas
slideshow za pomoc
selektora.
Styl = CSS
Skrypt = jQuery
(i JavaScript)
$(".slideshow").slideUp()
.slideshow{
float: left;
height: 100;
}
88
Rozdzia 2.
selektory i metody
Zaostrz owek
div{
float:left;
Zaktualizuj struktur, styl i skrypt swojej strony, tak aby tylko cztery
sekcje div byy aktywne. W pliku CSS utwrz klas CSS (o nazwie
guess_box) i zastosuj j w blokach html i script. Wyglda na
to, e jeden z naszych elementw div straci swj atrybut ID. Czy
domylasz si, ktry to z nich, i czy moesz go przywrci?
%W%+-#,
text-align:left;
border: solid #000 3px;
}
#header{
width:100%;
border: 0px;
height:50px;
<html>
}
#main{
<head>
background-color: grey;
&GR3LZZ 3?XLK&G
height: 500px;
</head>
<body>
<div id="header">
height 245px;
>
<div
><img src="images/jump1.jpg"/></div>
<div
><img src="images/jump2.jpg"/></div>
<div
><img src="images/jump3.jpg"/></div>
my_style.css
?@GW L3WKS9#S#WKGK?@G
</div>
<script src="scripts/jquery-1.7.min.js"></script>
<script>
$(document).ready(function() {
$("
").click(function() {
3& 3JR&R
});
});
</script>
</body>
</html>
index.html
jeste tutaj
89
zaostrz rozwizanie
Zaostrz owek
div{
Rozwizanie
float:left;
%W%+-#,
text-align:left;
border: solid #000 3px;
}
#header{
width:100%;
border: 0px;
height:50px;
<html>
}
#main{
<head>
background-color: grey;
&GR3LZZ 3?XLK&G
height: 500px;
</head>
guess_box{
<body>
<div id="header">
height 245px;
</div>
id="main"
<div
<div
<div
>
class="guess_box"
class="guess_box"
><img src="images/jump1.jpg"/></div>
<div
><img src="images/jump3.jpg"/></div>
class="guess_box"
class=
"gues
s_box
"
?@GW L3WKS9#S#WKGK?@G
</div>
<script src="scripts/jquery-1.7.min.js"></script>
<script>
$(document).ready(function() {
$("
guess_box
").click(function() {
3& 3JR&R
});
});
</script>
</body>
</html>
index.html
90
Rozdzia 2.
my_style.css
><img src="images/jump2.jpg"/></div>
Oto miejsce, y
w ktrym nale a pl
doda klas dl tem.
ba
z ukrytym ra jest
Ich wysoko k
taka sama ja zw
wysoko obrasi
znajdujcych , dziki
w tych polach o jest
tk
czemu wszys ne.
na
w
yr
w
ie
dn
a
selektory i metody
WYSIL
SZARE KOMRKI
Bdziesz musia utworzy i przechowa gdzie
wiadomo, ktra bdzie wywietlana Twoim gociom.
W jaki sposb mgby to zrobi?
jeste tutaj
91
Po sowie kluczowym
var naley poda
nazw zmiennej.
W taki sposb w kodzie
nadajemy zmiennej warto.
Zmiennej nadajemy
nazw, dziki czemu
pniej bdziemy
si mogli do niej
odwoywa w skrypcie.
W zmiennej
umieszczamy warto,
uywajc znaku
rwnoci.
=250
pts
92
Rozdzia 2.
pts
Jeeli chcesz
dowiedzie si wicej
o zmiennych i funkcjach
matematycznych
w JavaScripcie, signij
po Rusz gow! JavaScript.
selektory i metody
cz za pomoc konkatenacji
W naszych skryptach jQuery bdziemy przechowywa rne rodzaje danych: liczby,
napisy, wartoci prawda albo fasz. W wielu przypadkach, zwaszcza gdy zajdzie
potrzeba wywietlania gociom rnych komunikatw, bdziemy czy HTML
z innymi rodzajami danych, co da naszym stronom internetowym jeszcze wiksze
moliwoci. Jak wic moemy zabra si za czenie zmiennych z innymi wartociami?
Uyjemy konkatenacji. Wyobra sobie, e mamy gr komputerow ze zmienn pts,
ktra przechowuje najlepszy wynik, i e musimy wywietli go zwycizcy.
Musimy zestawi ze sob (uy konkatenacji)
trzy informacje.
"</strong>"
pts
W rezultacie otrzymamy:
Kiedy nadajemy warto
tekstow albo HTML,
uywamy cudzysoww.
Kiedy odwoujemy
si do zmiennej,
uywamy jej nazwy
bez cudzysowu.
wiczenie
Znak + umoliwia
konkatenacj (czyli
poczenie) tekstw, liczb,
zmiennych i wielu innych
elementw.
Przedstawimy Ci kod JavaScript, ktry tworzy zmienn o nazwie discount przechowujc liczb losow
z zakresu od 5 do 10. Napisz kod dla zmiennej discount_msg, ktra wywietli komunikat oraz zmienn
losow. Upewnij si, e wiadomo o rabacie pojawi si wewntrz elementu akapitu.
@3 ?L93%& 3% 3?
jeste tutaj
93
rozwizanie wiczenia
Przedstawimy Ci kod JavaScript, ktry tworzy zmienn o nazwie discount przechowujc liczb losow
z zakresu od 5 do 10. Napisz kod dla zmiennej discount_msg, ktra wywietli komunikat oraz zmienn
Rozwizanie losow. Upewnij si, e wiadomo o rabacie pojawi si wewntrz elementu akapitu.
wiczenia
Zrb to!
<script>
$(document).ready(function() {
Utwrz nowe
zmienne
JavaScript.
$(".guess_box").click( function() {
! ?#
**?#*+H@+I@+0
! "!B=J1I! IK0
*! +0
});
});
</script>
index.html
94
Rozdzia 2.
selektory i metody
Wynikowy kod
HTML widziany
w drzewie
DOM.
wiczenie
Wiedzc ju co nieco o selektorach i majc now wiedz na temat metody append, napisz kod,
ktry doczy zmienn discount_msg do elementu guess_box.
jeste tutaj
95
rozwizanie wiczenia
Rozwizanie
wiczenia
$(".guess_box").append(discount_msg);
.
metod jQuery
append jest
ne
r
ry
ue
jQ
w
.
Aby robi
tasz z metod
rzeczy, korzys
Nie istniej
gupie pytania
O:
P:
O:
96
Rozdzia 2.
O:
O:
selektory i metody
Jazda prbna
Otwrz stron w swojej ulubionej przegldarce, aby upewni si, e wszystko dziaa. Zwr
szczegln uwag na wywietlany alarm, co pozwoli Ci oceni, czy zmienna discount_msg
przyjmuje prawidowe wartoci.
<script>
$(document).ready(function() {
$(".guess_box").click( function() {
@3 ?L93%& 3% 3?
@3 ?L9AW#GFIS 383?L9K#G
alert(discount_msg);
To suy tylko do
sprawdzenia zmiennej.
$(".guess_box").append(discount_msg);
});
Nasz selektor jest wystarczajco
ale
});
precyzyjny, aby uchwyci klas, c
e koczymy, zmieniaj
ltaci
rezu
w
</script>
sekcje w klasie.
wszystkie
Musimy doczy zmienn discount_msg tylko do tej sekcji, ktra zostaa kliknita. Jak wic
moemy wybra tylko kliknit sekcj i doczy do niej zmienn discount_msg?
jeste tutaj
97
w idealnym wiecie
98
Rozdzia 2.
selektory i metody
Daj mi $(this)
W rozdziale tym przygldamy si selektorom jQuery i temu, jak zwracaj one
elementy, z ktrych korzystaj metody jQuery. Bardzo czsto chcemy naprawd
dokadnie wskaza, ktry element wybieramy. Kiedy potrzebna jest precyzja,
najprostszy do napisania jest selektor $(this) (w kocu wszystko, co trzeba
zapamita, to tylko angielski zaimek this). Selektor $(this) stanowi atwy
sposb na wskazanie biecego elementu.
this
$(
$(this)
Uruchom t funkcj,
kiedy zostanie
wywoana metoda.
$("#myImg").click( function(){
$(this).slideUp();
padku
We biecy element (w tym przy
});
z
#myImg) znajdujcy si wewntr
naszej funkcji.
k, jak
Zarwno clic metodami
i slideUp s , e masz
jQuery. Wieszz metod
do czynienia kiedy
albo funkcj, sy okrge.
widzisz nawia
Porady maniaka
jeste tutaj
99
Zrb to!
<script type="text/javascript">
$(document).ready(function() {
$(".guess_box").click( function() {
@3 ?L93%& 3% 3?
@3 ?L9AW#GFIS 383?L9K#G
alert(discount_msg);
)*?!+#
*! "!+0
});
});//koniec doc ready
</script>
Jazda prbna
index.html
Otwrz stron w swojej ulubionej przegldarce, aby upewni si, e wszystko dziaa. Zwr szczegln uwag
na wywietlany alarm, co pozwoli Ci oceni, czy zmienna discount_msg przyjmuje prawidowe wartoci. Nie
zapomnij klikn kilka razy, aby sprawdzi, czy dopisywanie liczby losowej do tej zmiennej te dziaa poprawnie.
100
Rozdzia 2.
selektory i metody
Dobre pytanie!
Prowadzi nas ono do ostatniej pozycji na naszej licie rzeczy do zrobienia:
WYSIL
SZARE KOMRKI
Jak mylisz, w jaki sposb mona usun ostatni komunikat?
jeste tutaj
101
presto, zmianna
Oto, jak wyglda strona w przegldarce oraz kod, przy uyciu ktrego zostaa ona utworzona:
Kod HTML
Widok w przegldarce
$("#btnRemove").click(function(){
$("li").remove();
});
3
Widok w przegldarce
Kod HTML
<div>Lista rzeczy do zrobienia</div>
<ol>
</ol>
<button id="btnRemove">
WYSIL
SZARE KOMRKI
Ktrego selektora powiniene uy, aby usun ze strony
wycznie komunikaty o rabatach?
102
Rozdzia 2.
selektory i metody
$("div p")
Selektor po prawej
to dziecko.
Pozostaw odstp
midzy nazw
elementu rodzica
a nazw elementu
dziecka.
?
1
$("div div")
div
$("div p#my_blurb")
div
div
"1
1
$("div p")
(czy w zwizku
z tym s to
pradivy?).
apie wszystkie
elementy p, ktre s
dziemi elementu div.
Zaostrz owek
Napisz instrukcj, ktra usunie ostatni akapit w drzewie DOM strony z promocj
Skacz z radoci, korzystajc z selektora potomka.
zaostrz rozwizanie
Zaostrz owek
Aby wybra akapit, ktry dodae, rozpocznij od selektora klasy
.guess_box, po ktrym znajdzie si selektor potomka p. Nastpnie uyj
metody remove w celu usunicia ze strony wszystkich elementw p
znajdujcych si w dowolnym elemencie klasy guess_box.
Rozwizanie
$(".guess_box p").remove();
?
1
div id="header"
?9
div class=
!!"1;
Jeli uytkownik
kliknie tutaj,
doczysz akapit
tutaj.
Rozdzia 2.
p
104
div class=
!!"1;
div class=
!!"1;
div class=
!!"1;
selektory i metody
Zaostrz owek
Twoje zadanie polega na zadecydowaniu, gdzie powinna si znale metoda
remove. Wstaw odpowiedni instrukcj w wierszu 1., 2. albo 3. Nastpnie
wyjanij, dlaczego j tam umiecie. Zastanw si, kiedy trzeba usun akapit,
po czym w drodze eliminacji wybierz waciwe miejsce, w ktrym to nastpi.
<script>
$(document).ready(function() {
1.
$(".guess_box").click( function() {
2.
@3 ?L93%& 3% 3?
@3 ?L9AW#GFIS 383?L9K#G
alert(discount_msg);
$(this).append(discount_msg);
3.
});
});
</script>
index.html
zaostrz rozwizanie
Zaostrz owek
Rozwizanie
<script>
$(document).ready(function() {
1.
$(".guess_box").click( function() {
2.
$(".guess_box p").remove();
3.
});
});
</script>
index.html
Instrukcja remove nie moe by w wierszu 1., poniewa znalazaby si poza funkcj
click elementu guess_box. Instrukcja nie moe si te znale w wierszu 3., gdy
usunaby to, co przed chwil dodaem. Chc usun ostatni komunikat o rabacie przed
wywietleniem nastpnego, tak wic umieszcz remove w pierwszym wierszu bloku
z kodem metody click elementu guess_box (czyli midzy nawiasami klamrowymi).
2EHMU]\MWR
106
Rozdzia 2.
selektory i metody
Nie istniej
gupie pytania
O:
O:
jazda prbna
Jazda prbna
Dodaj wiersz kodu, ktry wanie napisae, do pliku index.html. Nastpnie otwrz
stron w swojej ulubionej przegldarce, aby upewni si, czy wszystko dziaa.
Kliknij klika razy w celu sprawdzenia, czy dopisywanie liczby losowej do zmiennej
discount_msg rwnie odbywa si poprawnie i czy poprzednie wartoci rabatw
s skutecznie usuwane przed doczeniem nowego rabatu.
108
Rozdzia 2.
selektory i metody
Od: Emilia
Temat:
Moja witryna jest o wiele
Bardzo Ci dzikuj, e to dla mnie zrobie.
moich zdj tak samo,
z
lepsza. Mam nadziej, e ludzie ciesz si
jak ja ciesz si z nowej strony!
-Emilia
graficznym, ktry
>P.S. Doczam autoportret ze sprztem foto
Nagrd za odgadnicie,
...
stron
now
moj
m
czya
zrobiam, jak zoba
co robi, nie bdzie!
Rozdzia 2.
Selektory
$(this)
y element.
Wybiera biec
dzie
is) w kodzie b go,
Znaczenie $(th
te
od
zalenoci
ego.
si zmienia w
ni
do
e
ni
a
odwo
skd nastpuje
Metody
jQuery
o
Metoda jQuery to kod wielokrotneg
e
otec
bibli
w
y
wan
inio
uycia zdef
ry
jQuery. Metod uywa si w jQue
enia
robi
do
pcie
Scri
i w Java
e
rnych rzeczy. Pomyl o metodzi
cie
prze
zi
chod
iku
own
jak o czas
i
o wykonywanie rnych czynnoc
ch.
owy
rnet
inte
na stronach
.append docza okrelon
zawarto do drzewa DOM.
Zawarto zostanie dodana na
kocu elementu, ktry j wywoa.
wa
.remove usuwa element z drze
.
DOM
110
Rozdzia 2.
3.=GDU]HQLDLbIXQNFMHM4XHU\
Niech si co dzieje
na Twojej stronie
Ile jeszcze razy
mam to wykopa?
111
drobiazgowy ksigowy
':
9
'&
'
'
'
'&
'3
8'
+
A
+
+
'
7
'
3
'
9
'
+
B
*+'
3
-D
'
'
112
Rozdzia 3.
Klik!
Klik!
Klik!
Klik!
Klik!
Zaostrz owek
Przysza pora na kolejn list wymaga. Wiesz, co robi: spjrz jeszcze raz na
e-mail od Emilii i odszukaj wszystkie nowe funkcje, o ktre prosi. Napisz, jakie
s to wedug Ciebie funkcje.
Wymagania:
jeste tutaj
113
zaostrz rozwizanie
Zaostrz owek
Rozwizanie
Przysza pora na kolejn list wymaga. Wiesz, co robi: spjrz jeszcze raz na e-mail
od Emilii i odszukaj wszystkie nowe funkcje, o ktre prosi. Napisz, jakie s to wedug
Ciebie funkcje. Oto nasze rozwizanie:
Wymagania:
Uytkownicy powinni mie tylko jedn szans na znalezienie rabatu po zaadowaniu strony. Musimy
ich wic powstrzyma przed klikniciem wicej ni raz, eby nie otrzymali wikszej bonifikaty.
Kiedy uytkownik zdecyduje si ju klikn jakie pole, powinien pokaza si komunikat z informacj,
czy trafi w rabat. Jeli tak, naley pokaza mu kod, aby mg skorzysta z niego w swoim
zamwieniu.
Zamiast zmiennej wysokoci rabatu bdzie to standardowe 20%, wic zamiast wartoci
procentowej naley pokaza uytkownikowi kod rabatowy.
WYSIL
SZARE KOMRKI
Wiesz ju, jak doda do strony kliknicie. Jak jednak zagwarantowa, e uytkownik bdzie mg
klikn tylko raz?
W poprzednich rozdziaach nauczye si te, jak za pomoc kliknicia uruchomi kod. Czy potrafisz
znale sposb, ktry pomoe nam ukoczy nasze zadanie?
114
Rozdzia 3.
Klik!
Przycisk HTML
$("#btnSubmit").click( function(){
KK9SS3RXR?S9
$("div").toggle();
});
jeste tutaj
115
$("#showMessage").click(function() {
3& 3JR&R^
});
1
Kliknito element.
Klik!
Uytkownik widzi, e co
wydarzyo si na stronie.
Za kulisami
3
2
Interpreter JavaScriptu
uruchamia funkcj wskazan
przez suchacza zdarze.
Musz
wywietli okno
alarmowe!
Usyszaem
kliknicie.
116
Rozdzia 3.
Interpreter
JavaScriptu
Wizanie zdarzenia
Dodawanie zdarzenia do jakiego elementu nazywamy wizaniem zdarzenia
z tym elementem. Gdy to zrobimy, suchacz zdarze bdzie wiedzia, jak
funkcj powinien kaza wywoa interpreterowi JavaScriptu.
Istniej dwa sposoby wizania zdarze z elementami.
Metoda 1.
Korzystamy z tej metody, aby dodawa zdarzenia do
elementw, kiedy strona jest pobierana.
Sposb ten jest czsto nazywany metod zoon.
$("#myElement").click( function() {
alert($(this).text());
});
Metoda 2.
Metody tej uywamy podobnie jak metody 1., ale mona
z niej te korzysta, aby wiza zdarzenia z elementami,
ktre zostay dodane do strony ju po jej zaadowaniu, na
przykad przy tworzeniu nowych elementw drzewa DOM.
$("#myElement").bind('click', function() {
alert($(this).text());
});
2EHMU]\MWR
jQuery oferuje wiele podobnych skrtw, ktre pomagaj zachowa czysty kod. Zostay one dodane
wycznie dla wygody uytkownikw i maj swoje ograniczenia. Metod 2. naley stosowa w celu
dodawania zdarze do nowych elementw drzewa DOM, ktre zostay utworzone za pomoc kodu, takich jak
aktywne rysunki albo nowe interaktywne pozycje na listach.
jeste tutaj
117
gotowy na zdarzenia
Wyzwalanie zdarzenia
Zdarzenia na dowolnej stronie mona wyzwala na wiele
rnych sposobw. W rzeczywistoci caa Twoja przegldarka
obfituje w zdarzenia i niemal kade z nich moe wywoywa
nastpne!
''
''
6
7'
6
7'
6
&6
klawiatury
'&
7'
'
Pobieranie
dokumentu
'
118
Rozdzia 3.
Nie istniej
gupie pytania
P: A co z funkcjami
wewntrz zdarze?
O:
P:
Co moe wyzwoli
zdarzenie (tj. sprawi, e
zdarzenie zajdzie) na stronie?
O: W witrynie jquery.com
w dziale Documentation/Events.
P:
O:
W jQuery zdarzenia
pogrupowano w pi rnych
kategorii: zdarzenia przegldarki,
pobierania dokumentu,
formularzy, klawiatury i myszy.
jeste tutaj
119
zdarzenie w zblieniu
Zdarzenie w zblieniu
W tym tygodniu wywiad na temat:
Co jest tak wyjtkowego w zdarzeniach?
120
Rozdzia 3.
ie
Sp
ojn
ok
jeste tutaj
121
Usuwanie zdarzenia
Rwnie czsto, jak bdziesz potrzebowa powiza zdarzenia z elementami, bdziesz te
potrzebowa usun zdarzenie z elementu, na przykad aby uytkownicy nie klikali dwa razy
przycisku wysyania formularza albo eby pozwoli im na zrobienie czego na stronie tylko
raz. Wanie czego takiego potrzebujemy do spenienia nowych wymaga Skacz z radoci.
Po powizaniu zdarzenia z elementem bdziemy mogli je od tego elementu odpi, eby
ju nie byo wywoywane.
$("#myElement").bind('click', function() {
alert($(this).text());
Usu zdarzenie
z myElement.
});
click
$("#myElement").unbind('click');
$("#myElement").bind('focus', function() {
alert("Mam fokus!");
Dodaj suchacza zdarzenia
});
click do elementu
$("#myElement").click(function(){
3& 3JR&R
});
$("#myElement").unbind();
122
Rozdzia 3.
o identyfikatorze
myElement.
Powiedz przegldarce,
eby nie nasuchiwaa ju
zdarze dla myElement.
owaniu
szans na znalezienie rabatu po zaad nie
eby
Uytkownicy powinni mie tylko jedn
raz,
ni
ej
wic
m
icie
klikn
przed
strony. Musimy ich wic powstrzyma
otrzymali wikszej bonifikaty.
Zaostrz owek
Korzystajc ze swojej wiedzy o $(this) oraz tego, czego nauczye si na
temat zdarze, zaktualizuj kod z poprzedniego rozdziau i dodaj instrukcj,
ktra usunie zdarzenie kliknicia z sekcji div.
$(".guess_box").click( function() {
$(".guess_box p").remove();
@3 A93%& 3% 3?
@3 ?L9#GFIS 383A9K#G
$(this).append(discount);
});
index.html
zaostrz rozwizanie
Zaostrz owek
Rozwizanie
$(".guess_box").click( function() {
$(".guess_box p").remove();
@3 A93%& 3% 3?
@3 ?L9#GFIS 383A9K#G
$(this).append(discount);
$(this).unbind("click");
});
index.html
Jazda prbna
Zaktualizuj swj plik index.html nowym kodem, zapisz go, a nastpnie poklikaj
rne miejsca strony, aby upewni si, e wszystko dziaa, jak naley.
124
Rozdzia 3.
WYSIL
SZARE KOMRKI
Jak mona usun zdarzenie kliknicia
z kadego pola po tym, jak uytkownik kliknie
jedno z nich? Czy trzeba po kolei zaj si
kadym elementem?
Selektor jQuery
Uruchom t funkcj
obsugi.
$(".nav_item").each(function(){
$(this).hide();
Uruchom ten kod dla
kadego elementu, ktry
pasuje do naszego
selektora.
});
126
Rozdzia 3.
gupie pytania
O:
O:
Zaostrz owek
Napisz korzystajcy z iteracji kod, ktry usunie zdarzenie kliknicia z kadego
aktywnego pola na stronie Skacz z radoci. Przeczytaj te starannie swj kod,
aby sprawdzi, czy nie istniej w nim fragmenty, ktre s ju niepotrzebne.
$(".guess_box").click( function() {
$(".guess_box p").remove();
@3 A93%& 3% 3?
@3 ?L9#GFIS 383A9K#G
$(this).append(discount);
$(this).unbind('click');
});
index.html
zaostrz rozwizanie
Zaostrz owek
Rozwizanie
alasz
Poniewa pozwtylko na
m
ko
ni
w
ko
yt
u
ie, nie trzeba
jedno kliknic kodu .remove!
a
ow
os
ju st
$(".guess_box").click( function(){
$(".guess_box p").remove();
@3 A93%& 3% 3?
@3 ?L9#GFIS 383A9K#G
$(this).append(discount);
)*#
!!"1;+#
?* *+,
ent
tli kady elem
Pobierz w p usu z niego
.guess_box i k.
zdarzenie clic
)*?!+#1*M
M+0
});
});
index.html
Zaczekaj!
Czy Twj plik HTML nie za
bardzo obrasta w skrypty?
Zanim przejdziesz dalej,
naprawd powinnimy sprbowa
znale jaki sposb na jego
odchudzenie...
128
Rozdzia 3.
wiczenie
Wiesz ju, jak docza pliki CSS. Widziae te, jak doczy bibliotek jQuery. Doczanie wasnego pliku
z JavaScriptem (jQuery) w niczym si od tego nie rni!
W gwnym katalogu ze swoim projektem powiniene mie ju folder o nazwie scripts (ten, w ktrym
umiecie bibliotek jQuery).
1
Cay kod w JavaScripcie i jQuery z pliku index.html przenie do tego nowego pliku.
Nie ma potrzeby umieszcza w nim znacznikw <script> i </script>.
rozwizanie wiczenia
Wiesz ju, jak docza pliki CSS. Widziae te, jak doczy bibliotek jQuery. Doczanie
wasnego pliku z JavaScriptem (jQuery) w niczym si od tego nie rni!
Rozwizanie
wiczenia
1
Cay kod w JavaScripcie i jQuery z pliku index.html przenie do tego nowego pliku.
Nie ma potrzeby umieszcza w nim znacznikw <script> i </script>.
$(document).ready(function() {
$(".guess_box").click( function() {
@3 A93%& 3% 3?
@3 ?L9#GFIS 383A9K#G
$(this).append(discount);
$(".guess_box").each( function(){
$(this).unbind('click');
});
});
});
my_scripts.js
tego
woanie do
miecisz odch plikw HTML
u
z
ra
te
i
Jel
ym ze swoi sz mie w nich
pliku w kad
cie, bdzie kodu jQuery. Nie
ek
oj
pr
w tym
u.
samego
go
te
kadym plik
do
dostp
pisywa w
ze
pr
ju
musisz go
130
Rozdzia 3.
<!DOCTYPE html>
<html>
<head>
&GR3LZZ 3?XLK&G
<link href="styles/styles.css" rel="stylesheet">
</head>
<body>
<div id="header">
%-GV LS3R3LZZ 3?XLK%-G
</div>
<div id="main ">
<div class="guess_box"><img src="images/jump1.jpg"/></div>
<div class="guess_box"><img src="images/jump2.jpg"/></div>
<div class="guess_box"><img src="images/jump3.jpg"/></div>
?@L&3W9A8,GW L3WKS9#S#WKGK?@G
</div>
<script src="scripts/jquery-1.7.min.js"></script>
! ! ! !"! !#!!
</body>
<html>
index.html
jeste tutaj
131
gupie pytania
!
"!
#!
O:
O:
$!
index.html
scripts
jquery-1.7.min.js
P:
my_scripts.js
my_style.css
Rozdzia 3.
O:
S to znaczniki HTML,
a poniewa plik ten zosta
doczony do naszej strony jako
plik JavaScript, przegldarka
wie ju, czego ma si w nim
spodziewa.
styles
132
Magnesiki z kodem
Uyj poniszych magnesikw w celu oddzielenia od siebie kodw
HTML, CSS i jQuery. Sprawd, czy dla kadego z plikw zrobie to
poprawnie.
<!DOCTYPE html>
<html>
my_num
&GR3LZZ 3?XLK&G
<link href="styles/styles.css" rel="stylesheet">
this
</head>
<div id="header">
%-GV LS3R3LZZ 3?XLK%-G
});
<div id="main">
<div
<head>
><img src="images/jump1.jpg"/></div>
</div>
<script src="scripts/
<
"></script>
src="scripts/my_scripts.js"></script>
</body>
<html>
</div>
index.html
$(document).ready(function() {
$(
).click( function() {
jquery-1.7.min.js
).append(discount);
<body>
$(".guess_box").each( function(){
class="guess_box"
$(this).unbind('click');
});
script
});
class="guess_box"
my_scripts.js
<!DOCTYPE html>
<html>
<head>
&GR3LZZ 3?XLK&G
<link href="styles/styles.css" rel="stylesheet">
</head>
<body>
<div id="header">
</div>
<div id="main">
<div class="guess_box" ><img src="images/jump1.jpg"/></div>
<div class="guess_box"><img src="images/jump2.jpg"/></div>
<div class="guess_box"><img src="images/jump3.jpg"/></div>
?@GW L3WKS9#S#WKGK?@G
class="guess_box"
</div>
<script src="scripts/ jquery-1.7.min.js "></script>
< script src="scripts/my_scripts.js"></script>
</body>
<html>
index.html
$(document).ready(function() {
$( ".guess_box" ).click( function() {
my_num
@3 3%& 3% 3?
@3 ?L9#GFIS 383A9K#G
$( this ).append(discount);
$(".guess_box").each( function(){
$(this).unbind('click');
});
});
});
my_scripts.js
134
Rozdzia 3.
Dodajemy funkcje
Teraz, kiedy ju wiemy, jak dodawa do strony zdarzenia i je usuwa,
spjrzmy na inny wany skadnik, ktry pozwoli nam udoskonali
nasz stron: funkcje.
Funkcja to blok kodu oddzielony od jego pozostaej czci
ktry w kadej chwili mona uruchomi w skrypcie.
Moesz wierzy lub nie, ale w ksice tej korzystalimy z funkcji
niemal od samego pocztku. Pamitasz co takiego?
$(document).ready(function(){
Wszystko to
wywoywalimy
ju
w naszym kodzie
samego pocztku od
ksiki.
$("#clickMe").click(function(){
KK93SLXZ I8^
});
Tylko spjrz
na te funkcje!
$(".guess_box").click(function(){
KK93SLXZ I8^
});
});
136
Rozdzia 3.
Funkcje niestandardowe
umoliwiaj zorganizowanie
fragmentu kodu w jQuery
pod okrelon nazw,
dziki czemu w atwy
sposb mona go uywa
wielokrotnie.
Nadaj nazw
funkcji.
=
Otwrz funkcj
nawiasem
klamrowym.
*+
?
}
Funkcj zamkn
nawiasem klamij prawym
rowym.
,
to
Nawiasy okrge dzenie,
sposb na stwier ienia
e mamy do czyn
z funkcj.
Deklaracja funkcji
Pierwsza metoda to deklaracja funkcji, ktra definiuje funkcj
bez potrzeby przypisania jej do zmiennej. Zaczyna si ona
sowem kluczowym function, jak to pokazano poniej.
function myFunc1(){
$("div").hide();
}
Nazwa funkcji
Wyraenie funkcyjne
Nazwane wyraenie funkcyjne definiuje funkcj
jako cz skadni wikszego wyraenia (zwykle
przypisania wartoci funkcji do zmiennej):
j funkcja przypisuje
zmiennej warto.
Dobre spostrzeenia.
Nazywanie funkcji umoliwia
wywoywanie ich z wicej ni
tylko jednego miejsca w kodzie.
Nienazwane funkcje, zwane te
funkcjami anonimowymi, maj
raczej ograniczone zastosowanie.
Spjrzmy nieco dokadniej na
funkcje anonimowe, ebymy mogli
stwierdzi, jak brak nazwy wpywa
na te ograniczenia.
co si kryje w nazwie?
Funkcja anonimowa
Funkcje anonimowe albo samowywoujce si nie maj nazw
i s od razu wywoywane w chwili, w ktrej zostan napotkane
w kodzie. Poza tym zmienne zadeklarowane wewntrz tych funkcji
s dostpne tylko wtedy, gdy dana funkcja dziaa.
$(document).ready(function() {
$(".guess_box").click( function() {
@3 A93%& 3% 3?
@3 ?L9#GFIS 383A9K#G
$(this).append(discount);
Jeli zechcemy uy
tego kodu gdzie
indziej, bdziemy
musieli go powieli.
Zmienne
$(".guess_box").each( function(){
$(this).unbind('click');
});
});
});
my_scripts.js
2EHMU]\MWR
Nie istniej
gupie pytania
O:
138
Rozdzia 3.
O:
Deklaracja funkcji
Tutaj potrzebne s
nawiasy okrge.
Wywoaj funkcj
z kodu.
function myFunc1(){
myFunc1();
$("div").hide();
}
funkcji
Nazwy naszych
Wyraenie funkcyjne
var myFunc2 = function() {
$("#myElement").click(myFunc2);
$("div").show();
nkcj
Wywoaj fu obsugi
cj
nk
fu
jako
zdarzenia.
Magnesy z kodem
Sprawd, czy potrafisz poukada magnesiki w taki sposb, aby zamieni
fragment programu sprawdzajcy rabat w funkcj nazwan checkForCode,
po czym uy jej jako funkcji obsugi zdarzenia kliknicia w aktywnych polach.
$(document).ready(function() {
I"I
}
$(".guess_box").click( checkForCode );
*+
!
);
click
$(".guess_box").each( function(){
$(this).unbind('
checkForCode
');
});
var
});
my_scripts.js
$(document).ready(function() {
$(".guess_box").click( checkForCode );
Deklaracja
naszej funkcji
checkForCode *+
Generator
liczb losowych,
ktrego uylimy
w rozdziale 2.
var
?L9#GFIS 383A9K#G
Poka rabat
na ekranie.
$(".guess_box").each( function(){
$(this).unbind(' click ');
});
}
});
I"I
Zrb to!
my_scripts.js
Tych magnesikw
nie potrzebujesz.
WYSIL
SZARE KOMRKI
140
Rozdzia 3.
dy generator liczb
Podpowied: Teraz, kiedeklaracji funkcji,
losowych jest czci no w istniejcej
moesz go uy zarwjak i w funkcji,
funkcji checkForCode,
i ktra bdzie
ktr wkrtce napiszesz
cyjny w losowo
umieszcza kod promo
wybranym polu.
Zmiennej nadajemy
nazw, ebymy mogli
pniej odwoywa si
do niej w skrypcie.
pts
Warto umieszczamy
w zmiennej za pomoc
znaku rwnoci.
0
5
2
=
pts
jeste tutaj
141
=
?
Argumenty przeka
w nawiasach.
}
Nazwa funkcji
Nazwa argum
entu
Zrb co z argumentem.
KKFFJ3S3Z\9RLS
welcome("Janek");
Funkcja nie musi wiedzie, co zawiera zmienna. Wywietli ona wszystko, co tylko bdzie
si w zmiennej znajdowa. Dziki temu moesz zmienia tre, jak wywietla funkcja,
modyfikujc po prostu zmienn, zamiast wprowadza zmiany w samej funkcji (co wcale
nie przyczynioby si do moliwoci jej wielokrotnego uycia).
ie
ojn
ok
Sp
142
Rozdzia 3.
Nazwa funkcji
@3 9&99-
Zrb co z tymi
argumentami.
return result;
}
Zwr warto.
KKHFJ3S3Z\9RLS
var total = multiply (6, 7);
alert (total);
Zaostrz owek
Teraz, kiedy potrafisz ju pisa funkcje, dodaj do pliku my_scripts.js now
funkcj przyjmujc pojedynczy argument (o nazwie num) i zwracajc
w oparciu o ten argument liczb losow. Funkcja ta bdzie si nazywa
getRandom.
my_scripts.js
zaostrz rozwizanie
Zaostrz owek
Teraz, kiedy potrafisz ju pisa funkcje, dodaj do pliku my_scripts.js now
funkcj przyjmujc pojedynczy argument (o nazwie num) i zwracajc
w oparciu o ten argument liczb losow. Funkcja ta bdzie si nazywa
getRandom.
Rozwizanie
Nazwa argum
entu
Nazwa funkcji
function getRandom(num){
my_scripts.js
jeszcze
jednak y, co
t
s
e
J
!
m
Zobacz
a niele
na
Wygld o zrobienia. powiedzenia
d
o
o
go
d
r
e
a
iw
spo
m
c
a
wa
ekip
Twoja sprawdzania
temat
pola...
Jzek
144
Rozdzia 3.
Warunek, ktry
chcemy sprawdzi
Pocztek instrukcji if
KK I8LX^
}else{
Mona
Operator porwnania. ne.
go czyta jako jest rw
Kod, jaki chcemy
uruchomi, kiedy
sprawdzany warunek
bdzie prawdziwy.
Magnesiki z kodem
Sprawd, czy moesz uoy magnesiki w taki sposb, aby utworzy now funkcj o nazwie
hideCode, ktra korzysta z logiki warunkowej w celu ukrycia losowo wybranego nowego
elementu span o identyfikatorze has_discount w jednym z istniejcych aktywnych
elementw .guess_box div.
var
#
!!"1;
!
*+
hideCode
= function (){
@3 93?
$(
.+0
).each(function(index, value) {
if(numRand == index){
$(this).append("<span id='
'></
>");
P
return false;
}
?!"!
}
(
my_scripts.js
var hideCode
= function (){
P
@3 93?
$( # !!"1;
).each(function(index, value) {
if(numRand == index){
Logika warun
porwnujca kowa
miejsce, w kt
znajdujemy sirym
na naszej li
ci
z wylosowan e,
liczb.
}
>");
return false;
Wyjd z ptli .each().
wy do
Dodaj element rabato _box.
ess
.gu
sy
kla
w
element
.+0
my_scripts.js
2EHMU]\MWR
Pierwszy element listy ma wic indeks rwny 0, drugi indeks rwny 1 itd.
Dowiemy si wicej na temat uywania indeksw, kiedy przyjrzymy si
tablicom i ptlom w rozdziale 6.
146
Rozdzia 3.
Zrb to!
m.
ienn z rabate
Zadeklaruj zm
Logika warunkowa
sprawdzajca, czy
uytkownik znalaz
rabat
Znajd elemen
drzewa DOM t
z identyfikator
has_discount em
.
"
P*@+0
! B=J1I"IK0
.
!
,
! R
!
Q1
S0
}
$(this).append(discount);
Zdefiniuj kom
aby by inny unikat w taki sposb,
w
czy uytkowni zalenoci od tego,
k znajdzie ra
te nie.
bat, czy
$(".guess_box").each( function(){
$(this).unbind('click');
});
}
my_scripts.js
Zrb te i to!
Czas na dodanie kilku niestandardowych funkcji: generujcej
liczb losow, ukrywajcej rabat oraz sprawdzajcej rabat.
$(document).ready(function() {
$(".guess_box").click( checkForCode );
Nasza funkcja
generujca liczb
losow
hideCode();
my_scripts.js
148
Rozdzia 3.
3
<
'
3
3
9
3
'
3
+
'
++
'
'
+
'
+B*7
'
@''
+
'B
E&
F>>B
F F>B
+
0
+!
3
-D
'
'
Zaostrz owek
Wiesz, co robi. Odszukaj w e-mailu od Emilii wszystkie nowe wymagania.
Wymagania:
zaostrz rozwizanie
Zaostrz owek
Rozwizanie
Wymagania:
Nie istniej
gupie pytania
O:
O:
O:
P:
O:
WYSIL
SZARE KOMRKI
Czy potrafisz poda sposb na stwierdzenie, ktre pole chce
wybra uytkownik, zanim jeszcze w nie kliknie?
150
Rozdzia 3.
Kod
gotowy do
wysmaenia
Pamitasz je
z rozdziaw 1. i 2.?
.hover{
border: solid #f00 3px;
}
.no_hover{
border: solid #000 3px;
<html>
<head>
<link href="styles/test_style.css" rel="stylesheet">
</head>
test_style.css
<body>
?@?%3? L&3A%@ G%G3WJIFRK%GK?@G
89#89?8G&RS38??3K89G
89#89?8-G&RS3899\K89G
<script src="scripts/jquery-1.7.min.js"></script>
<script src="scripts/my_test_scripts.js"></script>
</body>
</html>
$(document).ready(function() {
$("#btn1").click( function(){
$("#header").addClass("hover");
$("#header").removeClass("no_hover");
class_test.html
});
$("#btn2").click( function(){
$("#header").removeClass("hover");
$("#header").addClass("no_hover");
});
});
my_test_scripts.js
jeste tutaj
151
jazda prbna
Jazda prbna
Otwrz nowy plik class_test.html w swojej przegldarce. Po klikniciu przycisku
dodawania Twoja klasa zostanie przypisana do sekcji o identyfikatorze header.
Kliknicie przycisku usuwania spowoduje odczenie klasy!
Na pocztku
Po klikniciu
wietnie! Gdyby tylko wszystko byo
tak atwe. Czy CSS moe zmieni swoje
dziaanie take na skutek czego
innego ni kliknicie?
152
Rozdzia 3.
my_test_scripts.js
$(document).ready(function() {
$("#btn1").click( function(){
$("#header").addClass("hover");
$("#header").removeClass("no_hover");
});
$("#btn2").click( function(){
$("#header").removeClass("hover");
$("#header").addClass("no_hover");
});
ss pozwala na
Metoda jQuery addCla elementu. Nie
dodanie klasy CSS do ostae klasy CSS
ma ona wpywu na poz ntem.
powizane z tym eleme
});
wiczenie
$(".guess_box").hover(
function () {
KKS9RLS38J9WZ?3 Z39
.
},
function () {
KKS9RLS38J9WZ?3 Z39&3@
});
my_scripts.js
rozwizanie wiczenia
Rozwizanie
wiczenia
#"? ,
Za pomoc tej
anonimowej funkcji
obsugi zdarzenia
mouseenter ustaw
klas CSS pola,
kiedy uytkownik
przesunie nad nie
wskanik myszy.
$(".guess_box").hover(
1
2!
-:: 6;0
}
my_style.css
function () {
KKS9RLS38J9WZ?3 Z39
)*?!+#T
!!*"?
+0
},
function () {
Metoda jQuery
removeClass
umoliwia
usunicie klasy
CSS z elementu.
nimowa funkcja
Tutaj znajduje si ano leave.
use
mo
nia
rze
zda
i
ug
obs
KKS9RLS38J9WZ?3 Z39&3@
)*?!+#
T
!!*"?
+0
});
my_scripts.js
Jazda prbna
Otwrz w swojej przegldarce plik index.html, ktry powinien zawiera odwoanie do nowego
pliku my_scripts.js. Przesu wskanik myszy nad rysunki i zobacz, czy zmienia si ramka.
154
Rozdzia 3.
To ju prawie wszystko...
Zdecydowanie posunlimy si do przodu, ale komunikat nadal pojawia si w zym miejscu
i nie wyglda tak, jak nas o to proszono. Poza tym jest jeszcze jeden wymg z pierwszego
e-maila, ktrego nie zrealizowalimy. Oto lista wymaga w obecnej postaci:
komunikat z informacj, czy trafi w rabat. Jeli tak, naley pokaza mu kod,
aby mg skorzysta z niego w swoim zamwieniu.
Ten wymg
pochodzi
z pierwszego
e-maila!
#! ,
1
2!
-: :6;0
}
#"! ,
1
2!
- ::6;0
}
my_style.css
rozwizanie wiczenia
Rozwizanie
wiczenia
function checkForCode(){
var discount;
if($.contains(this, document.getElementById("has_discount") ) )
Skorzystaj z funkcji getRandom, aby
zwikszy do 100 moliwe wartoci kodu
rabatowego.
{
Za pomoc
funkcji jQuery
contains
sprawd, czy
w tym polu
znajduje si
kod rabatowy.
Skonfiguruj
posta
komunikatu
}else{
w zalenoci
od
discount = "<p>Niestety, tutaj rabatu nie ma!</p>" ; kodtego, czy
zosta
odnaleziony,
}
czy te nie.
$(".guess_box").each(function() {
Jeli tak,
zmie wygld
pola, aby
poinformowa
uytkownika,
e znalaz kod...
...a jeli
nie, poka
uytkownikowi
pole, w ktrym
ukryty by kod.
}
$(this).unbind();
});
rmacyjny
Wywietl komunikat infoonym dla
na stronie w przeznacz
niego miejscu.
)*-
!
+#
*! +0
} // Koniec funkcji checkForCode
my_scripts.js
156
Rozdzia 3.
Jazda prbna
Teraz, kiedy zaktualizowae ju swoj funkcj checkForCode, zobacz jej nowe dziaanie
na stronie Skacz z radoci (dla porwnania moesz sprawdzi, jak powinien wyglda
Twj kod, w pliku: my_scripts.js).
Zaadowana strona
Z kodem rabatowym
jeste tutaj 157
Rozdzia 3.
Logika
warunk
o
wa
Funkcje
,
o uycia
krotneg innych
lo
ie
w
ty kodu
sta w
Fragmen moesz korzy amu...
r
h
g
c
o
y
r
z ktr h swojego p
.
c
a
c
azwane
js
mie
dy s n
ie
k
,
y
d
lko wte
tylko
...ale ty
dziaaj o zostay
e
n
a
w
z
g
niena
ktre
Funkcje u w kodzie, z uywane
y
c
b
js
ie
g
mo
w m
ne, i nie
wywoa ziej.
d
gdzie in
kazywa
na prze ty albo
o
m
ji
c
Do funk (czyli argumen cja moe
nk
zmienne y), a sama fu
r
t
e
m
a
i.
r
pa
nik
aca wy
te zwr
158
Rozdzia 3.
Sprawd
z
(czy X a ona warun
Y
e
czego Z = true) prz k logiczny
.
ed zrob
ieniem
Skadn
ia czs
to zaw
instruk
ie
c
sprawd j else, na w ra
zany w
y
arunek padek gdyby
faszyw
y
koniecz , chocia nie okaza si
ne.
jest to
Zdarzenia
S to obiekty pomagajce
uytkownikowi w interakcji
ze stron WWW.
wie
Istnieje ich okoo 30 i pra
jsce
mie
mie
e
mo
wszystko, co
oa
wyw
e
mo
,
rce
da
egl
prz
w
zdarzenie.
4.0DQLSXORZDQLHVWURQLQWHUQHWRZ]DSRPRFM4XHU\
160
Rozdzia 4.
Dla wegetarian
Oto, co Aleksandra chciaaby, eby zrobi.
ktry
wegetarian, enu
la
D
k
is
c
y
m
rz
ym
p
Chcemy mie ie zaproponuje w nasz ch posikw.
n
y
z
k
c
y
w
ty
dniki z
automa
kie odpowie
wegetarias
to dziaa:
Oto, jak ma
naszych
iednikw dlausun.
w
o
p
d
o
y
m
eba je
- Nie oferuje
tak wic trz
,
h
c
y
n
b
ry
da
erw
nik hamburg
d
ie
w
o
p
d
o
i
tariask
- Jako wege gigantyczne pieczarki.
oferujemy
iednikiem
skim odpow hamburgerw
a
ri
ta
e
g
e
w
- Tofu jest h da misnych oprcz
wszystkic
oraz jaj.
i menu
ry przywrc
t
k
,
u
k
is
c
y
my prz
- Potrzebujewyjciowego.
do stanu
ikonk
my te mie
y
b
li
ie
c
h
c
obok da
i da, to
P.S. Jeli stra by si wywietlaaniki.
z liciem, kegetariaskie odpowied
majcych w
wysa
strony, aby
ta
n
ta
k
je
ro
ia
p
Poprosiam cym menu, eby m
ie
b
z
i
k
Ci pli
cz.
od czego za
jeste tutaj
161
div class=
"
li
li
li
?U
li
!!
"
!
li
162
li
li
Rozdzia 4.
li
li
li
!!
"
!
li
li
!!
"
!
li
!!
"
!
li
li
<body>
<div id="menu_wrapper">
<div class="left_col">
%G3383?FK%G
<ul class="menu_entrees">
<li>Halibut po tajsku
<ul class="menu_list">
<li>mleczko kokosowe</li>
&G3%3&89K&G
<li>wczesnojesienne warzywa</li>
<li>przyprawy tajskie</li>
</ul>
</li>
<li>Domowe grillowane panini
<ul class="menu_list">
<li>prosciutto</li>
<li>provolone</li>
<li>avocado</li>
<li>pieczywo na zakwasie</li>
</ul>
</li>
&G 389JR3
<ul class="menu_list">
<li>papryczki chili</li>
<li>hamburger</li>
&G#R3IJ K&G
<li>pieczywo wieloziarniste</li>
</ul>
</li>
</ul>
</div>
</div>
</body>
index.html
1
div class=
"=
nia
echowywa
W celu prz menu uyto
elementwumerowanej.
listy nien
div class=
"
listy...
t pozycj
menu jes
w
e
n
w
ie g
Kade dan
li
li
li
li
!!
"
!
li
skadnikw
wiera list
...ktra za list) w postaci wanych
(ul.menu_ nych i nienumero
zagniedo.
elementw
!!
"
!
?U
!!
"
!
!!
"
!
li
li
li
li
li
li
li
li
li
164
Rozdzia 4.
li
<body>
<div id="menu_wrapper">
<div class="left_col">
%G3383?FK%G
<ul class="menu_entrees">
<li>Halibut po tajsku
<ul class="menu_list">
<li>mleczko kokosowe</li>
&G3%3&89K&G
<li>wczesnojesienne warzywa</li>
<li>przyprawy tajskie</li>
</ul>
</li>
<li>Domowe grillowane panini
<ul class="menu_list">
<li>prosciutto</li>
<li>provolone</li>
<li>avocado</li>
<li>pieczywo na zakwasie</li>
</ul>
</li>
&G 389JR3
<ul class="menu_list">
<li>papryczki chili</li>
<li>hamburger</li>
&G#R3IJ K&G
<li>pieczywo wieloziarniste</li>
</ul>
</li>
</ul>
</div>
</div>
</body>
To jest tylko
fragment
rzeczywistej
strony
w HTML-u.
index.html
WYSIL
SZARE KOMRKI
Regularna struktura strony (kodu HTML) znacznie uatwia pisanie kodu w jQuery, ale skadniki
potraw, ktre chcemy odszuka, nie s oznakowane w sposb mogcy uproci opracowanie
kodu. Co moemy zrobi, eby nasze elementy byy atwiejsze do wybierania?
<li>kurczak</li>
<li>jajka</li>
&GJ#3R3L&L3K&G
<li>indyk</li>
<li
!!
>kurczak</li>
<li
!!
>indyk</li>
<li
!!
GJ#3R3L&L3K&G
#
Jakim cudem
trafilimy do
tej samej grupy
co miso?
<li
!!
>jajka</li>
166
Rozdzia 4.
wiczenie
Odszukaj w menu pozycje, ktre bd mie wegetariaskie odpowiedniki, i oznacz je odpowiedni klas
(fish dla ryby, meat dla misa albo hamburger dla hamburgera). Jeli skadnik nie wymaga klasy, pozostaw
puste pole. Kod HTML zosta rozmieszczony w taki sam sposb, w jaki pozycje menu pojawi si na stronie.
<li>Halibut po tajsku
<ul class="menu_list">
<li
>mleczko kokosowe</li>
&G3%3&89K&G
&G89&Z 3FL FSK&G
<li
>wczesnojesienne warzywa </li>
<li
>przyprawy tajskie</li>
</ul>
</li>
&GV Z3RZ 9Z9
<ul class="menu_list">
&GJ#3R3L&L3K&G
<li
>cebulki cippolini</li>
<li
>marchew</li>
&GJ?3 Z#3K&G
<li
>sos pieczeniowy</li>
</ul>
</li>
<li>Domowe grillowane panini
<ul class="menu_list">
<li
>szynka prosciutto</li>
<li
>ser provolone</li>
<li
>avocado</li>
<li
>pomidory koktailowe</li>
<li
>pieczywo na zakwasie</li>
<li
>frytki</li>
</ul>
</li>
&G9JR3?F3
<ul class="menu_list">
&G3 F383RJ33K&G
<li
>cukinia</li>
<li
>hamburger</li>
<li
>ocet balsamiczny</li>
<li
>cebula</li>
<li
>marchew</li>
<li
>pieczywo wieloziarniste</li>
<li
>ser kozi</li>
</ul>
</li>
<li>Frittata
<ul class="menu_list">
<li
>jajka</li>
<li
>ser asiago</li>
<li
>ziemniaki</li>
</ul>
</li>
<li>Zupa kokosowa
<ul class="menu_list">
<li
>mleczko kokosowe</li>
<li
>kurczak</li>
<li
>bulion warzywny</li>
</ul>
</li>
<li>Zupa du jour
<ul class="menu_list">
<li
>grillowany stek</li>
<li
>grzyby</li>
<li
>warzywa sezonowe</li>
<li
>bulion warzywny</li>
</ul>
</li>
&G9#3 RF3X3
<ul class="menu_list">
<li class="meat" >pieczona wieprzowina</li>
<li
>marchew</li>
&GW Z8L%RK&G
<li
>chili</li>
<li
>bulion warzywny</li>
</ul>
</li>
&G9JLZRZ3@L3?
<ul class="menu_list">
<li
>avocado</li>
<li
>papryczki chili</li>
&GJ?R3LZ F3#3# R3K&G
<li
>sos imbirowy</li>
</ul>
</li>
rozwizanie wiczenia
wiczenia
<li>Halibut po tajsku
<ul class="menu_list">
<li
>mleczko kokosowe</li>
class=fish"
&G3%3&89K&G
&G89&Z 3FL FSK&G
&GFLZSF3 ZF3K&G
&G# Z# 3F3SRK&G
</ul>
</li>
&GV Z3RZ 9Z9
<ul class="menu_list">
class=meat"
&GJ#3R3L&L3K&G
<li
>cebulki cippolini</li>
<li
>marchew</li>
&GJ?3 Z#3K&G
&G#LZFK&G
</ul>
</li>
<li>Domowe grillowane panini
<ul class="menu_list">
class=meat"
&GZR3# L9K&G
<li
>ser provolone</li>
&G3@L3?K&G
&G#? RR3&FK&G
&G#LZF3Z3RF3K&G
&G RK&G
</ul>
</li>
&G9JR3?F3
<ul class="menu_list">
&G3 F383RJ33K&G
<li
>cukinia</li>
<liclass=hamburger">hamburger</li>
&GL83&3LZK&G
<li
>cebula</li>
<li
>marchew</li>
&G#LZFF&Z3 K&G
<li
>ser kozi</li>
</ul>
</li>
168
Rozdzia 4.
<li>Frittata
<ul class="menu_list">
<li class=meat"
>jajka</li>
<li
>ser asiago</li>
<li
>ziemniaki</li>
</ul>
</li>
<li>Zupa kokosowa
<ul class="menu_list">
<li
>mleczko kokosowe</li>
<li class=meat"
>kurczak</li>
&G89&F3 ZFK&G
</ul>
</li>
&G9#3?9S9
<ul class="menu_list">
class=meat"
&GW &&F3RK&G
&GW Z8K&G
&GF3 ZF3ZFK&G
&G89&F3 ZFK&G
</ul>
</li>
&G9#3 RF3X3
<ul class="menu_list">
<li class=meat" >pieczona wieprzowina</li>
<li
>marchew</li>
&GW Z8L%RK&G
<li
>chili</li>
&G89&F3 ZFK&G
</ul>
</li>
&G9JLZRZ3@L3?
<ul class="menu_list">
&G3@L3?K&G
&G#3# LZRL%&K&G
&GJ?R3LZ F3#3# R3K&G
&G8 FK&G
</ul>
</li>
Pora na przyciski
Teraz, kiedy wikszo rzeczy jest ju skonfigurowana, powrmy do serwetki, na ktrej szef
kuchni zapisa swoje wymogi. Nastpne, co musimy zrobi, to utworzenie dwch przyciskw.
n, ktry automatycznie zaproponuje
- Chcemy mie przycisk Dla wegetaria
w naszym internetowym menu.
waciwy odpowiednik wegetariaski
- Potrzebujemy drugiego przycisku, ktry przywrci
menu do stanu
wyjciowego.
Zaostrz owek
Zaktualizuj struktur oraz skrypt, aby uzyska dwa przyciski opisane na serwetce. Nadaj przyciskowi
Dla wegetarian identyfikator vegOn, a przyciskowi Przywr menu identyfikator restoreMe.
<div class="topper">
<h2>Nasze menu</h2>
<ul>
<li class="nav">
</li>
<li class="nav">
</li>
</ul>
</div>
$(document).ready(function() {
index.html
var v = false;
if (v == false){
v = true;}
});// koniec button
if (v == true){
v = false;}
});// koniec button
});// koniec document ready
my_scripts.js
zaostrz rozwizanie
Zaostrz owek
Rozwizanie
Zaktualizuj struktur oraz skrypt, aby uzyska dwa przyciski opisane na serwetce.
Nadaj przyciskowi Dla wegetarian identyfikator vegOn, a przyciskowi Przywr menu
identyfikator restoreMe.
<div class="topper">
<h2>Nasze menu</h2>
<ul>
<li class="nav"> <button id="vegOn">Dla wegetarian</button>
</li>
</li>
</ul>
</div>
index.html
$(document).ready(function() {
var v = false;
$("button#vegOn").click(function(){
Dokadniejszy
selektor korzystajcy
z typu elementu oraz
identyfikatora
if (v == false){
v = true;}
if (v == true){
v = false;}
});// koniec button
});// koniec document ready
my_scripts.js
170
Rozdzia 4.
Co teraz?
Szybko nam poszo! Mamy ju skonfigurowane dwa przyciski. Wykrelmy je z serwetki
i przejdmy do tego, co powinien robi przycisk Dla wegetarian.
riaskich:
nie odpowiednikw wegeta
Oto, jak dziaa proponowa
h, tak wic
ikw dla naszych da rybnyc
- Nie oferujemy odpowiedn
trzeba je usun.
rujemy gigantyczne
owiednik hamburgerw ofe
- Jako wegetariaski odp
pieczarki.
kich da misnych
m odpowiednikiem wszyst
- Tofu jest wegetariaski
jaj.
oprcz hamburgerw oraz
Opisz wasnymi sowami trzy rzeczy, ktre powinien robi przycisk Dla wegetarian.
wiczenie
1.
2.
3.
jeste tutaj
171
rozwizanie wiczenia
Opisz wasnymi sowami trzy rzeczy, ktre powinien robi przycisk Dla wegetarian.
Rozwizanie 1.
wiczenia
2.
3.
remove
Potrzebujesz pozby
si czego z drzewa
DOM na dobre?
div id="top"
div class=
"1;
div class=
"1;
$("img#thumbnail").remove();
Rozdzia 4.
Zabieram rzeczy
z drzewa DOM i przechowuj
je dla Ciebie.
div id="top"
?1
172
detach
Twj
element
?1
$("img#thumbnail").detach();
Zaostrz owek
W udostpnione miejsca wpisz selektor oraz kod dla metody remove
albo detach, ktry utworzy wynik pokazany z lewej strony.
Instrukcja w jQuery
div id="top"
div class=
"1;
=!"!
!!
"
!
li
!!
"
!
li class=
"fish"
li
li
li
zaostrz rozwizanie
Zaostrz owek
Rozwizanie
Kiedy dla danego
elementu wywoasz
metod remove
albo detach,
zostan usunite
take wszystkie
jego elementy
potomne.
W udostpnione miejsca wpisz selektor oraz kod dla metody remove albo
detach, ktry utworzy wynik pokazany z lewej strony.
Instrukcja w jQuery
div id="top"
$("div#top").remove()
div class=
"1;
p, p
=!"!
Pamitaj,
e wszystkie
elementy
wskazane
selektorem
zostan
odczone.
$("div p").detach()
!!
"
!
li
li
Moesz precyzyjniej
powybiera elementy,
grupujc je wedug klas
albo identyfikatorw.
li class=
"fish"
174
Rozdzia 4.
!!
"
!
li
$("li.fish").detach()
li
li
Jazda prbna
W pliku my_scripts.js dodaj do funkcji obsugujcej kliknicie przycisku vegOn wiersz
kodu z trzeciego rozwizania zadania Zaostrz owek. Nastpnie otwrz stron
w swojej ulubionej przegldarce, aby upewni si, e wszystko dziaa.
Usunlimy to...
...a powinnimy
usun cay
posiek.
Przed wywoaniem
metody $("li.fish").
detach().
Po wywoaniu metody
$("li.fish").detach()
wszystkie elementy
klasy fish znikny.
Metoda detach z ca pewnoci usuwa elementy, ale nie znikno wszystko, co chcielimy.
Usunlimy z listy posikw tylko gwne pozycje, chocia powinnimy si pozby caego
dania, wewntrz ktrego zagniedona jest lista zawierajca elementy klasy .fish.
Jak rozkaza drzewu DOM, aby odczyo cay posiek?
Aby wspi si
w gr drzewa
DOM, moemy
uy metody
jQuery parent.
li
li
li
li
!!
"
!
li class=
"fish"
!!
"
!
!!
"
!
!!
"
!
li
li
li
li
li
li
li
Wspinaczka po drzewie
DOM. No dobra, ale dokadnie
to jak takie przechodzenie
drzewa pomoe mi
w odczaniu posikw.
Metody zwizane z przechodzeniem
pozwalaj na wybranie elementu, a nastpnie
uchwycenie elementu znajdujcego si
powyej, poniej albo obok niego.
Przyjrzyjmy si bliej temu, jak mona apa elementy.
176
Rozdzia 4.
li
li
li
Nastpnie we element
znajdujcy si powyej
tych elementw.
Nastpnie we elementy
znajdujce si poniej
tych elementw.
$(".menu_list")# ?
*+
$(".fish")# *+
!!
"
!
!!
"
!
To jest rodzic
elementu li.fish.
li class=
"fish"
li
li
li class=
"fish"
li
To s elementy potomne
elementu klasy ul.menu_list
Wybierz wszystkie
elementy w klasie fis
h.
Nastpnie we element
ssiedni znajdujcy si
bezporednio z lewej strony.
!!
"
!
li class=
"fish"
$(".fish")# ;*+
$(".fish")# *+
li
Wybierz wszystkie
elementy w klasie fis
h.
!!
"
!
To jest rodzic
elementu
li.fish.
li
li
li
li class=
"fish"
li
li
WYSIL
SZARE KOMRKI
Ktre z tych metod mog nam pomc w usuniciu z menu
posikw zawierajcych elementy klasy fish?
$(".fish").parent()# *+
nas tutaj.
li
!!
"
!
Pierwsza metoda
To jest rodzic
elementu li.fish.
li class=
"fish"
wia.
Metody moesz take miesza i zesta
178
Metoda parent
doprowadzi nas do
elementu, ktry
obejmuje wybrany
element lub
elementy.
Rozdzia 4.
Metoda next
przeniesie nas do
z prawej strony.
!!
"
!
li
li
!!
"
!
Metoda remove
usunie z drzewa DOM
wiczenie
$(".menu_entrees").children().detach()
$(".menu_list").children().detach()
$(".fish").parent().detach()
$(".fish").parent().parent().detach()
rozwizanie wiczenia
Rozwizanie deweloperskich swojej ulubionej przegldarki. Nie pamitasz, jak z nich korzysta? Wr do kolumny
Przeczytaj mnie znajdujcej si na pocztku ksiki. Wyprbuj nastpujce sposoby przechodzenia przez
wiczenia
drzewo z doczonymi do nich metodami detach, tak jak to pokazano poniej. Nastpnie napisz, dlaczego
sposb ten moe albo i nie pomc nam w rozwizaniu problemu, ktrym si zajmujemy.
Wane: Nie zapomnij po wywoaniu kadej instrukcji odwiey przegldark.
$(".menu_entrees").children().detach()
Ta metoda przechodzenia przez drzewo odcza element potomny klasy menu_entrees. Nie nadaje
si ona do usunicia potraw zawierajcych ryb, poniewa usuwa WSZYSTKIE posiki z listy.
A niech to! Nie o to nam chodzio.
Do diaska!
Odczylimy
wszystkie posiki.
$(".menu_list").children().detach()
Ta metoda przechodzenia przez drzewo odcza elementy potomne klasy menu_list. Nie nadaje
si ona do usunicia potraw zawierajcych ryb, poniewa usuwa list skadnikw z kadego
elementu ul.menu_list. Ups! Z ca pewnoci nie tego chcielimy.
Usunlimy listy
skadnikw z kadego
posiku.
180
Rozdzia 4.
$(".fish").parent().detach()
Ta metoda przechodzenia przez drzewo odcza element nadrzdny klasy .fish. Nie nadaje si ona
do usunicia potraw zawierajcych ryb, poniewa nie siga wystarczajco wysoko w drzewie
DOM. Zamiast tego usuwa ona element ul.menu_list (i wszystko, co jest poniej).
$(".fish").parent().parent().detach()
Ta metoda przechodzenia przez drzewo odcza rodzica elementu nadrzdnego
klasy .fish. Robi wanie to, czego potrzebujemy.
o trzeba.
Wanie tego nam by .
ky
zni
i
am
ryb
z
Posiki
jeste tutaj
181
!!
"
!
li
!!
"
!
li class=
"fish"
li
li
li
li
SZARE KOMRKI
li class=
"fish"
Rozdzia 4.
!!
"
!
!!
"
!
WYSIL
182
li
li
li
li
li
li class=
"fish"
li
li
Zaostrz owek
Poznalimy ju do tej pory troch konstrukcji w jQuery i JavaScripcie. Ktrych z nich bdziemy
potrzebowa, aby nie zapomnie o elementach klasy .fish? Napisz Tak albo Nie
w kolumnie Czy skorzystamy? i wyjanij, dlaczego wybrae to rozwizanie albo dlaczego
go nie wybrae. Jeden z elementw ju opisalimy za Ciebie, pozostay wic tylko trzy.
Terminator
Czy skorzystamy?
Dlaczego?
Nie
Zmienna
Funkcja
Selektor
zaostrz rozwizanie
Zaostrz owek
Rozwizanie
Poznalimy ju do tej pory troch konstrukcji w jQuery i JavaScripcie. Ktrych z nich
bdziemy potrzebowa, aby nie zapomnie o elementach klasy .fish? Napisz Tak albo
Nie w kolumnie Czy skorzystamy? i wyjanij, dlaczego wybrae to rozwizanie albo
dlaczego go nie wybrae. Oto nasze odpowiedzi:
Czy skorzystamy?
Dlaczego?
Terminator
Nie
Zmienna
Tak
Zmienna przechowuje dla nas rne rzeczy. Jeli zachowamy w niej odczony
element, bdziemy mogli go pniej odzyska, odwoujc si po prostu do tej
zmiennej.
Funkcja
Nie
Selektor
Nie
Nie istniej
gupie pytania
184
Rozdzia 4.
O:
O:
O:
$(".fish").parent().parent().detach();
Kod jQuery
Za kulisami
!
""
!#
Wersja DOM
strony
Prosz bardzo.
li
Interpreter
JavaScript
li class=
"fish"
li
li
li
!!
"
!
!!
"
!
li
li
li
li class=
"fish"
li
!!
"
!
li
li
li class=
"fish"
li
li
specjalni $przyjaciele
$f = $(".fish").parent().parent().detach();
Umieszczenie znaku dolara przed zmienn
wskazuje, e przechowuje ona elementy
zwrcone przez jQuery.
li
!!
"
!
$f
li class=
"fish"
li
li
li
Zmienne, z ktrych
korzystalimy do tej pory,
przechowyway po jednej
wartoci. Wpychanie tych
wszystkich elementw do
jednego pojemnika wyglda
mi na baaganiarstwo.
!!
"
!
li
li
Bo przechowywanie
rnych elementw
w jednej zmiennej jest
baaganiarstwem.
I to wanie dlatego w jQuery
elementy przechowuje si
w tablicach. Zobaczmy wic,
o co chodzi z tymi tablicami.
186
Rozdzia 4.
li
li class=
"fish"
!!
"
!
li
li class=
"fish"
li
li
li
li
Zmienna
42
Przechowywana warto
Nazwa
zmiennej
tablica
Jeli caa i $a, kada
s
a
w
zy
na
dka nosi
jej przegr[n], gdzie n
a
$
m,
nazw
ym numere
jest kolejn0.
liczc od
4 8
$a[0]
$a[1]
15 16 23 42
$a[2]
$a[3]
$a[4]
$a[5]
v
Do kadej przegrdki moemy wkada rne rzeczy i je z niej
wyjmowa. Aby w trzeciej przegrdce umieci warto 15,
napiszemy co takiego:
$a
Porady maniaka
$a[2] = 15;
Trzecia przegrdka ma numer
2, poniewa numeracj
zaczynamy od 0.
jak schludnie!
$f = $(".fish").parent().parent().detach();
li class=
"fish"
li
li
li
!!
"
!
!!
"
!
!!
"
!
li
li
li
Kady z odczonych
elementw elegancko
wpada do swojej
przegrdki w tablicy $f.
li class=
"fish"
li
$f[0]
$f[1]
li class=
"fish"
li
li
li
$f[2]
jnie
o
ok
Sp
$f
Rozdzia 4.
li
Pamitaj: w kadym
elemencie nadal znajduje
si jego zawarto.
W atwy sposb moemy
wszystko przywrci na
stron.
188
li
Z tablicami
mona robi
o wiele wicej.
Teraz jednak
nie musisz
si tym specjalnie przejmowa.
Tablice poznamy o wiele bardziej
szczegowo w rozdziale 6.
Jazda prbna
W pliku my_scripts.js dodaj do funkcji obsugujcej kliknicie przycisku vegOn wiersz kodu
z poprzedniej strony, ktry odczy rodzicw rodzicw elementw #fish. Nastpnie otwrz
stron w swojej ulubionej przegldarce, aby upewni si, e wszystko dziaa.
Wanie o to nam
chodzio. Dania rybne
zostay odczone.
2.
3.
WYSIL
SZARE KOMRKI
Wiemy ju, jak wyjmowa elementy z drzewa DOM, ale jak dynamicznie
zastpowa zawarto DOM inn zawartoci?
to zamiast tamtego
...tym, co znajduje si
midzy nawiasami.
$("h2")#
Y?("<h1>Moje menu</h1>");
...a w jego
miejsce wo
co innego.
Wyjm
wybrany element
z drzewa DOM...
Interpreter JS znajduje
$
%!
!!
%
%
!
&'
!
1
1
<h1>Moje menu</h1>
?9
190
Rozdzia 4.
?'
!!
"
!
Po uruchomieniu
kodu ma to
wyglda tak.
To chcemy
zastpi.
li class=
?1
Tak powinna
wyglda strona po
uruchomieniu kodu.
!!
"
!
li class=
"portobello"
Napisz kod, ktry odszuka elementy li klasy hamburger i zastpi je elementami li klasy
portobello. Poniszy diagram powinien Ci w tym pomc. Cz odpowiedzi ju napisalimy;
pozostae nale do Ciebie.
wiczenie
!!
"
!
Kod, ktry
napiszesz tutaj...
...powinien
zrobi to.
$(
).replaceWith(
li class=
?1
<em>pieczarka gigant</em>
);
jeste tutaj
191
rozwizanie wiczenia
Rozwizanie
wiczenia
Napisz kod, ktry odszuka elementy li klasy hamburger i zastpi je elementami li klasy
portobello. Oto nasze rozwizanie:
!!
"
!
li class=
?1
Wybierz wszystkie
elementy klasy
hamburger.
zawarto
Metoda replaceWith dynamicznie zastpuje wybran niejsze,
Najwa
ami.
nawias
midzy
si
jcym
znajdu
tem
elemen
o czym naley pamita, to e midzy nawiasami mona
umieszcza HTML.
Jazda prbna
W pliku my_scripts.js dodaj kod metody replaceWith do funkcji obsugujcej
kliknicie przycisku vegOn. Nastpnie otwrz stron w swojej ulubionej przegldarce
i kliknij przycisk Dla wegetarian, aby sprawdzi, czy wszystko dziaa.
Pieczarka gigant
zastpia hamburgera.
192
Rozdzia 4.
2.
3.
To proste! Znowu
uyjemy metody
replaceWith, prawda?
li class=
li class=
WYSIL
SZARE KOMRKI
Metoda replaceWith jzyka jQuery jest prosta w uyciu
i uniwersalna, ale niestety nie pomoe nam w rozwizaniu
tego problemu. Dlaczego?
(
)
&'
&)
)
!
w zmiennej.
194
Rozdzia 4.
Na pniejszym
etapie drzewo
DOM nie pamita
ju o rnych
rodzajach misa.
?
? ?
$(".meat")#1
("<li>tofu</li>");
!!
"
!
li
li class=
li
li
li
$(".meat")#
("<li>tofu</li>");
!!
"
!
li class=
li
Zaostrz owek
Napisz kod jQuery, ktry zrealizuje kady z etapw naszego rozwizania.
&
!
!
w zmiennej.
zaostrz rozwizanie
Zaostrz owek
Rozwizanie
1
&
!
!
w zmiennej.
$(".meat").after("<li class=tofu><em>tofu</em></li>");
$m = $(".meat").detach();
2.
3.
Teraz musimy utworzy przycisk Przywr menu. Oto zadania, ktre bdzie on realizowa:
Przywr w menu potrawy rybne w miejscu, z ktrego zostay usunite
(czyli przed pierwsz pozycj menu w lewej kolumnie).
Odszukaj potrawy zawierajce pieczarki i zastp je hamburgerami.
Odszukaj potrawy zawierajce tofu i zastp je poszczeglnymi
rodzajami mis (we waciwej kolejnoci).
Wemy si od razu do pracy i spjrzmy, co trzeba zrobi w pierwszym punkcie.
Musimy przywrci potrawy
rybne w tym elemencie...
...przed pierwszym
elementem potomnym
(dzieckiem).
!!
"
!!
"
!
X
G
!!
"
!
Z
=
!!
"
!
Wiemy, jak korzysta z metody before, ale jak dotrze do pierwszego dziecka?
196
Rozdzia 4.
first
last
Metoda eq odfiltrowuje
w wybranym zbiorze elementw
wszystko z wyjtkiem elementw,
ktrych indeks jest rwny wartoci
umieszczonej midzy nawiasami.
li
!!
"
!
li
li class=
zbir
Metoda last ogranicza tylko
w
nt
me
ele
h
nyc
wybra
do ostatniego z nich.
li
$(".menu_list").children()# !*+;
li
li
$(".menu_list").children()#
!*+;
li
!!
"
!
zbir
Metoda eq ogranicza tylko
w
nt
me
ele
h
nyc
bra
wy
indeks
do elementu, ktrego
iasami.
znajduje si midzy naw
li class=
li
li
li
li
0 1 2 3 4
$(".menu_list").children()#
%*:+;
$(".menu_list").children()#
%*'+;
$(".menu_list").children()#
%*9+;
$(".menu_list").children()#
%*6+;
raca
Pamitaj, e jQuery zw licy.
tab
wybrane elementy w amy
Indeks, ktry umieszczsi do
w metodzie eq odnosi .
przegrdki w tej tablicy
$(".menu_list").children()# %*U+;
zawanie wyboru
slice
Metoda slice odfiltrowuje wszystko
oprcz elementw o indeksach
zawartych midzy wartociami
umieszczonymi w nawiasach.
filter
!!
"
!
Metoda slice ogranicza
wybranych elementw zbir
ktre znajduj si mido tych,
indeksami podanymi w dzy
nawiasach.
li class=
li
li
li
li
4
zwrcony
dku zostanie
W tym przypaement drugi element li.
tylko jeden el
$(".menu_list").children()#!
*'Q6+;
zbir
Metoda filter ograniczado
w
nt
me
ele
h
wybranyc
selektor
wskazywanych przez nawiasami.
znajdujcy si midzy
li
$(".menu_list").parents()#
*# +;
komicie sprawdzaj si
Metody filter i not zna i parents i children.
am
w poczeniu z metod
Metoda parents umoliwia nam
uchwycenie wszystkich element
w,
ktre s rodzicami, dziadkami,
pradziadkami itd. wybranego elem
entu.
!!
"
!
li class=
"local"
Rozdzia 4.
li
li
$("ul.menu_list.organic").children()#*#
+;
Metoda not ogranicza zbir wybranych elementw
do takich, ktre nie pasuj do selektora
znajdujcego si midzy nawiasami.
198
li class=
"local"
Bd drzewem DOM
Twoje zadanie polega na wcieleniu si w drzewo DOM. Narysuj lini
czc instrukcj w jQuery z elementem (lub elementami) w drzewie
DOM, ktre zwrci selektor. Przyjmij, e widoczne elementy
s jedynymi elementami na stronie. Pierwszy element
poczylimy za Ciebie.
1
div class=
"=
!&AL&L%&? %
div class=
"
!9A &L
?U
!!
"
!
$(".menu_list").parents().filter("div");
li
li
li
!!
"
!
!!
"
!
!!
"
!
$("li").first();
li
li
li
li
$(".menu_list li").eq(3);
li
li
li
li
li
li
li
li
$(".menu_list").children().last();
Zaostrz owek
Napisz w jQuery wiersz kodu przywracajcy dania rybne na pozycje menu, z ktrych
zostay one usunite (czyli przed pierwsz pozycj menu poniej menu_entrees).
.before($f);
!&AL&L%&? %
div class=
"
!9A &L
?U
!!
"
!
$(".menu_list").parents().filter("div");
li
li
li
!!
"
!
!!
"
!
!!
"
!
$("li").first();
li
li
li
li
li
$(".menu_list li").eq(3);
li
li
li
li
li
li
li
$(".menu_list").children().last();
Zaostrz owek
Rozwizanie
Napisz w jQuery wiersz kodu przywracajcy dania rybne na pozycje menu, z ktrych
zostay one usunite (czyli przed pierwsz pozycj menu poniej menu_entrees).
$(".menu_entrees li").first().before($f);
200
Rozdzia 4.
Przywr hamburgera
Do tej pory zrealizowalimy pierwszy wymg z listy przycisku
Przywr menu. Pozostay jeszcze dwa:
Przywr w menu potrawy rybne w miejscu, z ktrego zostay
usunite (czyli przed pierwsz pozycj menu w lewej kolumnie).
Odszukaj potrawy zawierajce pieczarki i zastp je hamburgerami.
Odszukaj potrawy zawierajce tofu i zastp je poszczeglnymi
rodzajami mis (we waciwej kolejnoci).
Nasza kolejna pozycja na licie wywouje wraenie dj vu, prawda? Wszystko,
co tak naprawd musimy zrobi, to odwrci nasz pierwsz operacj podmiany.
Dlaczego? Poniewa mamy do czynienia z podstawieniem jeden do jednego,
a my wprost kochamy takie podstawienia, gdy s logicznie proste.
Podstawienie jeden do jednego
Wrcieeeeeeeeeem!
wiczenie
Pamitasz jeszcze to wiczenie? Odwrcimy je. Napisz kod, ktry odszuka elementy li klasy portobello
i zastpi je elementami li klasy hamburger. Poniszy schemat powinien pomc Ci w jego opracowaniu.
Cz zadania rozwizalimy za Ciebie, a Ty zajmij si reszt.
!!
"
!
Kod, ktry
napiszesz tutaj...
...powinien zrobi to.
$(
).replaceWith(
li class=
"portobello"
hamburger
);
rozwizanie wiczenia
replaceWith przywraca wszystko do dawnej postaci w jednym szybkim ruchu. Dobra robota!
Rozwizanie
wiczenia
!!
"
!
li class=
"portobello"
Wybierz wszystkie
elementy klasy
portobello.
A co z misem?
Dotarlimy do ostatniej pozycji na licie przycisku Przywr menu:
Przywr w menu potrawy rybne w miejscu, z ktrego zostay usunite
(czyli przed pierwsz pozycj menu w lewej kolumnie).
Odszukaj potrawy zawierajce pieczarki i zastp je hamburgerami.
Odszukaj potrawy zawierajce tofu i zastp je poszczeglnymi
rodzajami mis (we waciwej kolejnoci).
Przypomnijmy, co zrobilimy z elementami li.meat.
Umiecilimy elementy li.tofu w drzewie DOM po elementach meat.
$(".meat").after("<li class='tofu'><em>tofu</em></li>");
Nastpnie odczylimy elementy li.meat, ale nie pozbylimy si ich, tylko zachowalimy w zmiennej $m.
$m = $(".meat").detach();
Gdzie wobec tego s te elementy i jak je przywrci?
202
Rozdzia 4.
Treciwa tablica
!!
!!
!!
!!
!!
!
!!
G
Kady element
li.meat...
...jest przechowywany
w przegrdce...
$m[0]
$m[1]
$m[2]
$m[3]
$m[4]
$m[5]
tablicy $m.
$m
WYSIL
SZARE KOMRKI
Dla wszystkich elementw li.tofu potrzebujesz przywrci element li.meat.
Poznae ju wiele metod umieszczania elementw w drzewie DOM. Z ktrej
z nich skorzystaby w tym przypadku?
each powraca
Dla Twoich
elementw metoda
each jest niczym
maszyna na tamie
montaowej.
mita
Indeks (iterator) pa ktrym
numer elementu, z
pracuje funkcja.
moc
Metoda each daje Ci iwia
ol
Um
.
ery
jQu
skryptw
mentem
ona prac z jednym ele
tablicy naraz.
i = 0
$m
Metoda each przetwarza
elementy tablicy jeden po drugim
i z kadym z nich co robi.
Kiedy wybierzemy
element akapitu, jQuery
zapisze go w tablicy.
Zmienna i zaczyna si
0 i zlicza kady przetw od
arzany
element.
$(".tofu").each(function(i){
$(this).after( );
$(this) to sposb
poinformowania funkcj
i
o elemencie, ktry jes
t
przetwarzany.
204
Rozdzia 4.
});
Tutaj uylimy metody after, ale cy,
aby pracowa na elementach tabli dy
moesz skorzysta z dowolnej meto
jQuery.
Magnesiki z kodem
U magnesiki z kodem we waciwej kolejnoci, aby otrzyma ukoczony
i dziaajcy przycisk restoreMe. Kilka magnesikw uoylimy za Ciebie.
$("button#restoreMe").click(function(){
if (v == true){
v = false;
});
my_scripts.js
"<li class='hamburger'>hamburger</li>");
$m[i]);
.before($f);
$(".portobello").replaceWith(
});
$(".menu_entrees li").first()
$(this).after(
$(".tofu").remove();
$(".tofu").each( function(i){
$("button#restoreMe").click(function(){
if (v == true){
"<li class='hamburger'>hamburger</li>");
$(".portobello").replaceWith(
$(".menu_entrees li").first()
.before($f);
$(".tofu").each( function(i){
$(this).after(
$m[i]);
});
$(".tofu").remove();
v = false;
t,
Przywracamy elementy klasy mea
odwoujc si do tablicy $m oraz wi
indeksu odpowiadajcego elemento
klasy tofu, na ktrym aktualnie
pracuje funkcja.
});
my_scripts.js
206
Rozdzia 4.
To ju wszystko... prawda?
Zrobie wszystko, co byo wymagane dla przycisku Przywr menu.
Zaktualizujmy nasze pliki i uznajmy nasze zadanie za ukoczone.
Przywr w menu potrawy rybne w miejscu, z ktrego zostay
usunite (czyli przed pierwsz pozycj menu w lewej kolumnie).
Odszukaj potrawy zawierajce pieczarki i zastp je
hamburgerami.
Odszukaj potrawy zawierajce tofu i zastp je poszczeglnymi
rodzajami mis (we waciwej kolejnoci).
Chwileczk, zapomnielimy
o P.S. na serwetce.
, ktra by
ymy te mie ikonk z liciem
P.S. Jeli si da, to chcielib
iki.
edn
owi
odp
cych wegetariaskie
si wywietlaa obok da maj
my_style.css
wiczenie
rozwizanie wiczenia
Rozwizanie
wiczenia
$(".tofu").parent().parent().addClass("veg_leaf");
Nie istniej
gupie pytania
na pogmatwan. Najtrudniejsze
do zrozumienia s jej parametry:
slice(start, end).
P:
O:
208
Rozdzia 4.
O:
w tablicy jQuery?
O:
O:
Jazda prbna
Mino ju troch czasu, od kiedy aktualizowae swoje pliki. Dodaj kod dla przycisku
Przywr menu oraz kod dodajcy i usuwajcy klas veg_leaf w miejscu, w ktrym
podstawiane s odpowiedniki wegetariaskie. Zawsze moesz pobra pliki z tego
rozdziau z ftp://ftp.helion.pl/przyklady/jquerg.zip i porwna je ze swoim kodem.
Rozdzia 4.
ie
n
a
w
o
l
Manipum DOM
drzewe
,
dodawa
moesz menty
,
z
s
e
c
le
ch
rne e
ylko ze
Kiedy t a i usuwa
w
zastpo OM:
D
drzewa
detach
remove
With
replace
before
after
Poruszanie
si po
drzewie DOM
drzewie DOM
Poruszanie si po
zczaniu si
polega na przemies
i czemu
ik
dz
ie,
w jego obrb
wa.
ulo
moesz nim manip
, gdzie chcesz,
Aby dosta si tam dzy
mi
korzystasz z relacji ojarzonych
sk
ze
z
ora
mi
nta
me
ele
jak parent
z nimi metod takich
i child.
acuchy jest
czenie metod w
na szybkie
wydajnym sposobem DOM.
a
ew
drz
przechodzenie
Tablice
ne
wuj r
przecho strony,
y
r
e
u
jQ
y
Tablice
element ie do nich
w tym
rzeczy, emu moesz m
z
dziki c
,
dostp.
iennych
adku zm licy znak
p
y
z
r
p
w
b
Tak jak rzed nazw ta ajduj si
p
n
z
ie
,
m
u
y
zaznacz dane jQuery.
$, aby
lne
ja
c
e
p
s
w niej
Filtry
Metody fi
lt
zbir wyb rujce pomagaj
ranych e
lementw zawzi
:
first
equal
last
slice
filter
not
210
Rozdzia 4.
5.(IHNW\LbDQLPDFMDZbM4XHU\
Nieco wdziku
na Twojej stronie
Zobaczcie, jak piknie si
poruszam. Mam w sobie
tyle gracji. Zao si,
e tak nie potraficie!
211
rezygnacja z flasha
212
Rozdzia 5.
Pojemnik
Ramka
)&
%
"&' (
)&
%
"&'
*
*
"
*
#
)&
%
"&'
)&
%
"&'
%
!"
frame.png
#"
$"
Twarz potwora
bdzie si skada
z kolejnych
czterech sekcji
przechowujcych
poszczeglne paski
z rysunkami.
div#pic_box
div#frame
214
Rozdzia 5.
div#head
div#eyes
79 pikseli szerokoci
div#nose
86 pikseli szerokoci
div#mouth
wiczenie
W kade z pustych miejsc w plikach HTML i CSS wpisz identyfikator CSS, waciwo albo ustawienie,
ktre pomog Ci skonfigurowa ukad i pooenie elementw aplikacji Zrb sobie potwora.
W przypadku wtpliwoci poszukaj wskazwek na dwch poprzednich stronach. Kilka z pustych
miejsc wypenilimy za Ciebie.
<body>
<header id="top"><img src="images/Monster_Mashup.png" />
#G I88F3 Z#F 3R&R3S\L8 3ZRK#GK%3? G
<div id="frame">
<div id= pic_box" >
<div id=
class="face"><img src="images/headsstrip.jpg"></div>
<div id=
class="face"><img src="images/eyesstrip.jpg"></div>
<div id=
class="face"><img src="images/nosesstrip.jpg"></div>
<div id=
class="face"><img src="images/mouthsstrip.jpg"></div>
</div>
</div>
<script type="text/javascript" src="scripts/jquery-1.7.min.js"></script>
<script type="text/javascript" src="scripts/my_scripts.js"></script>
</body>
index.html
#frame {
position:
left:100px;
top:100px;
F?%+#,
height:629px;
background-image:url(images/frame.png);
z-index: 2;
overflow:
}
#pic_box{
position: relative;
left:91px;
#+#,
.face{
position:
left:0px;
top:0px;
z-index: 0;
}
#head{
height:172px;
}
#eyes{
}
#nose{
%W%+#,
z-index: 1;
overflow:
}
}
#mouth{
}
my_style.css
rozwizanie wiczenia
W kade z pustych miejsc w plikach HTML i CSS wpisz identyfikator CSS, waciwo albo ustawienie,
ktre pomog Ci skonfigurowa ukad i pooenie elementw aplikacji Zrb sobie potwora.
W przypadku wtpliwoci poszukaj wskazwek na dwch poprzednich stronach. Kilka z pustych
Rozwizanie miejsc wypenilimy za Ciebie.
wiczenia
<body>
<header id="top"><img src="images/Monster_Mashup.png" />
#G I88F3 Z#F 3R&R3S\L8 3ZRK#GK%3? G
<div id="frame">
pic-box"
<div id=
>
<div id= head" class="face"><img src="images/headsstrip.jpg"></div>
<div id= eyes" class="face"><img src="images/eyesstrip.jpg"></div>
<div id= nose" class="face"><img src="images/nosesstrip.jpg"></div>
<div id= mouth" class="face"><img src="images/mouthsstrip.jpg"></div>
</div>
</div>
<script type="text/javascript" src="scripts/jquery-1.7.min.js"></script>
<script type="text/javascript" src="scripts/my_scripts.js"></script>
</body>
index.html
Kiedy animujemy
.face{
#frame {
pozycj elementw,
position: relative;
position: absolute;
powinnimy uywa
left:0px;
left:100px;
pooenia absolutnego
top:0px;
top:100px;
albo wzgldnego.
z-index: 0;
F?%+#,
}
height:629px;
background-image:url(images/frame.png);
#head{
z-index: 2;
height:172px;
overflow: hidden;
overflow }
}
e waciwoci
#pic_box{
position: relative;
left:91px;
#+#,
Nadani
n umoliwi
wartoci hiddeci paska
cz
e
#eyes{
nam ukryci
ra wykracza
z rysunkiem, ktkcji pic_box.
height:79px;
poza obszar se
#nose{
width:367px;
%W%+#,
z-index: 1;
overflow:hidden;
}
W tym celu
mona skorzysta
te z waciwoci
CSS clip.
height:86px;
}
#mouth{
height:117px;
my_style.css
216
Rozdzia 5.
Zrb to!
index.html
- ,
1,
!21!
0
1 &
2-::::::0
2:;0
}
Chcemy, eby
rysunki z byskawic
byy pocztkowo
niewidoczne.
2:;0
&
;2:0
}
#
?,
,
2-66VV770
&
2B?Q[
Q\
Q
]
Q!!&!
0
!
2
0
!21!
0
2:;0
2:;0
&
;2:0
}
-
;",
!2
0
&
;2U0
}
my_style.css
Uaktywniamy interfejs
Teraz, kiedy opracowalimy ju wizualnie ukad strony Zrb sobie potwora, skonfigurujmy
reszt sekcji interfejsu uytkownika zgodnie z otrzymanym planem. Cz ta sprowadza
si do klikania w celu wywoywania zdarze. Zajmujesz si tym ju od czterech rozdziaw,
wic konfiguracja powinna Ci pj jak z patka.
' (
Pojemnik
Ramka
)&
%
"&' (
Trzeba klik
z obszar n kady
przewinw, aby
rysunek.
)&
%
"&'
*
*
"
*
#
)&
%
"&'
)&
%
"&'
de
Naley zlicza ka sek
kliknicie, aby pa a
z rysunkiem mon
byo przewin na
pocztek.
Nie istniej
gupie pytania
http://developer.mozilla.org/en/CSS/
position#Relative_positioning
218
Rozdzia 5.
P: Wspomniae o silniku
przegldarki odpowiedzialnym za
ukad strony. Co to takiego?
O:
headclix
});
if (headclix
else {
= 0;
headclix
}
= 0;
});
$(document).ready(function(){
var headclix
< 9){
$("#head").click(function(){
= 0;
$("#head").click(function(){
if (headclix
Jeeli zmienna
headclix jest
wiksza lub
rwna 9, zrb to.
headclix
< 9){
headclix
else {
= 0;
Po dziesitym klikniciu
zresetuj zmienn headclix.
}
});
});
220
Rozdzia 5.
Zaostrz owek
Uzupenij poniszy skrypt jQuery, aby elementy oczu, nosa i ust byy aktywne. Za chwil do kadego
kliknicia dodamy odpowiedni funkcjonalno. Upewnij si, e zmienne oraz instrukcje warunkowe
zachowuj waciw kolejno, dziki czemu bdziesz mg wykry dziesite kliknicie.
$(document).ready(function(){
$("#head").click(function(){
if (headclix < 9){
%3?L&,
}
else{
headclix = 0;
}
});
});
my_scripts.js
zaostrz rozwizanie
Zaostrz owek
Rozwizanie
$(document).ready(function(){
var headclix = 0, eyeclix=0, noseclix= 0, mouthclix = 0;
$("#head").click(function(){
if (headclix < 9){
%3?L&,
}
deklarowa
Moemy za ych i nada im
nn
ie
zm
le
wie
zdzielajc te
wartoci, ro cinkami.
ze
pr
e
zmienn
else{
headclix = 0;
}
});
$("#eyes").click(function() {
if (eyeclix < 9){
eyeclix += 1;
}
else{
eyeclix = 0;
}
});
$("#nose").click(function() {
if (noseclix < 9){
noseclix += 1;
}
else{
noseclix = 0;
}
});
$("#mouth").click(function() {
if (mouthclix < 9){
mouthclix += 1;
}
else{
mouthclix = 0;
}
});
Cierpliwoci, mj
pasikoniku, dojdziemy
do tego w rozdziale 7.
});
my_scripts.js
222
Rozdzia 5.
' (
Pojemnik
Ramka
)&
%
"&' (
)&
%
"&'
)&
%
"&'
i musz si szybko
pojawia i znika.
*
*
"
*
#
)&
%
"&'
Zrobilimy ju co podobnego
w rozdziale 1. z wysuwaniem
si rysunku i nabieraniem przez
niego barw. Czy nie moglibymy
skorzysta z tego samego, eby
Zrb sobie potwora zadziaao?
sztuczki z waciwociami
show
WYSIL
SZARE KOMRKI
hide, show i toggle zmieniaj waciwo display. Potrzebujemy jednak
przewija czci twarzy oraz w tym samym czasie wcza i wycza
byskawice. Ktr waciwo CSS zmienia Twoim zdaniem jQuery w celu
uzyskania tych efektw?
224
Rozdzia 5.
B
X
Porady maniaka
Czy jeste
kim w rodzaju
magika?
Wersja DOM
strony
slideUp
Interpreter
JavaScriptu
!
3=
!
B
226
Rozdzia 5.
Zaostrz owek
Ktre z gotowych efektw jQuery przydadz si w aplikacji Zrb sobie potwora?
Dla kadej grupy efektw napisz, czy bd one pomocne, i wyjanij, dlaczego
t grup wybrae lub nie.
Efekt
Czy moemy
go uy?
Dlaczego?
Pokazywanie/
ukrywanie
Wysunicia
Wygaszenia
zaostrz rozwizanie
Zaostrz owek
Rozwizanie
Efekt
Czy moemy
go uy?
Dlaczego?
Pokazywanie/
ukrywanie
Nie
Efekty pokazywania i ukrywania (show i hide) nie pomog nam przy tworzeniu
aplikacji Zrb sobie potwora, poniewa nie musimy animowa waciwoci
display adnego elementu.
Wysunicia
Nie
Wygaszenia
Tak
tion decydujcy
Tutaj wstawiamy parametr dura
roluje on to,
Kont
acji.
anim
nia
trwa
ie
czas
o
jak dugo bdzie trwa efekt.
$("#lightning1").fadeIn("fast");
w
Moesz uy jednego z parametr ...
tekstowych: slow, normal lub fast
$("#lightning1").fadeIn(':::);
228
Rozdzia 5.
$("#lightning1").fadeIn().fadeOut();
Kada metoda,
ktr dodajesz,
jest jak ogniwo
w acuchu.
Dodaj kolejny efekt, ktry wygasi element #lightning1 w czasie jednej czwartej
sekundy.
piorun uderza
Rozwizanie
wiczenia
Dodaj kolejny efekt, ktry wygasi element #lightning1 w czasie jednej czwartej
sekundy.
$("#lightning1").fadeIn("250").fadeOut("250");
function lightning_one(t){
$("#lightning1").fadeIn(250).fadeOut(250);
!
B
*
?"
*+Q+0
};
Ten wiersz
zawiera kod
Metoda setTimeout
efektw jQuery. nakazuje interpreterowi
JS wywoanie funkcji,
a nastpnie odczekanie
chwil przed ponownym
jej wywoaniem.
230
Rozdzia 5.
Magnesiki jQuery
Poukadaj magnesiki z kodem we waciwej kolejnoci, aby uzyska funkcje animujce
byskawice dla pozostaych dwch elementw z piorunami.
function
lightning_two
(t){
};
function
lightning_three
(t){
};
.fadeIn(250)
t);
"lightning_two()",
.fadeOut(250);
setTimeout(
$("#lightning2")
"lightning_three()",
.fadeIn(250)
setTimeout(
.fadeOut(250);
t);
$("#lightning3")
lightning_two
function
$("#lightning2")
setTimeout(
(t){
.fadeIn(250)
.fadeOut(250);
"lightning_two()",
t);
};
lightning_three
function
$("#lightning3")
setTimeout(
(t){
.fadeIn(250)
.fadeOut(250);
"lightning_three()",
t);
};
Nie istniej
gupie pytania
O:
232
Rozdzia 5.
O:
O:
W tych
wierszach s
wywoywane
funkcje
zdefiniowane
na samym dole
pogrubion
czcionk.
$(document).ready(function(){
var headclix = 0, eyeclix
?" *U:::+0
?"=*@:::+0
?"? *(:::+0
= 0, noseclix = 0, mouthclix = 0;
Liczby midzy nawiasami to parametry w milisekundach,
ktre zostan przekazane do metody setTimeout. Za ich
pomoc moesz zmienia czasy byskania piorunw.
$("#head").click(function(){
%3?L&,%3?L&,4
else{headclix = 0;}
});
$("#eyes").click(function(){
L&,L&,4
else{eyeclix = 0;}
});
$("#nose").click(function(){
L&,L&,4
else{noseclix = 0;}
});
$("#mouth").click(function(){
9%L&,9%L&,4
else{mouthclix = 0;}
});
});//koniec funkcji end doc.onready
To s definicje
funkcji
byskawic.
?"
*+,
)*-
-
?'+#
A*9@:+#
X*9@:+0
!
B
*
?"
*+Q+0
.0
?"=*+,
)*-
-
?9+#
A* !+#
X* !+0
!
B
*
?"=*+Q+0
.0
?"?
*+,
)*-
-
?6+#
A* !+#
X* !+0
!
B
*
?"?
*+Q+0
.0
my_scripts.js
jazda prbna
Jazda prbna
Otwrz stron w swojej ulubionej przegldarce, aby sprawdzi, czy Twj efekt byskawicy dziaa.
Udao Ci si osign
efekt wygaszania
byskawic, czc go
z metod JavaScriptu
setTimeout.
Pioruny pojawiaj
si i znikaj szybko
w rnych odstpach
czasu, symulujc
prawdziwe byskawice.
ca,
Symulacja obrazuj
.
potwora
Symulacja
jak powinna si
y
zmienia cz twarz
nna wyglda
obrazujca, jak powi
animacja byskawicy.
234
Rozdzia 5.
Dotarlimy wic do
miejsca, w ktrym potrzebujemy
przesun rysunek w lewo,
a aden z gotowych efektw
przesuwania tego nie robi. Czy
istnieje jaka inna metoda,
ktrej moglibymy uy?
Gotowe efekty s wspaniae,
ale nie pozwalaj Ci robi
wszystkiego, na co tylko
masz ochot.
Nadesza pora na opracowanie
niestandardowego efektu, ktry
bdzie przesuwa czci twarzy
potwora w lewo.
Efekty ruchu
Efekty skali
WYSIL
SZARE KOMRKI
Moesz animowa waciwoci
CSS height i width, aby
tworzy iluzj ronicia albo
kurczenia si elementu.
to kwestia matematyki
Efekty tekstowe
.XUF]VLNXUF]
2FKFR]DZLDWFR]DZLDW
.XUF]VLNXUF]
2FKFR]DZLDWFR]DZLDW
.XUF]VLNXUF]
2FKFR]DZLDWFR]DZLDW
.XUF]VLNXUF]
2FKFR]DZLDWFR]DZLDW
.XUF]VLNXUF]
2FKFR]DZLDWFR]DZLDW
2EHMU]\MWR
FRX&9FRX
3&33R3&3
#ZLS3J3
Z RX&9
Z RX3&3
3R3&3
rozmiar czcionki;
236
Rozdzia 5.
?#?Z& 3
F 3Z3
FLLR9
FRX&
Pierwszy parametr
pozwala Ci wybra
waciwo CSS, ktr
chcesz animowa.
$("#my_div").animate({left:"100px"},500);
W tym przykadzie animujemy
waciwo CSS left...
...i ustawiamy j
na 100 pikseli.
$("#my_div").animate({
opacity: 0,
width: "200",
height: "800"
}, 5000);
2EHMU]\MWR
WYT
UMYS
A
animate
5
6
'
'
'
'
Zmie waciwo CSS
left na 500px w czasie
400 milisekund.
Interpreter
JavaScriptu
2
ate nie
odzie anim
Jeli w metartoci dla parametru
okrelisz w ia, zostanie przyjta .
czasu trwan ylna 400 milisekund
m
warto do
4
5
6
'
3
'+
*
animate
'+
Chciabym ustali
harmonogram
odwieania ekranu.
internetowej
JavaScript
interpreter
3
4
5
6
'
7'
'
'+
* '&3'
'F
7'
4
238
Rozdzia 5.
$("p").animate({
marginLeft:"150px",
marginRight:"150px"
});
$("#my_div").animate({width: "30%"}, 250)
$("p").animate({letterSpacing:"15px"});
$("#my_div").animate({
padding: "200px",
width: "30%"
}, "slow")
Rozwizanie
Pocz fragmenty kodu zawierajce metod animate z opisem tego, co robi
on na ekranie.
$("#my_div").animate({top: "150px"}, "slow")
$("p").animate({
marginLeft:"150px",
marginRight:"150px"
});
$("#my_div").animate({width: "30%"}, 250)
$("p").animate({letterSpacing:"15px"});
$("#my_div").animate({
padding: "200px",
width: "30%"
}, "slow")
240
Rozdzia 5.
#my_div
#my_div{
Element jest
animowany
do pooenia
bezwzgldnego.
$("#my_div").animate({left:"100px"});
left: 20px;
}
#my_div
zaczyna si od
dwusetnego
piksela
#my_div{
$("#my_div").animate({left:"100px"});
left: 200px;
}
szeroko 367
pikseli
szeroko 367
pikseli
Zaczynamy od
pokazania pierwszej
czci gowy. Jej
wzgldne pooenie to
0 pikseli.
$("#my_div").animate({left:"100px"});
suna
Ale jak powiedzie jej, eby prze
element o 367 pikseli za kadym anie
razem, kiedy metoda animate zost
wywoana?
$("#head").animate({left:"???"});
242
Rozdzia 5.
a = 20
Operator = przypisuje
zmiennej a warto 20.
a 30
a -= 10
atorem
Znak plusa w poczeniu z oper
a = a + 30.
przypisania jest tu skrtem dla
)
+
$("#box").animate({left:I9:});
Oto, co si stanie z elementem #box przy kadym wywoaniu powyszej
animate zostaje
metody animate.
animate zostaje
wywoana i ustawia
left na +=20.
Zamy, e
left startuje
z wartoci 0.
left = 0
left = 20
CELNE SPOSTRZEENIA
wywoana i ustawia
left na +=20.
left = 40
Przesunicie elementu #head o 367 pikseli w lewo przy kadym wywoaniu metody
animate. Czas trwania ustaw na p sekundy.
rozwizanie wiczenia
Rozwizanie
wiczenia
Przesunicie elementu #head o 367 pikseli w lewo przy kadym wywoaniu metody
animate. Czas trwania ustaw na p sekundy.
$("#head").animate({left:"-=367px"},500);
Nie istniej
gupie pytania
O: To doskonae spostrzeenie.
P: Powiedziae: Parametry
244
Rozdzia 5.
http://www.oxfordu.net/webdesign/dom/
straight_text.html
$("#head").click(function(){
if (headclix < 9){
)*?!+#
*,
2&67(;.Q@::+0
%3?L&,
}
else{
)*?!+#
*,
2:;.Q@::+0
headclix = 0;
} Moemy tu skorzysta ze sowa
});
Zrb to!
$("#eyes").click(function(){
if (eyeclix < 9){
)*?!+#
*,
2&67(;.Q@::+0
L&,
}
else{
)*?!+#
*,
2:;.Q@::+0
eyeclix = 0;
}
});
$("#nose").click(function(){
if (noseclix < 9){
)*?!+#
*,
2&67(;.Q@::+0
L&,
}
else{
)*?!+#
*,
2:;.Q@::+0
noseclix = 0;
}
});
$("#mouth").click(function(){
if (mouthclix < 9){
)*?!+#
*,
2&67(;.Q@::+0
9%L&,
}
else{
)*?!+#
*,
2:;.Q@::+0
mouthclix = 0;
}
my_scripts.js
jazda prbna
Jazda prbna
Otwrz stron w swojej ulubionej przegldarce, aby upewni si, e wszystko dziaa.
Udao Ci si
napisa dziaajcy
niestandardowy
efekt przesuwania
w lewo.
246
Rozdzia 5.
Krzywka jQuery
Nadszed czas, aby wygodnie usi i da swojej lewej pkuli
jakie zajcie. Bdzie to zwyka krzywka. Wszystkie wyrazy
i wyraenia stanowice hasa pochodz z biecego rozdziau.
Poziomo
Pionowo
1. 1000 milisekund.
potworny sukces
Fajowo! Zrobiem
tyle potworw,
e a si w tym
pogubiem!
248
Rozdzia 5.
Niesamowite!
Wystrasz moj
modsz siostr
potworem, ktrego
zrobiam!
Rozdzia 5.
Efekty ania
wygasz
S
o CS
waciw tu:
j
ia
n
men
Zmie
nego ele
wskaza
opacity
Efekty
wysuwan
ia
Zmieniaj
wskazane waciwo CSS
go eleme
height
ntu:
slideUp
slideDow
n
slideTogg
le
fadeIn
fadeOut
fadeTo
animate
ji, kiedy
dowych animac
nie niestandar arczaj.
ze
or
tw
ia
liw
Umo
wyst
jQuery ju nie
gotowe efekty
woci CSS.
Animuje waci
i CSS, ktre
waciwociam
i
m
ki
ta
z
o
lk
Dziaa ty
oci liczbowe.
.
przyjmuj wart
bo bezwzgldnie
wzgldnie al
wa
su
ze
pr
na
Elementy mo
ym stopniu
+, ) w znaczn
,
(=
w
or
at
er
Poczenia op
acj wzgldn.
uatwiaj anim
250
Rozdzia 5.
6.M4XHU\Lb-DYD6FULSW
3'
!!
G;"
'
'3'&'
+
'
'
'
HEG0</'&'+
*
7
+B
'
H
'
'
'&
I
/3'&'
FFF2
FE<E9<D
+13
F
'
'+
=5
'
=
A'
F
'
'
'
J5
'
=
'
'
+
K5
'
=F
L'
'
'
+
5
'&
3
L'
5
3
''
;
'
++
G
+
M'&'
+
':
*
+BH
--
252
Rozdzia 6.
jquery i javascript
Franek
Jzek
Kuba
bez obiekcji
Tablica
Zmienna
Kiedy nadasz
nazw wielu
wartociom,
zostan one
zapamitane
w tablicy.
@3 3-
@3 @-
Obiekty oferuj jeszcze inteligentniejsze metody przechowywania danych. S one uywane wtedy, gdy
trzeba zapamita wiele zmiennych dotyczcych okrelonej rzeczy. Zmienna znajdujca si wewntrz
obiektu nosi nazw waciwoci. Obiekt moe te zawiera funkcje, ktre pozwalaj pracowa na jego
waciwociach. Taka funkcja utworzona wewntrz obiektu nazywana jest metod.
Obiekt
obiektSamolot={
&R+
#+#33 R
XWJ+4
Teraz dane s zgromadzone
w jednym zbiorze opisujcym
samolot.
Korzystaj
z obiektw,
kiedy musisz
przechowywa
wiele informacji
dotyczcych
okrelonej rzeczy.
254
Rozdzia 6.
obiektLeopard={
&LZ83ALR+-
R& +8 \ZF4
Nazw waciwoci
czysz...
obiektSamolot.silniki;
obiektLeopard.kolor;
Obiekt
Jego waciwo
WYSIL
SZARE KOMRKI
Jakie waciwoci moe mie
obiekt opisujcy kart?
jquery i javascript
mojKraj
Nazwa obiektu
mojaNazwa
mojaStolica
Metoda obiektu
Waciwoci
obiektu
pobierzStolice()
var mojKraj = {
pobierzStolice: function() {
alert(this.mojaStolica);
Uruchom t funkcj,
kiedy zostanie
wywoana metoda.
},
mojaNazwa : 'Polska',
Utwrz waciwoci
obiektu o nazwach
mojaNazwa i mojaStolica.
Nadaj wartoci
waciwociom.
Zawsze umieszczaj
obiekt midzy nawiasami
klamrowymi.
mojaStolica : 'Warszawa'
},
ie
Sp
ojn
ok
function mojaOsoba(a,b){
this.imie = a;
Waciwoci obiektu
mojaOsoba
imie
wiek
Nadaj wartoci
waciwociom
obiektu.
this.wiek = b;
Obiekt jako
diagram UML
}
Hm, zupenie jak plan domu.
Jeli zaprojektuj go raz,
bd mg korzysta z niego
wci na nowo. Dziki temu
zaoszczdz czas!
WYSIL
SZARE KOMRKI
Zastanw si nad miejscem, w ktrym
moesz uy tych obiektw.
256
Rozdzia 6.
jquery i javascript
Interakcja z obiektami
Obiekty mog przyjmowa rne ksztaty i rozmiary. Kiedy utworzysz instancj obiektu
na podstawie wzoru utworzonego przez Ciebie albo przez kogo innego bdziesz
mg z ni pracowa, uywajc operatora kropki (.). Aby zyska pojcie na temat tego,
jak dziaaj obiekty, przyjrzyjmy si obiektom mojKraj i mojaOsoba, ktre przed chwil
zdefiniowalimy.
Konwencja stosowania
operatora kropki wyglda
nastpujco: nazwa_obiektu.
nazwa_metody() albo nazwa_
obiektu.nazwa_waciwoci()
mojKraj.pobierzStolice();
alert(mojKraj.mojaNazwa);
Uyj polecenia new, aby utworzy
now instancj obiektu.
Uzyskiwanie dost
pu do
waciwoci mojaN
azwa.
W wyniku na stronie
zostanie wywietlona
nazwa Polska.
@3 3R FS3833LR-
Utwrz nowe instancje
obiektu mojaOsoba
o nazwach aktor1
i aktor2.
Uzyskiwanie dostpu do
waciwoci wiek instancji
obiektu mojaOsoba o nazwie
aktor2 (w tym przypadku 33).
zacznijmy ju t gr
Konfiguracja strony
#controls{
clear:both;
}
#my_hand{
clear:both;
border: 1px solid gray;
height: 250px;
width: 835px;
Zrb to!
}
h3 {
display: inline;
#3??W W%+#,
}
<!DOCTYPE html>
.current_hand{
<html>
float:left;
<head>
}
&G&3LRS3LR9ZJF\K&G
<link href="styles/my_style.css" rel="stylesheet">
</head>
my_style.css
<body>
<div id="main">
%G&RS38?R R3 K%G
<h3 id="hdrTotal"></h3><h3 id="hdrResult"></h3>
<div id="my_hand">
</div>
Czy ju niedugo
bd moga zabra
si za rozdawanie
kart?
<div id="controls">
<div id="btnDeal">
<img src="images/deck_small.jpg">
</div>
</div>
</div>
<script src="scripts/jquery-1.7.min.js"></script>
<script src="scripts/my_scripts.js"></script>
</body>
</html>
index.html
258
Rozdzia 6.
jquery i javascript
Jazda prbna
Otwrz w swojej ulubionej
przegldarce stron index.html,
ktr wanie utworzye, aby
zobaczy jej podstawow struktur.
wiczenie
Posugujc si diagramem UML obiektu reprezentujcego kart pokazanym poniej, utwrz obiekt
wielokrotnego uycia o nazwie card, ktry przyjmuje trzy parametry o nazwach name, suit i value.
Parametry te powinny by wartociami waciwoci obiektu. Nasz obiekt nie bdzie mie adnych metod.
Fragment kodu napisalimy za Ciebie.
card
function card(
) {
name
suit
value
rozwizanie wiczenia
Rozwizanie
wiczenia
Oto Twj obiekt card. Umie go w pliku my_scripts.js wewntrz sekcji $(document).
ready(function(){ });. Na razie powinien to by jedyny kod w tym pliku.
uywana
moga by
Aby funkcja skorzystaj ze sowa
e,
wielokrotni function.
kluczowego
card
name
suit
value
e ) {
function card( name, suit, valu
this.name = name;
this.suit = suit;
this.value = value;
Przypisz argume
waciwoci obieknty do
tu.
my_scripts.js
Nie istniej
gupie pytania
260
Rozdzia 6.
moesz napisa:
obiekt['moja_wlasciwosc']
i uzyska ten sam wynik dostp do
wartoci waciwoci moja_wlasciwosc.
jquery i javascript
Tak wic nasz obiekt reprezentujcy
kart bdzie superuyteczny, ale
cigle potrzebujemy jakiego sposobu
na zapamitanie poszczeglnych kart
w trakcie gry, zgadza si?
Masz racj.
Potrzebujemy sposobu na przechowywanie
i odczytywanie kart, kiedy zostan one ju
rozdane. Szczliwie widzielimy ju, jak
mona to zrobi...
To znowu ja.
Pracowae ju
troch ze mn
w rozdziale 4.
Powrt tablic
Jak ju widzielimy, moemy zgrupowa wiele elementw w pojedynczej strukturze
zwanej tablic. Elementy tablicy niekoniecznie musz by ze sob powizane,
ale odczytywanie ich wartoci jest wwczas o wiele atwiejsze. Ju w rozdziale 4.
zobaczylimy, jak selektor jQuery zwraca elementy i zapisuje je w tablicy.
Teraz skorzystamy z JavaScriptu, aby mie z tablic jeszcze wicej poytku.
Zmienne w tablicy mog by dowolnego typu mog by acuchami tekstowymi,
liczbami, obiektami, a nawet elementami HTML. Istnieje kilka sposobw na tworzenie
wasnych tablic:
Utwrz pust
tablic za pomoc
sowa kluczowego
new.
Utwrz tablic za
kluczowego new pomoc sowa
powinny by jej oraz poka, jakie
wartoci.
2EHMU]\MWR
Dostp do tablic
W przeciwiestwie do tworzenia tablic istnieje tylko jeden sposb na odczytywanie
informacji zapisanych w tablicy. Tablice s indeksowane od zera, co znaczy, e ich
pozycje (indeksy) rozpoczynaj si od 0. Korzystalimy z indeksw w rozdziale 3.,
tak wic zawsze moesz tam powrci, jeli czego nie kojarzysz.
alert( "9m0n ) ;
KKHR3&3 9#S3F
Oto nazwy tablic,
ktre utworzylimy
na stronie 261.
alert( my_arr3[9] );
KKHR3&3 9#S3F3#3
alert( my_arr1[1] );
KKHR8?Z8J\?#F3&S
Oczywicie, e nie!
Dodawanie, zmienianie i usuwanie
elementw z tablicy jest bardzo proste.
Zerknijmy, jak to robi.
262
Rozdzia 6.
jquery i javascript
my_arr1[1] = "Hiszpania" ;
Zaktualizuj warto pierwszego
elementu w tablicy my_arr1.
A3 HJL%
alert( my_arr1[0] );
KKHXF&33R 33#HJL%
my_arr3[2] = "Kanada";
alert( my_arr3[2] );
KKHXF&33R 33#33?3
wiczenie
W swoim pliku my_scripts.js po kodzie obiektu card utwrz tablic o nazwie deck
z 52 kartami, jakie zawiera standardowa talia kart.
Moesz skorzysta z obiektu, ktry wanie utworzye, i wywoa za kadym razem
konstruktor z waciwymi parametrami w celu utworzenia wszystkich kart (od asa do
krla) dla kadego z kolorw (trefl, kier, karo i pik), nadajc im wszystkim wartoci,
tak e as bdzie wart 11, dwjka 2, trjka 3 itd.
rozwizanie wiczenia
Rozwizanie
wiczenia
Okrel nazw tablicy.
Twj plik my_scripts.js powinien teraz zawiera tablic o nazwie deck z 52 kartami, tak jak
w standardowej talii do gry, a take obiekt card. Powiniene uy tego obiektu i kadorazowo
wywoa konstruktor z waciwymi parametrami, aby utworzy kad z kart.
Przeka trzy parametry dla
kadego obiektu klasy card.
var deck = [
new card('As', 'Kier',11),
new card('Dwjka', 'Kier', 2),
new card('Trjka', 'Kier', 3),
FL3 ?ZFI R3
'Karo', 3),
Niekoniecznie.
264
Rozdzia 6.
my_scripts.js
jquery i javascript
Inicjalizacja
Odbywa si raz przed uruchomieniem ptli.
Sprawdzenie warunku
Sprawdzenie, czy ptla powinna si zatrzyma, czy te kontynuowa
kolejny przebieg kodu. Sprawdzenie warunku polega zwykle na
sprawdzeniu wartoci zmiennej.
Na szczcie lubi
robi rne rzeczy
wiele razy!
Akcja
Jest to kod powtarzany podczas kadego przebiegu ptli.
Aktualizacja
Ta cz aktualizuje zmienne uywane do sprawdzania warunku, aby
umoliwi stwierdzenie, czy ptla powinna zosta powtrzona, czy te nie.
zapany w ptl
Ptle w zblieniu
Przygldajc si bliej rnym rodzajom ptli, o ktrych wspomnielimy, moemy stwierdzi, e
kada z nich zawiera cztery gwne elementy, ale rozmieszczone w innej kolejnoci. Kolejno ta
odzwierciedla niektre z zasadniczych rnic wystpujcych midzy poszczeglnymi typami ptli.
Ptle for
Sekcja midzy nawiasami okrela,
jak dugo bdzie trwa ptla.
Zaczyna
si sowem
kluczowym for.
1
Zadeklaruj w ptli
zmienn, ktra
bdzie uywana do
ustawiania indeksu
tablicy. Zmienna
ta bdzie uywana
wycznie wewntrz
ptli.
Zawarto ptli
zawsze umieszczaj
midzy nawiasami
klamrowymi.
Zwikszaj warto
indeksu w miar
wykonywania si ptli.
jest metod
czsto uywan we
wszystkich tablicach.
Podaje ona, ile
elementw ma tablica
.
Ptle do...while
Zadeklaruj zmienn, ktra
bdzie uywana do ustawiania
indeksu tablicy.
var i=0;
Pamitaj, e ta zmienna
bdzie uywana wycznie
wewntrz ptli.
Pamitaj, eby
umieszcza
ptle midzy
nawiasami
klamrowymi.
do{
3
alert(my_arr2[i]);
4
W miar wykonywania si
ptli zwikszaj zmienn
warunkow.
}while (i<=5);
Rozdzia 6.
266
jquery i javascript
Niele! Te ptle powinny nam pomc
w szybkim przechodzeniu przez
wszystkie karty. Zrobimy t aplikacj
w okamgnieniu. Co dalej?
Kuba
Jzek
Warto, ktrej
szukasz
Tablica, w ktrej
chcesz szuka
Oto warto,
ktrej szukasz.
@3 ?RAW&! 3WJ3W33
WYSIL
SZARE KOMRKI
Co musi sprawdzi aplikacja w blackjacku, eby stwierdzi,
czy okrelona warto zostaa ju uyta?
268
Rozdzia 6.
jquery i javascript
Magnesiki jQuery
Poukadaj magnesiki, aby uzyska kod realizujcy kilka funkcji, ktre pomog Ci ukoczy gr w backjacka.
Kod powinien zawiera dwie funkcje deal i hit oraz suchacza zdarzenia kliknicia dla elementu
o identyfikatorze btnDeal, a take now zmienn tablicow o nazwie used_cards, w ktrej bd
pamitane rozdane ju karty.
var used_cards = new ___________();
function ___________{
getRandom
@3 -
hit();
}
deal()
}
function getRandom(num){
used_cards
@3 A93%& AAAAAAAAAAAAAAAAAAA9
return my_num;
}
'src'
hit()
function __________{
var good_card = false;
do{
var index = ________________(52);
while
if( !$.inArray(index, ______________ ) > -1 ){
good_card = true;
Array
var c = deck[ index ];
_____________[used_cards.length] = index;
hand.cards[hand.cards.length] = c;
"#my_hand"
var $d = $("<div>");
$d.addClass("current_hand")
.appendTo(_____________);
$("<img>").appendTo($d)
3 AAAAAAA3WKL3 ?KL9KL3S#W
.fadeOut('slow')
.fadeIn('slow');
}
function
}__________(!good_card);
used_cards
good_card = false;
}
$("#btnDeal").click( _____________(){
Math.random()
deal();
$(this).toggle();
});
my_scripts.js
Array
var used_cards = new ___________();
rozdane karty.
deal(
)
function ___________{
@3 -
Tutaj uyj ptli w celu dwukrotnego wywoania
hit();
funkcji hit.
Jeszcze raz
}
funkcja getRandom!
}
function getRandom(num){
@3 A93%& AAAAAAAAAAAAAAAAAAA9
Math.random()
return my_num;
}
hit()
function __________{
Za pomoc funkcji inArray
var good_card = false;
sprawd, czy nie masz ju karty,
do{
ktr wybrae.
getRandom
var index = ________________(52);
Zmienna
if( !$.inArray(index, ______________
used_cards ) > -1 ){
warunkowa
kontrolujca
good_card = true;
We kart z talii.
ptl do...while
var c = deck[ index ];
used_cards
_____________[used_cards.length]
= index;
hand.cards[hand.cards.length] = c;
Wstaw indeks
do tablicy usedkarty
var $d = $("<div>");
_cards.
$d.addClass("current_hand")
.appendTo(______________);
"#my_hand"
$("<img>").appendTo($d)
3 AAAAAAA3WKL3 ?KL9KL3S#W
'src'
Karta rozbynie
.fadeOut('slow')
na ekranie.
W celu utworzenia cieki
.fadeIn('slow');
do rysunku z kart
}
skorzystaj z waciwoci
obiektu card.
}__________(!good_card);
while
Jeli karta zostaa
j
bu
spr
ju uyta,
good_card = false;
ponownie.
}
function
$("#btnDeal").click( _____________(){
deal();
$(this).toggle();
});
270
Rozdzia 6.
my_scripts.js
jquery i javascript
Jazda prbna
W pliku my_scripts.js po tablicy deck dodaj cay kod z ostatniego wiczenia
z magnesikami i wyprbuj go w przegldarce. Kliknij tali kart, aby przeprowadzi
kolejne rozdanie w blackjacku.
WYSIL
SZARE KOMRKI
Czy potrafisz wskaza, z czego moglibymy skorzysta,
aby zapamita wszystkie te informacje?
Kod
gotowy do
wysmaenia
<!DOCTYPE html>
clear:both;
<html>
<head>
.current_hand{
&G&3LRS3LR9ZJF\K&G
float:left;
</head>
<body>
#my_hand{
<div id="main">
clear:both;
<h3 id="hdrTotal"></h3>
gray;
<h3 id="hdrResult"></h3>
<div id="my_hand">
height: 250px;
</div>
width: 835px;
<div id="controls">
<div id="btnDeal">
}
w
Dla nowych przycisk
dodaj kod CSS.
-1]Q-1g Q
<img src="images/deck_small.jpg">
-1P !,
</div>
!
2
0
1]
owe
Dodaj n i do
k
is
c
y
rz
p
nia
sterowa
.
gr
2
0
#
}
</div>
1g
h3 {
#
display: inline;
</div>
#3??W W%+#,
</div>
</div>
<script src="scripts/jquery-1.7.min.js"></script>
<script src="scripts/my_scripts.js"></script>
</body>
my_style.css
</html>
index.html
272
Rozdzia 6.
jquery i javascript
Nie istniej
gupie pytania
O:
O:
O:
wiczenie
var hand = {
cards : new Array(),
current_total : 0,
hand
sumCardTotal : function(){
cards
current_total
sumCardTotal()
}
};
rozwizanie wiczenia
Masz ju wic obiekt hand z waciwoci cards (bdc tablic) oraz z funkcj, ktra przebiega
w ptli przez tablic cards, znajduje biec kart i aktualizuje czn warto kart.
Rozwizanie
wiczenia
var hand = {
cards : new Array(),
current_total : 0,
hand
cards
current_total
ci
0.
aciwo
Nadaj w total warto
current_
this.current_total = 0;
for(var i=0;i<this.cards.length;i++){
var c = this.cards[i];
this.current_total += c.value;
sumCardTotal()
Przechod w ptli
przez tablic cards.
sumCardTotal : function(){
Pobierz z tablicy
biec kart.
Dodaj warto do
zmiennej current_tota
l.
this.current_total );
$("#hdrTotal").html("Razem: " +
Wypisz na ekranie, w elemencie
hdrTotal, biec warto sumy
narastajcej.
};
274
Rozdzia 6.
jquery i javascript
Pocztek
instrukcji if
Mona
Operator porwnania.
e.
wn
r
o
jak
ta
go czy
KK I8LX^
Kod, jaki chcemy uruchomi, jeli
to, co sprawdzimy, okae si by
prawd.
}else{
Kolejny warunek,
jaki chcemy
sprawdzi
> 20 ) {
KK I8LXW^
}else{
KK3RLZ I8LXSZLZW^
}
WYSIL
SZARE KOMRKI
Czy wiesz, w ktrym miejscu swojego kodu mgby uy instrukcji if / else if / else?
a != b
Rwno
a == b
Dokadna rwno
a === b
Prawda, jeli a jest rwne
b pod wzgldem wartoci
i typu
ne
Prawda, jeli a jest r
od b
a<b
Operatory porwnania
a >= b
Prawda, jeli a ma
warto mniejsz
ni b
a>b
Prawda, jeli a ma
b
warto wiksz ni
Prawda, jeli a ma wa
mniejsz lub rwn b rto
Operatory logiczne
Negacja
!a
Prawda, jeli a jest
faszywe lub nie
istnieje (w przypadku
elementw drzewa
DOM)
276
Rozdzia 6.
Lub
a || b
I
a && b
jquery i javascript
Zaostrz owek
Zaktualizuj swj obiekt hand, aby sprawdza, czy warto waciwoci current_total
spenia kryteria gry (cofnij si do wiadomoci e-mail, jeli nie pamitasz ju tych regu).
Oto istniejcy obiekt cznie z fragmentami nowego kodu, ktre powiniene uzupeni.
var hand = {
cards : new Array(),
current_total : 0,
sumCardTotal : function(){
this.current_total = 0;
@3 %L3 ?&W%
var c = this.cards[i];
%L9 A3&L@3&9
}
!%? 3&%&3Z+%L9 A3&
*?!#9'+,
)*-1g +#
*
+0
)*-?P
!
+#?
*PF8ZP\q8uS+0
.*?!#
"
+,
)*-1g +#
*
+0
)*-?P
!
+#?
*5
S+0
.
!
*#
"
9'?!# !#
?@+,
)*-1g +#
*
+0
)*-?P
!
+#?
*!@S+0
}
Z
S2+
}
}
};
my_scripts.js
zaostrz rozwizanie
Zaostrz owek
Rozwizanie
var hand = {
cards : new Array(),
current_total : 0,
sumCardTotal : function(){
this.current_total = 0;
@3 %L3 ?&W%
var c = this.cards[i];
%L9 A3&L@3&9
}
!%? 3&%&3Z+%L9 A3&
*?!#current_total9'+,
)*-1g +#
*
+0
)*-?P
!
+#?
*PF8ZP\q8uS+0
} else if*?!#
"
== 21+,
otal
Sprawd, czy current_t
21.
od
e
ksz
wi
t
jes
Sprawd, czy curre
nt_total
jest rwne 21.
l
Sprawd, czy current_tota
jest mniejsze lub rwne 21
i czy rozdano ju 5 kart.
Z
S2+
}
}
};
W przeciwnym raz
ie nic
nie rb!
my_scripts.js
278
Rozdzia 6.
jquery i javascript
W dalszym cigu nie moemy
jednak dosta si do tych funkcji,
bo nie mamy nic, co by je
wywoywao, prawda?
No tak, jeszcze nie uporalimy si ze wszystkim.
Masz ju wszystkie fragmenty kodu HTML potrzebne do
wstpnego rozdania kart, poproszenia o kolejn kart oraz
do nowego rozdania. Nie pospinae ich jeszcze tylko ze sob.
Nie zapominaj te, e musisz wywoywa metod sumujc
wartoci kart za kadym razem, kiedy rozdajesz now kart.
Magnesiki jQuery
Poukadaj magnesiki w taki sposb, aby powsta kod funkcji, ktra doda do naszej aplikacji kilku
suchaczy zdarze. Suchacze powinni znale si w elementach o identyfikatorach btnHit
i btnStick. Zdarzenie btnHit powinno rozda kolejn kart, a btnStick pozwoli na rozpoczcie
nowej gry. Poza tym wywoaj metod sumCardTotal po rozdaniu kadej karty. Poniej zamiecilimy
fragment kodu z kocwki funkcji hit, eby go uaktualni.
}while(!_______________);
function
good_card = false;
hand.___________________();
toggle
good_card
)*-13
+#
*"""""""""""""*+,
'Od nowa!'
*+0
)*?!+#
*+0
)*-1]+#"""""""""""""*+0
#btnHit
)*-1g +#
*+0
.+0
)*""""""""""""""+#
* *+,
sumCardTotal
?*+0
.+0
)*-1g +#
* *+,
)*-?P
!
+#?
*""""""""""""""+0
.+0
my_scripts.js
Powtarzaj ptl, a
znajdziemy dobr kart.
good_card
}while(!_______________);
good_card = false;
hand.___________________();
sumCardTotal
Rozdaj dwie rty.
pocztkowe ka
}
function
)*-13
+#
*"""""""""""""*+,
*+0
)*?!+#
*+0
)*-1]+#"""""""""""""*+0
toggle
)*-1g +#
*+0
Rozdaj jedn
kart.
Na koniec dobierania
karty pobierz sum
wartoci rozdanych
kart.
Ukryj przycisk
rozdawania, ale
poka przyciski
dobierania kart
i czekania.
.+0
#btnHit
)*""""""""""""""+#
*
*+,
Wywietl komunikat
Od nowa!.
?*+0
.+0
)*-1g +#
* *+,
'Od nowa!'
)*-?P
!
+#?
*""""""""""""""+0
.+0
my_scripts.js
Nie istniej
gupie pytania
P:
O: W cisym tego sowa znaczeniu nie, ale istnieje inna metoda, O: Jest on nazywany operatorem trjargumentowym i korzysta
280
Rozdzia 6.
3G8A 9AL?A3&AL?
jquery i javascript
Jazda prbna
Kod, ktry wanie utworzye, dodaj do pliku my_scripts.js tu po funkcji hit.
Docz take aktualizacj kocwki samej funkcji hit i dokadnie przetestuj
program w swojej ulubionej przegldarce.
A wic to wszystko?
Czy ju skoczylimy?
Franek: Nie tak prdko. Cigle musimy jeszcze doda funkcj resetowania,
o ktr nas prosili. Dziki temu gracze bd mogli zacz jeszcze raz bez
potrzeby odwieania strony.
Jzek: Musimy take zagwarantowa, e gracze nie bd dostawali kart
z poprzedniej rozgrywki. Powinnimy si upewni, e wszystko czycimy.
Kuba: Ale jak to zrobi? Mamy elementy HTML, ktre dodalimy
dynamicznie, oraz nowe elementy w tablicy. Musimy je wszystkie wyczyci?
Franek: Tak. W obu tych przypadkach bdziemy musieli skorzysta z nieco
odmiennych technik, ale owszem, musimy si tego wszystkiego pozby.
Jzek: Znam potrzebne sztuczki! W jQuery mamy metod empty, natomiast
co do tablic, to jest kilka sposobw, ale nie wszystkie z nich dziaaj w kadej
przegldarce. Sprawdmy, jakie opcje bd najlepsze.
Kuba
Franek
Jzek
w czystym stanie
Czyszczenie w jQuery...
Czy pamitasz, jak w rozdziale 2. uywalimy metody jQuery
remove do usuwania na zawsze okrelonego elementu oraz
jego elementw potomnych z drzewa DOM? Takie podejcie
sprawdza si, jeeli chcesz usun element nadrzdny. Jeli
jednak chcesz zachowa gwny element, a zaley Ci tylko na
usuniciu jego zawartoci, moesz skorzysta z metody jQuery
empty, ktra podobnie jak remove wymaga selektora, ale
pozostawia dany element na swoim miejscu.
$("#my_hand").empty();
1
Obecna struktura
strony
"?
div class=
"?
div class=
"?
Elementy, ktre
chcemy usun
used_cards.length = 0;
Prociej ju si chyba nie da, prawda?
282
Rozdzia 6.
jquery i javascript
Zaostrz owek
Zaktualizuj swj plik index.html elementem podobnym do wszystkich pozostaych elementw
w sekcji przyciskw. Nadaj aktywnemu elementowi div identyfikator btnRestart. W jego
wntrzu umie rysunek restart_small.jpg z folderu images.
Zaktualizuj te plik my_scripts.js suchaczem zdarzenia kliknicia dla elementu btnRestart.
Powinien on oprni element my_hand, tablic used_cards oraz tablic cards w obiekcie
hand. Poza tym powinien przeczy nowe elementy div o identyfikatorach result oraz
itself, a take wyczyci html elementw hdrResult. Na koniec powinien on przeczy
i wywoa zdarzenie kliknicia dla elementu btnDeal.
<div id="btnStick">
<img src="images/stick_small.jpg">
</div>
______________________________
______________________________
index.html
__________________
<div id="_______"><img src="" id="imgResult">_________
</div>
</div>
<script src="scripts/jquery-1.7.js"></script>
$("#hdrResult").html('Od nowa!');
});
$("#btnRestart").click( function(){
_________.toggle();
$(this). _________
my_scripts.js
$("#my_hand")._________
$("#hdrResult").html('');
used_cards. _________= 0;
_________.length = 0;
hand. _________= 0;
$("#btnDeal").toggle()
. _________('click');
});
zaostrz rozwizanie
Zaostrz owek
Rozwizanie
Teraz masz ju przycisk resetowania przywracajcy wszystkim elementom takie wartoci, jakie
miay przed pocztkiem rozgrywki. Pozwala on na rozpoczcie gry od nowa. Dodaj jeszcze do
waciwoci length troch czarw w JavaScripcie i gotowe!
<div id="btnStick">
<img src="images/stick_small.jpg">
</div>
<div id="btnRestart">
Przycisk reset do
rozpoczynania gry
od nowa.
<img src="images/restart_small.jpg">
index.html
</div>
</div>
<script src="scripts/jquery-1.7.js"></script>
$("#hdrResult").html('Od nowa!');
$("result").toggle();
});
$("#btnRestart").click( function(){
my_scripts.js
$(#result").toggle();
$(this).toggle();
szystkim
Przywr w takie
m
to
elemen
kie
wartoci, ja cztku.
miay na po
$("#my_hand").empty();
$("#hdrResult").html('');
used_cards.length = 0;
hand.cards.length = 0;
hand.current_total= 0;
$("#btnDeal").toggle()
.trigger('click');
});
284
Rozdzia 6.
Symulacja kliknicia
elementu btnDeal
jquery i javascript
Jazda prbna
Do pliku my_scripts.js dodaj zdarzenie kliknicia dla elementu btnRestart.
Nie zapomnij te o dodaniu dodatkowego kodu HTML w swoim pliku index.html.
Zrb to!
if(this.current_total> 21){
$("#btnStick").trigger("click");
)*-P
!
+#*M! MQM
!;9#M+0
!%? 9&%&V^#*M
!!MQM
!
M+0
u
ci od wynik
W zaleno waciwoci
przypisz doult inny
src imgRes
rysunek.
W zalenoci od wyniku
przypisz nagwek do
innej klasy.
szystkie
Przecz w y
ab
i,
przycisk
gr.
zakoczy
)*-1P
!+#
*+0
}
$("#btnStick").click( function(){
$("#hdrResult").html('Od nowa!')#*M
!!MQM=M+0
$("#result").toggle();
*+0
};
my_scripts.js
286
Rozdzia 6.
jquery i javascript
Jazda prbna
Zaktualizuj metod sumCardTotal funkcji hand w swoim pliku my_scripts.js.
Nie zapomnij te o pobraniu nowej wersji pliku my_styles.css i zastpieniu nim
swojego obecnego pliku.
Wspaniale! Doskonaa
strona! Teraz gocie naszego
barku Rusz Gow mog zabawi
si wietn gr w blackjacka,
kiedy u nas przebywaj.
Rozdzia 6.
Obiekt iptu
JavaScr
tu
o obiek
dzielneg
o
m
a
s
a
ie
Tworzen ie konstruktor
n
anie
i tworze
ywoyw
tw i w
k
ie
b
o
ie
Uywan ora
kt
u
r
t
s
n
o
k
Tablice
Tworzenie tablic
Przypisywanie wartoci w tablicy
Dodawanie kolejnych elementw do
tablicy
Aktualizacja istniejcych elementw
tablicy
Ptle
Ptla for
hile
Ptla do...w
giczne
Operatory lo
rwnania
Operatory po
288
Rozdzia 6.
jQuery
.empty
$.inArray
.attr
.trigger
metoda
uytkowa
7.1LHVWDQGDUGRZHIXQNFMHGODQLHVWDQGDUGRZ\FKHIHNWZ
Co ostatnio dla
mnie zrobie?
Z chci skorzystabym z funkcji
posprztajMieszkanie.
och. ach
Nadciga burza
Aplikacja Zrb sobie potwora, ktr napisae w rozdziale 5., okazaa si by wielkim
przebojem wrd dzieci i ich rodzicw. Wyglda jednak na to, e wkrad si w ni bd, ktry
psuje efekt byskawic. Kierownik ds. jakoci Gryzmokw skontaktowaa si z Tob w sprawie
tych problemw z prob o ulepszenie programu Zrb sobie potwora.
Kiedy uytkownik
uruchomi Zrb
sobie potwora...
WYSIL
SZARE KOMRKI
Postaraj si odtworzy zgoszony problem i pomyl, co si stao z funkcj od
byskawic. Dlaczego wszystkie byskawice zaczynaj si wywietla jedna po
drugiej, kiedy kto przejdzie z jednej karty na inn?
290
Rozdzia 7.
ch
yzmoka
Asia, ktra w Gr oci
prowadzi dzia jak
funkcje niestandardowe
function lightning_one(t){
$("#lightning1").fadeIn(250).fadeOut(250);
setTimeout("lightning_one()",t);
};
Tutaj m
JS, e fuwimy interprete
sam sie nkcja powinna rowi
w
na nowo bie, i tak te s ywoa
i wci
dzieje.
W JavaScripcie zwykle
definiujemy funkcj
i wywoujemy j w jakim
miejscu w kodzie. W tym
przypadku wywoalimy
funkcj z wntrza jej samej.
rpreterowi
Metoda setTimeout nakazuje intee
JS wywoanie funkcji, a nastpni jej
m
odczekanie chwili przed ponowny
uruchomieniem.
2EHMU]\MWR
Obiekt window
Zamy, e otworzye w swojej przegldarce trzy karty. Dla kadej z tych kart
przegldarka tworzy jeden obiekt window. Obiekt ten jest takim samym obiektem
jak te, z jakimi pracowae ju w rozdziale 6., a wic ma waciwoci, funkcje obsugi
zdarze oraz metody, ktre s superprzydatne. Moemy korzysta z funkcji obsugi
zdarze onblur i onfocus obiektu window, aby dowiedzie si, co robi uytkownik na
poziomie przegldarki.
%
obiekt window
Jeli klikniesz to
okno, przegldarka
da mu fokus.
obiekt window
292
Rozdzia 7.
obiekt window
2EHMU]\MWR
funkcje niestandardowe
window.name
window.history
window.document
window.onfocus
window.setTimeout()
window.clearTimeout()
window.setInterval()
window.clearInterval()
window.onblur
Rozwizanie
window.name
window.history
window.document
window.onfocus
window.setTimeout()
window.clearTimeout()
window.setInterval()
window.clearInterval()
window.onblur
WYSIL
SZARE KOMRKI
Funkcje obsugi zdarze onfocus i onblur obiektu window potrafi wykry zmian fokusu okna,
ale co mona zrobi w odpowiedzi na te zdarzenia?
294
Rozdzia 7.
funkcje niestandardowe
Odwoanie
do funkcji
Operator
przypisania
Definicja
funkcji
Odwoanie
do funkcji
Operator
przypisania
window.onblur = blurResponse;
window.onfocus = focusResponse;
function blurResponse(){
function focusResponse(){
Definicja
funkcji
To wanie w tym miejscu zaczyna mie znaczenie moliwo pisania wasnych funkcji niestandardowych.
Masz teraz do dyspozycji obiekt window, ktry przekazuje Ci mas informacji o tym, co uytkownik robi
w przegldarce, dziki czemu moesz uruchamia swoje funkcje w zalenoci od tego, co ten obiekt Ci
powie. Tak naprawd moesz wic zrobi prawie wszystko, co zechcesz, jeli tylko napiszesz w tym celu
wasn niestandardow funkcj...
Jazda prbna
Sprawdmy funkcje obsugi zdarze onfocus i onblur obiektu window. W plikach
z kodem, ktre pobrae do rozdziau 7., znajdziesz folder o nazwie window_tester. Otwrz
w swojej ulubionej przegldarce plik window_tester.html znajdujcy si w tym folderze.
Otwrz drug kart i pobaw si, przeczajc si midzy dwoma oknami przegldarki.
jazda prbna
Jazda prbna
Oto, co powiniene zobaczy, kiedy uruchomisz plik window_tester.html,
otworzysz drug kart i zaczniesz przecza si midzy kartami.
Otwrz plik
window_tester.html.
oc klikni
Gdy za pom si midzy
przeczasz rypt informuje
kartami, skopucie
Ci, kiedy y do niej
kart i kied
powrcie.
296
Rozdzia 7.
funkcje niestandardowe
KKR? FZ3F3S\L8JR3FL
};
goLightning;
window.onblur
(){
stopLightning;
(){
function
goLightning
window.onfocus
};
stopLightning
function
window.onblur
window.onfocus
function
stopLightning;
nkcje
Przypisz nowe fu .onblur
ow
do zdarze wind .
i window.onfocus
goLightning;
stopLightning
(){
Nowa funkcja
zatrzymujca
byskawice
};
function
goLightning
(){
Nowa funkcja
wznawiajca
byskawice
KKR? FZ3F3S\L8JR3FL
};
298
Rozdzia 7.
funkcje niestandardowe
setInterval
Uyj mnie,
kiedy chcesz
okreli, ile czasu
trzeba odczeka,
zanim zostanie
uruchomiona
funkcja.
99L
Funkcja, ktr
naley wywoa,
kiedy minie
okrelony czas
Mwi
funkcji, e ma
si cyklicznie
uruchamia
w okrelonych
odstpach czasu.
setInterval(repeatMe, 1000)
Opnienie
(w milisekund
ach)
delay
Funkcja,
ktr naley
powtarza,
kiedy mija
okrelony
odstp czasu
Odstp czasu
midzy kolejnymi
wywoaniami
funkcji
)
(w milisekundach
Dodaj przerw
midzy efektami,
ktre tworz
acuch.
slideDown().
*@:::+.slideUp();
t
Taki acuch jes
znany w jQuery
ki
pod nazw kolej
w.
kt
efe
W tym przykadzie
metoda delay
umieszcza
piciosekundow
przerw midzy
efektami slideDown
i SlideUp.
Zaostrz owek
Ktra z tych metod najlepiej si nada do naprawienia funkcji goLightning? Dla kadej
metody czasowej odpowiedz, czy bdzie ona pomocna, i wyjanij, dlaczego j wybrae
lub dlaczego nie.
Metoda
Czy powinnimy
zniej skorzysta?
Dlaczego?
setTimeout
setInterval
delay
zaostrz rozwizanie
Zaostrz owek
Rozwizanie
Ktra z tych metod najlepiej si nada do naprawienia funkcji goLightning? Dla kadej
metody czasowej odpowiedz, czy bdzie ona pomocna, i wyjanij, dlaczego j wybrae
lub dlaczego nie.
Metoda
Czy powinnimy
zniej skorzysta?
Dlaczego?
setTimeout
Nie
setInterval
Tak
delay
Nie
Dobre pytanie!
Moesz uy metody clearInterval do zatrzymania powtarzajcego
si harmonogramu wywoa funkcji utworzonego za pomoc
metody setInterval. W tym celu powiniene przekaza metodzie
clearInterval parametr pod postaci zmiennej. Przyjrzyjmy si
bliej temu, jak to dziaa.
, ktra
Przypisz zmienn d setInterval.
identyfikuje meto
clearInterval(myInterval);
Metoda clearInterval
kae setInterval
wymaza licznik i zat
rzyma czynno
powtarzania.
300
Rozdzia 7.
funkcje niestandardowe
Nie istniej
gupie pytania
P:
O:
window.onfocus = goLightning;
9F3R#
$("#container #lightning1").
fadeIn(250).delay(5000).fadeOut(250);
Rozwizanie
Pocz kad z metod z tym, co robi, kiedy zostanie wywoana.
Wykrywa, kiedy biece okno odzyskuje
fokus, i wywouje metod goLightning.
window.clearInterval(int1);
9F3R#
$("#container #lightning1").
fadeIn(250).delay(5000).fadeOut(250);
window.onfocus = goLightning;
window.onblur = stopLightning;
goLightning();
window.onblur = stopLightning;
window.onfocus = goLightning;
function stopLightning (){
KKR?Z3 Z9S\L8JR3FL
Uruchamia byskawice po
zaadowaniu strony.
stopLightning,
Wywouje funkcj traci fokus.
rka
kiedy przeglda
};
function goLightning (){
KKR?9 9L%33S\L8JR3FL
};
302
Rozdzia 7.
funkcje niestandardowe
wiczenie
W kadym z pustych wierszy pliku wpisz zmienn, funkcj albo metod, ktra pomoe naprawi
aplikacj Zrb sobie potwora. W przypadku wtpliwoci poszukaj wskazwek na dwch
poprzednich stronach. Kilka miejsc uzupenilimy za Ciebie.
goLightning();
window.onblur = stopLightning;
window.onfocus = goLightning;
var int1, int2, int3 ; function goLightning(){
int1
....=.
..............( function() {
. ..............
},
);
................=................( function() {
................
},
5000
);
................=................( function() {
lightning_three();
................
},
7000
);
}
function stopLightning()
{
int1
window. ................(....);
window. ................(....);
window. . ...(....);
}
lightning_one() {
function .............
$("#container #lightning1").fadeIn(250).fadeOut(250);
};
function . .............. {
$("#container #lightning2").fadeIn(250).fadeOut(250);
};
function . .............. {
$("#container #lightning3").fadeIn(250).fadeOut(250);
};
my_scripts.js
rozwizanie wiczenia
Masz ju zatem dwie niestandardowe funkcje obie z odwoaniami do funkcji byskawic, ktre
napisae w rozdziale 5. reagujce na zdarzenia onfocus i onblur obiektu window.
Rozwizanie
wiczenia
goLightning();
window.onblur = stopLightning;
Zadeklaruj trzy zmienne do
window.onfocus = goLightning;
pamitania naszych licznikw,
eby przegldarka moga je
var int1, int2, int3 ; funcznowu wyzerowa.
tion goLightning(){
int1 setInterval
....=.
..............( function() {
.lightning_one();
..............
},
Tutaj wywoujesz funkcj
Ustaw trzy rne liczniki dla trze
lightning_one
odstpw czasowych byskawic. ch
);
int2
setInterval
................=................(
function() {
lightning_two();
................
ujesz
},
po czym wywo two.
g_
nin
ht
lig
5000
funkcj
);
int3
setInterval
................=................(
function() {
lightning_three();
................
},
nkcj
7000
Teraz wywoaj fu
e.
re
th
g_
nin
);
ht
lig
}
function stopLightning()
Wyzeruj liczniki dla
{
clearInterval
trzech odstpw
int1
window. ................(....);
czasowych byskawic.
clearInterval
int2
window. ................(....);
int3
window. . clearInterval
...(....);
}
lightning_one() {
function .............
$("#container #lightning1").fadeIn(250).fadeOut(250);
};
function .lightning_two()
.............. {
$("#container #lightning2").fadeIn(250).fadeOut(250);
};
Definicje naszych
trzech funkcji
byskawic.
function .lightning_three()
.............. {
$("#container #lightning3").fadeIn(250).fadeOut(250);
};
my_scripts.js
304
Rozdzia 7.
funkcje niestandardowe
Zrb to!
Aby naprawi i ulepszy to, co utworzye w rozdziale 5., bdziesz musia zaktualizowa mas kodu,
zacznijmy wic od pustego pliku ze skryptem. Pliki z kodem, ktre pobrae do tej ksiki, zawieraj
folder dla rozdziau 7. W folderze tym znajdziesz podkatalog begin o nastpujcej strukturze:
&
index.html
scripts
styles
zedniej
Dodaj kod z popr
strony...
my_scripts.js
...do bloku kodu
$(document).ready w Twoim
pliku ze skryptem.
jquery-1.7.min.js
$(document).ready(function(){
});//koniec funkcji doc.onready
Jazda prbna
Po dodaniu do pliku ze skryptem kodu z poprzedniej strony otwrz stron w swojej
ulubionej przegldarce, aby sprawdzi, czy naprawa efektu byskawic powioda si.
Wr do pierwszej karty,
w ktrej dziaa aplikacja
Zrb sobie potwora. Kiedy
powrcisz, pierwszy z efektw
nie powinien dziaa.
Byskawice powinny rozpocz
si po kilku sekundach.
Lepiej sprawdzi
struktura danychaby si tu inna
obsuguje wiele taka, ktra
zmiennych.
$("#eyes").click(function(){
if (eyeclix < 9){
$("#eyes").animate({left:"-=367px"},500);
L&,
}
else{
$("#eyes").animate({left:"0px"},500);
eyeclix = 0;
}
});
$("#nose").click(function(){
if (noseclix < 9){
$("#nose").animate({left:"-=367px"},500);
L&,
}
else{
$("#nose").animate({left:"0px"},500);
noseclix = 0;
}
});// koniec zdarzenia click
$("#mouth").click(function(){
if (mouthclix < 9){
$("#mouth").animate({left:"-=367px"},500);
9%L&,
}
else{
$("#mouth").animate({left:"0px"},500);
mouthclix = 0;
}
});//koniec zdarzenia click
306
Rozdzia 7.
my_scripts.js
funkcje niestandardowe
moveMe(2, this);
_______________
});//koniec funkcji click
obj
$("#eyes").click( function(){
_______________
moveMe(0, this);
i, obj
moveMe(3, this);
$("#mouth").click( function(){
_______________
});// koniec funkcji click
function moveMe(________){
clix[i]
[0,0,0,0]
moveMe(1, this);
L&,L&,
}else{
clix[i] = 0;
$(______).animate({left:"0px"},500);
}
}
my_scripts.js
[0,0,0,0]
@3 L&,AAAAAAAAAAKKWJF3LZ93
$("#head").click( function(){
moveMe(0, this);
_______________
});//koniec funkcji click
$("#eyes").click( function(){
mov
eMe(1, this);
_______________
} );// koniec funkcji click
Umieszczenie cli
w tablicy pomagax
zoptymalizowa
kod.
$("#nose").click( function(){
mov
eMe(2, this);
_______________
});// koniec funkcji click
$("#mouth").click( function(){
(3, this);
moveMe
_______________
});// koniec funkcji click
function moveMe(________){
i, obj
Tworzc wszechst
funkcj moveMe ronniejsz
,
prawdopodobies zmniejszye
w kodzie oraz lictwo wystpienia bdu
musisz si zajm zb funkcji, ktrymi
owa.
if (__________
clix[i] < 9){
$(obj).animate({left:"-=367px"},500);
L&,L&,
}else{
Powtarzajca si logika,
ktra istniaa wczeniej,
obecnie znajduje si
w jednym miejscu,
dziki czemu atwiej
bdzie j naprawi,
jeli co si popsuje.
clix[i] = 0;
obj
$(______).animate({left:"0px"},500);
}
}
308
Rozdzia 7.
my_scripts.js
funkcje niestandardowe
Jazda prbna
Dodaj kod z wiczenia z magnesikami z poprzedniej strony do swojego pliku
my_scripts.js i zapisz go na dysku. Nastpnie otwrz plik index.html w swojej
ulubionej przegldarce i upewnij si, e po przepisaniu funkcji nie pojawiy si
adne nowe problemy, a wszystkie czci twarzy s aktywne.
Podobaj mi si buzie
potworw, ktre robi,
ale fajnie byoby
zobaczy, jak miesza je
dla mnie komputer.
310
Rozdzia 7.
funkcje niestandardowe
Zacznijmy losowa
Podczas lektury tej ksiki tworzye ju funkcje losowe, tak wic w chwili obecnej zapewne
jeste ju pod tym wzgldem profesjonalist. W tym przypadku potrzebujesz zbudowa funkcj,
ktra bdzie losowo animowa twarz potwora. Zmierzmy si z problemem, dzielc go na
mniejsze fragmenty. Zacznijmy od okrelenia biecej pozycji kadego paska z rysunkiem.
Musisz ledzi biec
kadego paska z rys pozycj
potworw. Powiedzmunkami
uytkownik znajduje y, e
si tutaj.
oona
Bieca pozycja to liczba klikni pomn
zy
przez odlego dzielc czci twar
bieca
(367 pikseli). W naszym przykadzie
pozycja wynosi 2367, co daje 734.
Wychodzc od pozycji biecej, musimy obliczy pozycj docelow, ktra tak naprawd jest
losow pozycj na ekranie. Pomocne bdzie podzielenie take tego problemu na dwie czci:
1
*%
+!
%
!%
"%
Kad cz twarzy potwora musimy przesun
na losow pozycj pomnoon przez szeroko
twarzy na kadym pasku. Dla liczby losowej 7
pozycja docelowa wyniesie 7367, czyli 2569.
jeste tutaj
311
im wicej wiesz...
function getRandom(){
@3 A 3?A93%& 3% 3?);
return my_random_num;
}
Moesz przekaza jako argument
funkcji getRandom liczb...
-
)
!
+
!
/!
Przekazywanie
wartoci do funkcji
...aby wygenerowa
i zwrci liczb
cakowit. Tutaj
uzyskamy liczb
od 0 do 10.
num = 10;
getRandom(num);
&
/!0
&
12
!!
0
return my_random_num;
312
Rozdzia 7.
funkcje niestandardowe
Kod
gotowy do
wysmaenia
<header id="top">
index.html
=x67(0!
y1x=z
':0
1x=z=QJ!G
)*-1P+#
*
+0
)*-1P
!
+#
*+0
P*+,
""?#
*?#*+H+0
""0
}
*+,
)*#
+#
?* *
;+,
"!
P*+0
"!
;m
;n0
;m
;n
"!0
"
"!H=0
)*?!+#
*,
2&I
"I;.Q@::+0
.+0
.0
my_scripts.js
jazda prbna
Jazda prbna
Po wprowadzeniu do swoich plikw kodu z poprzedniej strony otwrz stron index.html
w swojej ulubionej przegldarce. Kliknij przycisk Losuj 10 20 razy, aby przeprowadzi
peny test.
Po kilku klikniciach
funkcja losujca nad
robi to, czego od nieal
j
chcesz.
314
Rozdzia 7.
W rzeczy samej,
zby to najlepsze,
co mam, ale na mio
bosk mgbym chcie
skorzysta te z reszty
mojej twarzy!
funkcje niestandardowe
)*?!+#
*,
2&I
"I;.Q@::+0
Ratunku!
Wypadlimy poza
ram obrazu!
WYT
UMYS
skd dokd?
Odejmij current_position od
target_position, a otrzymasz
3. Musimy przesun pasek
o trzy pozycje w lewo.
, musisz
Jeli zmienna target_position jest wiksza od current_position
rysunkami
z
pasek
przesun
i
osition
target_p
od
position
odj current_
".
({left:"-=
animate
funkcji
z
w lewo, korzystajc
Odejmij target_position
od current_position,
a otrzymasz 1. Musisz
przesun pasek o jedn
pozycj w prawo.
316
Rozdzia 7.
funkcje niestandardowe
Zagadkowy basen
Twoje zadanie polega na zebraniu fragmentw kodu z basenu i umieszczeniu ich
w pustych wierszach programu. Nie moesz uy tego samego fragmentu
wicej ni jeden raz i nie musisz wykorzysta wszystkich fragmentw. Twoim
celem jest uzyskanie funkcji losujcej, ktra bdzie dziaa w zamierzony
sposb, czyli nie bdzie powodowa znikania fragmentw twarzy.
@3 F
var m = 10;
function getRandom(num){ @3 A 3?A93
%& 3% 3?9
return my_random_num;
}
function randomize(){
$(".face"). ..........................{
var target_position = getRandom(m);
var current_position = clix[index] ;
clix[index] = target_position;
if(..........................) {
@3 @AF
$(this).animate(..........................);
}else if(..........................){
@3 @AF
$(this).animate(..........................);
}else{ KK
3 3W# Z9F3S
}
});
};
Uwaga: dowolny fragment
z basenu moe zosta
uyty tylko raz!
&+@A#,4
&+@A#,4
target_position > current_position
3 WA#L9 A#
L9 A#3 WA#
target_position == current_position
&+@A#,4
3 WA#L9 A#
target_position < current_position
each(function(index)
@3 F
var m = 10;
function getRandom(num){
@3 A 3?A93%& 3% 3?9
return my_random_num;
Uruchom ten kod dla
kadego elementu
nalecego do klasy face.
}
function randomize(){
$(".face"). .each(function(index)
........................{
var target_position = getRandom(m);
}else{
KK3 3W# Z9F3S
...i przesu pase
k z rysunkami
w prawo. Znaczy to, e musisz
}
uy metody animate({left:"+="
});
};
&+@A#,4
3 WA#L9 A#
target_position == current_position
318
Rozdzia 7.
funkcje niestandardowe
Zgadza si.
Pamitasz przycisk resetowania w pliku index.html
sprzed kilku stron? Musisz go tylko powiza
z niestandardow funkcj reset.
Magnesiki z kodem
Poukadaj magnesiki z kodem we waciwej kolejnoci, aby uzyska kod dla przycisku
resetowania i dla niestandardowej funkcji resetujcej. Kilka z magnesikw uoylimy za Ciebie.
$("#btnReset").click( reset );
function reset(){
$(this)
$(".face")
});
.each(function(index){
.animate({left:"0px"},500);
clix[index] = 0;
Podepnij niestandardow
funkcj resetujc do
przycisku resetowania.
$("#btnReset").click( reset );
Zdefiniuj niestan
funkcj resetujcdardow
.
function reset(){
Wywoaj metod
each, eby funkcja
zresetowaa kad
sekcj twarzy do 0.
.each(function(index){
$(".face")
clix[index] = 0;
$(this)
.animate({left:"0px"},500);
});
Nie istniej
gupie pytania
O:
320
Rozdzia 7.
O:
funkcje niestandardowe
Zrb to!
@3 FKKZ RX#3R3ZLZXL3F3 Z
@3 KK9 3W9F3 Z3RI SX
$("#btnRandom").click( randomize );
$("#btnReset").click( reset );
function getRandom(num){
@3 A 3?A93%& 3% 3?9
return my_random_num;
}
function randomize(){
)*#
+#
?* *
;+,
"!
P*+0
"!
;m
;n0
;m
;n
"!0
*
"!
"!+,
"*
"!|
"!+H=0
)*?!+#
*,
2&I
"I;.Q@::+0
.
!
*
"!
"!+,
"*
"!|
"!+H=0
)*?!+#
*,
2II
"I;.Q@::+0
.
!
,
B
!
|
!=
}
.+0
}
!
*+,
)*#
+#
?* *
;+,
;m
;n:0
)*?!+#
*,
2:;.Q@::+0
.+0
}
my_scripts.js
dobra robota!
Jazda prbna
Po wpisaniu kodu z poprzedniej strony otwrz stron index.html w swojej ulubionej
przegldarce i przetestuj funkcje randomize i reset. Kliknij przycisk Losuj 10 20 razy,
aby upewni si, e przeprowadzie peny test. Kliknij te od czasu do czasu przycisk
Resetuj, eby sprawdzi, czy take on dziaa zgodnie z zaoeniami.
Wszystko dziaa!
322
Rozdzia 7.
Z kolei przycisk
resetowania przywrac
wszystko do miejsca, a
w ktrym zaczynalim
y.
funkcje niestandardowe
Krzywka jQuery
Nadszed czas, aby wygodnie usi i da swojej lewej pkuli
jakie zajcie. Bdzie to zwyka krzywka. Wszystkie wyrazy
stanowice hasa pochodz z biecego rozdziau.
Poziomo
Pionowo
rozwizanie krzywki
324
Rozdzia 7.
funkcje niestandardowe
Wanie wykrciam
winionietoperzow
czarownic, ktra
bdzie bohaterk
opowiadania, jakie
pisz.
Patrz, zrobiem
zmumifikowanego
rekinowilka-kosmit!
Rozdzia 7.
ow
d
n
i
w
t
Obiek
yej
si najw woje
y
c
j
u
najd
on s
obiekt z
tu. Ma
oraz
Jest to chii JavaScrip ugi zdarze
s
r
ia
b
a
n
o
r
e
z
ie
je
r
h
w
nkc
zda
oci, fu
krywa
waciw omagajce wy reagowa.
p
metody rki oraz na nie
a
okno
przegld
, kiedy
formuje tywne.
in
s
u
c
t ak
onFo
fokus.
arki jes
no traci
k
przegld
o
y
d
a, kie
wykryw
onBlur
Funkcje czasowe
Metody dostpne dla obiektu window:
setTimeout czeka przez okrelony czas,
zanim kae uruchomi funkcj.
setInterval wywouje cyklicznie funkcj
w okrelonych odstpach czasu.
clearInterval wymazuje schemat
cyklicznych wywoa funkcji.
Zoptymalizowane
funkcje niestandardowe
Pisanie wasnych funkcji niestand
ardowych umoliwi Ci
rzeczywist prac nad interaktywn
ymi stronami, ktre bd
chtnie uywane przez Twoich goc
i.
326
Rozdzia 7.
8.M4XHU\Lb$MD[
nikw
samych biegaczy albo biegaczek lub wszystkich zawod
1) Na stronie powinna by moliwo wywietlenia
jednoczenie.
gdy zawodnicy przekraczaj lini mety.
2) Strona powinna automatycznie aktualizowa si,
by zmuszeni do odwieania strony.
3) Po aktualizacji wynikw uytkownicy nie powinni
aktualizacji
bya ona ostatnio aktualizowana, poda czstotliwo
4) I na koniec, chcielibymy pokaza na stronie, kiedy
.
chcieli
tego
bd
jeli
izacji,
aktual
ienie
wznow
oraz umoliwi uytkownikom zatrzymanie i
go roku,
si diametralnie od tego, co istnieje ju na stronie z zesze
To, co chcielibymy mie na nowej stronie, nie rni
ka,
docze
si
y
moem
nie
i
zenie
wydar
wielkie
to
a. Ten bieg
tak wic moe ona by dla Was dobrym punktem wyjci
eby zobaczy, co takiego wymylicie!
-Diana C. Domek
szef marketingu
Megakorporacja w Webowicach
, e
a na to
Wygld programistwi
zesp towych ju s t
interne owa na wylo
t
przygo aje Chyba
na Hawzi si do
pora w
roboty!
W tym roku bieg odbywa si
na wyspie Maui zarezerwuj
sobie miejsce z wyprzedzeniem!
328
Rozdzia 8.
Te karty zostay
utworzone przez
wtyczk (poczekaj
sekund, a dowiesz
si o tym wicej).
Wyniki biegu
zostay na stae
umieszczone na
stronie po jego
zakoczeniu.
To jest wynik
dziaania funkcji
getTime.
Konfigurowanie wtyczki
Wtyczki to rozszerzenia podstawowej biblioteki jQuery, ktre
poprawiaj funkcjonalno albo uatwiaj wykonywanie
okrelonych funkcji lub zada. W powyszym przykadzie
wtyczka idTabs, w poczeniu z naszym CSS, przeksztaca
element ul w aktywne karty i mwi czom a w elementach listy
li, ktre elementy div pokaza, kiedy zostan kliknite. Ta
wtyczka udostpnia na naszej stronie bardzo proste w uyciu
struktury nawigacyjne, dziki czemu rne rodzaje informacji
moemy prezentowa jako wizualnie rozdzielone, nadal
korzystajc z tego samego obszaru wywietlania.
Sp
jnie
o
ok
Nie przejmuj si
zbytnio t wtyczk.
Wtyczki uzupeniaj
standardow bibliotek
jQuery o dodatkow
funkcjonalno. Przyjrzymy si im dokadniej
w rozdziale 10., a tymczasem zobaczmy,
co moe zrobi dla nas wtyczka, eby
przyspieszy prace nad naszym projektem
Kod
gotowy do
wysmaenia
body{
background-color: #000;
color: white;
#main ul a:hover {
Komentarz w CSS
color:#FFF;
background:#111;
K&R3 K
#main {
color:#111;
width:500px;
}
Od tego miejs
ca
reszta kodu CS
powicona je S
tworzeniu ka st
rt
na stronie.
#main ul a.selected {
margin-bottom:0;
color:#000;
margin:8px auto;
background:snow;
cursor:default;
{ list-style:none; float:left; }
39&3
#main div {
display:block;
padding:6px 10px;
#3??W#+#,
text-decoration:none!important;
3 W#+#,
clear:left;
color:#FFF;
background:snow;
83LRW 9?+
height: 300px ;
}
3?@3
color:#000; font-weight:bold;
}
my_style.css
330
Rozdzia 8.
<ul class="idTabs">
&G3% 389G8W9K3GK&G
&G3% % GHZLZ3F?LK3GK&G
</ul>
<div id="about">
Element div,
ktry bdzie
przechowywa
zawarto
karty.
%G8W9K%GW?89?83S9^
</div>
Cz zeszorocznych zawodnikw
wpisanych na stae na stron.
Aktualizacja tego musiaa by
koszmarem
<div id="finishers">
%GHZLZ3F?LK%G
<ul id="finishers_all">
</ul>
</div>
...
<script src="scripts/jquery-1.7.min.js"></script>
<script src="scripts/my_scripts.js"></script>
index.html
<script src="scripts/jquery.idTabs.min.js"></script>
$(document).ready(function(){
getTime();
function getTime(){
e.
funkcj getTim
niestandardow
Wywoaj nasz
ptu Date
Nowa instancja obiektu JavaScri
Dynamizujemy
Ludzie od marketingu chc, eby strona aktualizowaa si prawie w czasie
rzeczywistym, tak wic wyniki zakodowane na stae w HTML-u musz znikn.
Poza tym do aktualizowania czasu na stronie uyto samego JavaScriptu! To dla
nas doskonaa okazja, eby wynie nasz znajomo jQuery na kolejny poziom.
Witaj w wiecie aplikacji internetowych nastpnej generacji, gdzie jQuery,
JavaScript i troch Ajaksa oraz HTML-a mog sprawi, e Twoje programy
zaczn by dynamiczne (w odrnieniu od statycznych) i bd reagowa na
dziaania uytkownika.
Ajax, ktrego nazwa jest skrtem od Asynchroniczny JavaScript i XML, to
sposb przekazywania danych i ustrukturyzowanych informacji midzy serwerem
WWW a przegldark bez ingerencji ze strony uytkownika strony. Z Ajaksem
Twoje strony i aplikacje prosz serwer tylko o to, czego naprawd potrzebuj,
czyli o fragmenty, ktre powinny si zmieni, i o dane dla tych fragmentw,
ktre serwer musi przesa. Oznacza to mniejszy ruch w sieci, mniejsze
aktualizacje oraz krtszy czas siedzenia i czekania na odwieenie strony.
Najlepsze w tym wszystkim jest to, e strona ajaksowa jest budowana za pomoc
standardowych technologii internetowych, z ktrymi spotkae si ju w tej
ksice albo ktre ju znasz, takich jak:
HTML,
CSS,
JavaScript,
DO"
Aby skorzysta z Ajaksa, spjrzmy na format danych, ktry od pewnego czasu znajduje si
w uyciu (XML), oraz na metod obsugi da ajaksowych w jQuery ajax.
332
Rozdzia 8.
Strona wczytana
do przegldarki
Kod JavaScript
danie w A j a k s i e
wysane do serwera
Serwer
Strona wczytana
do przegldarki
Kod JavaScript
Serwer
Odpowied otrzymana
z serwera
Zaktualizuj
fragment strony
jeste tutaj 333
Zrozumie Ajax
Jak ju wspomnielimy wczeniej, Ajax to sposb przekazywania danych
w ustrukturyzowanym formacie midzy serwerem a przegldark bez porednictwa
uytkownika przegldarki. W rzeczywistoci jednak Ajax nie sprowadza si tylko
do jednej rzeczy, lecz stanowi poczenie rnych technologii uywanych w celu
tworzenia ekscytujcych, interaktywnych aplikacji sieciowych. JavaScript umoliwia
interakcj ze struktur drzewa DOM strony. Asynchroniczno oznacza, e proces
ten odbywa si w tle bez ingerowania w Twoj stron i bez udziau uytkownika.
X natomiast odnosi si do danych.
XML
$ - $ ;
JavaScript
JavaScript, jak ju doskonale wiesz, jest jzykiem
skryptowym uywanym do programowania
zawartoci stron internetowych, a przede
wszystkim do tworzenia funkcji ktre mona
docza do dokumentw HTML lub osadza
w nich oraz do interakcji z drzewem DOM.
334
Rozdzia 8.
X
XML to skrt od eXtensible Markup Language, co oznacza Rozszerzalny Jzyk Znacznikw. Jzyk ten
oferuje powszechnie przyjty, standardowy sposb prezentacji tekstu oraz innych informacji w formacie,
ktry moe by przetwarzany bez koniecznoci wikszego udziau czowieka. Informacja sformatowana
w XML-u moe by wymieniana midzy platformami, aplikacjami, a nawet midzy jzykami programowania
i jzykami pisanymi. Formatu tego mona te uywa z szerokim spektrum narzdzi programistycznych
oraz programw uytkowych. XML jest prosty do tworzenia, czytania i edytowania wszystko, czego
potrzebujesz, to prosty edytor tekstowy oraz deklaracja XML na pocztku pliku. Reszta zaley od Ciebie!
Elementy potomne
gwnego wza
(znaczniki otwierajce
i zamykajce). W tym
przypadku opisujemy
ksiki.
,&@ L?W9G
<books>
Wze (znacznik) gwny
<book>
&G9## ZZW3&3RRK&G
<author>Douglas Adams</author>
<year>1980</year>
Pozostae
</book>
znaczniki
uywane do
<book>
przechowywania
<title>Kolor magii</title>
danych
<author>Terry Pratchett</author>
<year>1983</year>
</book>
<book>
<title>Mort</title>
<author>Terry Pratchett</author>
<year>1987</year>
</book>
<book>
<title>Paradoks czasu</title>
<author>Eoin Colfer</author>
<year>2009</year>
</book>
Zamknij wze (znacznik)
</books>
gwny.
books.xml
gupie pytania
O:
O:
O:
336
Rozdzia 8.
O:
Przegldarki s asynchroniczne,
ale standardowa strona WWW ju nie.
Zwykle kiedy strona potrzebuje informacji
od programu po stronie serwera,
wszystko zupenie si zatrzymuje do czasu,
gdy serwer udzieli odpowiedzi, chyba e
strona przele danie asynchroniczne.
I tym wanie zajmuje si Ajax.
P:
O:
Masz racj.
Miejmy to ju za sob, a bdziemy
mogli wzi si za dodawanie
Ajaksa do naszej strony...
Magnesiki z kodem
Poukadaj magnesiki, aby dokoczy kod tworzcy dwie nowe karty, ktre bd wywietla rne
rodzaje informacji: pierwsz dla zawodnikw (z identyfikatorem male) i drug dla zawodniczek
(z identyfikatorem female). Moesz usun kart O biegu, ale pozostaw kart Wszyscy
zawodnicy. W kadej sekcji wstaw pusty element ul, ktry bdzie zawiera dane biegaczy.
Oprcz tego usu ca obecn zawarto z elementu ul finishers_all.
<body>
"scripts/my_scripts.js"
<header>
<h2>________________________</h2>
</header>
<div id="main">
index.html
#male
<ul class="idTabs">
&G3% AAAAAAAAAAAAAG3F?LK3GK&G
"finishers_all"
&G3% 3&GAAAAAAAAAAAAAAAAAAAAK3GK&G
&G3% 3&&GHZLZ3F?LK3GK&G
</ul>
<div id="male">
%G3F?LK%G
"updatedTime"
<ul id="______________________"></ul>
</div>
<div __________________________>
%G3F?LZRK%G
Zawodniczki
<ul id="finishers_f"></ul>
</div>
finishers_m
<div _________________________>
%GHZLZ3F?LK%G
<ul id=______________________></ul>
id="female"
</div>
</div>
<footer>
id="all"
%G 39&3LS?&3FZRL%3ZL%9LZRIF^K%G
<br>Ostatnia aktualizacja: <div
id=______________________></div>
</footer>
<script src="scripts/jquery-1.7.min.js"></script>
<script src=______________________________></script>
<script src="scripts/jquery.idTabs.min.js"></script>
</body>
<body>
<header>
<div id="main">
<ul class="idTabs">
#male
&G3% AAAAAAAAAAAAAG3F?LK3GK&G
&G3% 3&GAAAAAAAAAAAAAAAAAAAAK3GK&G
Zawodniczki
&G3% 3&&GHZLZ3F?LK3GK&G
</ul>
<div id="male">
%G3F?LK%G
<ul id="______________________"></ul>
finishers_m
</div>
<div __________________________>
id="female"
%G3F?LZRK%G
<ul id="finishers_f"></ul>
Nasza lista
zawodnikw
</div>
<div _________________________>
id="all"
%GHZLZ3F?LK%G
"finishers_all"
<ul id=______________________></ul>
</div>
</div>
<footer>
%G 39&3LS?&3FZRL%3ZL%9LZRIF^K%G
<br>Ostatnia aktualizacja: <div id=______________________></
"updatedTime"
div>
</footer>
<script src="scripts/jquery-1.7.min.js"></script>
<script src=______________________________></script>
"scripts/my_scripts.js"
<script src="scripts/jquery.idTabs.min.js"></script>
</body>
338
Rozdzia 8.
W celu utworzenia
naszych kart docz
wtyczk jQuery.
Jazda prbna
Zaktualizuj swj plik index.html kodem, ktry ukoczye w wiczeniu
z magnesikami, i otwrz go w swojej ulubionej przegldarce.
Skrt jQuery
$.ajax({
Uruchom t funkcj, jeli
wykonanie metody ajax zakoczy
y
si sukcesem. Niedugo dooym
.
kodu
h
tu troc
url: "my_page.html"
Adres URL elementu,
ktry chcesz POBRA
za pomoc Ajaksa
success: function(data){
}
});
Dane zwrcone po
wywoaniu metody ajax
$(document).ready(function(){
)#;*,
2 !?
!#;
Q
?
2
!
Q
B
2;
Q
!
!!2 *;
+,
}
.+0
getTime();
function getTime(){
var a_p = "";
var d = new Date();
my_scripts.js
340
Rozdzia 8.
Jazda prbna
Zaktualizuj swj plik my_scripts.js o kod z poprzedniej strony, po czym spod adresu
ftp://ftp.helion.pl/przyklady/jquerg.zip pobierz przykadowy plik XML z tego rozdziau i zapisz
go w tym samym katalogu, w ktrym znajduje si plik index.html. Nastpnie otwrz plik index.
html w swojej przegldarce i otwrz kart Network (w narzdziach dla programistw w Google
Chrome) albo Net (Firebug w przegldarce Firefox). Twj plik XML powinien by tam
wymieniony razem z pozostaymi plikami z Twojej strony.
Suszna uwaga.
1*
Google Chrome i tak moe zablokowa pobieranie przez nasz stron pliku XML z wynikami biegu. Aby
plik XML zosta wczytany, naley uruchomi Google Chrome z parametrem --allow-file-accessfrom-files. Po wczytaniu do Chrome strony index.html naley otworzy narzdzia dla programistw,
a nastpnie j odwiey przyp. tum.
$("li").find("ul")
li
li
li
li
li
li
li
li
li
li
li
li
Tutaj moe by
dowolny selektor.
li
li
$("li").find("ul").css('background-color', 'blue');
Tutaj moe znajdowa si
dowolny selektor albo grupa
lub zbir elementw jQuery.
czc metod
find z metod each,
moemy szuka grup
elementw i dziaa
z nimi indywidualnie
przy uyciu ptli.
342
Rozdzia 8.
WYSIL
SZARE KOMRKI
Czy wiesz, z ktrymi fragmentami naszego dokumentu XML
bdziemy musieli pracowa, eby wywietli na ekranie dane
poszczeglnych biegaczy?
Magnesiki z kodem
Poukadaj magnesiki z kodem, aby utworzy funkcj o nazwie getXMLRacers, ktra wywoa metod
ajax oraz zaaduje plik finishers.xml. Kiedy plik XML zostanie zaadowany, oprnij list, ktra bdzie
przechowywa informacje, po czym odszukaj w nim kadego biegacza i okrel, czy zawodnik jest
mczyzn, czy kobiet. Docz zawodnikw do list odpowiednich dla ich pci oraz do listy finishers_all.
Nastpnie wywoaj funkcj getTime, aby zaktualizowa wywietlany na stronie czas.
function _____________
getXMLRacers(){
"finishers.xml"
$.ajax({
url: _________________,
getTime();
success:
cache: false,
dataType: "xml",
_________ function(xml){
$('#finishers_all')
(info)
$(_______________).empty();
$('#finishers_f')__________;
'#finishers_m'
$('#finishers_all').empty();
$(xml).find________________(function() {
@3 &G3ZFR+!%?AAAAAAAAAAAAAAAA!%
?&3,Z3+AAAAAAAAAAAAAAAAAAAA,K&G
if( $(this).find("gender").text() == "m" ){
$('#finishers_m').append_______
("runner").each
}else{ }
__________________.append(info);
.empty()
});
___________
}
("fname").text()
$(this).find("time")
});
}
my_scripts.js
getXMLRacers(){
function _____________
$.ajax({
"finishers.xml"
url: _________________,
cache: false,
dataType: "xml",
success: function(xml){
_________
'#finishers_m'
$(_______________).empty();
kie
Wyczy wszyst
elementy ul, eby
mogy otrzyma .
uaktualnione dane
.empty()
$('#finishers_f')__________;
$('#finishers_all').empty();
("runner").each
$(xml).find________________(function()
{
("fname").text()
@3 &G3ZFR+!%?AAAAAAAAAAAAAAAA!%
$(this).find("time")
?&3,Z3+AAAAAAAAAAAAAAAAAAAA,K&G
Sprawd pe kadego
biegacza, aby mona
go byo umieci na
waciwej licie.
$('#finishers_f')
__________________.append(info);
}else{ }
_all')
$('#finishers
__________________.append(info);
});
___________
getTime();
}
});
czy
kich biega
Dodaj te wszyst all.
s_
er
ish
do listy fin
344
Rozdzia 8.
my_scripts.js
Jazda prbna
Zaktualizuj swj plik my_scripts.js o funkcj getXMLRacers. Ponadto zastp wywoanie funkcji
getTime (w sekcji document.ready) wywoaniem funkcji getXMLRacers; funkcja getTime jest
ju wywoywana wewntrz tej nowej funkcji. Upewnij si, e uruchamiasz swj kod na serwerze
WWW adres URL powinien wic rozpoczyna si od http://, a nie wskazywa ciek do
lokalnego pliku. Oprcz tego Twj plik XML powinien znajdowa si na tym samym serwerze co
plik HTML w przeciwnym razie czekaj Ci uciliwe problemy z tosamoci pochodzenia.
! A
Uyj mnie,
kiedy chcesz
okreli przedzia
czasu, jaki naley
odczeka przed
wywoaniem
funkcji.
99L
Funkcja, ktr
naley wywoa,
kiedy minie
wskazany okres
czasu
Ka funkcji
wywoywa si
wielokrotnie
z odstpami czasu
midzy kolejnymi
powtrzeniami.
setInterval(repeatMe, 1000);
Opnienie
(w milisekund
ach)
Funkcja, ktr
naley powtrzy za kadym
razem, kiedy
minie wskazany
interwa czasu
Przerwa midzy
kolejnymi wywoaniami funkcji
(w milisekundach)
Dodaj przerw
midzy efektami,
ktre znajduj
si w acuchu
efektw.
slideDown().
*@:::+.slideUp();
t
Taki acuch jes
znany w jQuery
jako kolejka
efektw.
W przykadzie
tym metoda
delay umieszcza
piciosekundow
przerw midzy
efektami slideUp
i slideDown.
2EHMU]\MWR
346
Rozdzia 8.
Funkcje samowywoujce si
Funkcja samowywoujca si wywouje si sama podczas jej zwykego dziaania. Funkcje takie mog by szczeglnie
przydatne, kiedy musimy poczeka, a obecnie wykonywana funkcja zakoczy swoje dziaanie, zanim bdzie j mona
uruchomi ponownie. Pocz samowywoywanie si z metod setTimeout, a bdziesz mg utworzy harmonogram
dla funkcji, ktra uruchomi si wycznie wtedy, kiedy poprzednie jej wywoanie si powiedzie. W przeciwnym razie
nie dojdzie ona w kodzie do miejsca jej wasnego wywoania, w zwizku z czym nie zostanie powtrnie uruchomiona.
Zaostrz owek
Utwrz funkcj o nazwie startAJAXcalls, ktra bdzie wywoywana wtedy, gdy strona zostanie ju
zaadowana, i ktra bdzie wywoywa funkcj getXMLRacers co 10 sekund. Zdefiniuj zmienn o nazwie
FREQ na pocztku pliku ze skryptem wewntrz funkcji $(document).ready i ustaw j na liczb milisekund,
ktre bd nam potrzebne jako parametr okrelajcy czstotliwo wywoa funkcji getXMLRacers.
Skorzystaj z metody setTimeout w celu wywoania funkcji startAJAXcalls, co przeksztaci j w funkcj
samowywoujc si po zakoczeniu dziaania funkcji getXMLRacers. Poza tym bdziesz musia wywoa
funkcj startAJAXcalls bezporednio ze swojego kodu, aby uruchomi jej licznik.
$(document).ready(function(){
function startAJAXcalls(){
}
getXMLRacers();
function getXMLRacers(){
$.ajax({
url: "finishers.xml",
cache: false,
my_scripts.js
zaostrz rozwizanie
Zaostrz owek
Rozwizanie
Nadaj zmiennej
FREQ warto 10000,
poniewa metoda
setTimeout wymaga
parametru podanego
w milisekundach.
Wywouj cyklicznie
funkcj getXMLRacers
wewntrz metody
setTimeout.
function startAJAXcalls(){
setTimeout( function() {
getXMLRacers();
Poniewa czekamy, a
zakoczy si ostatnie
wywoanie naszej fun
kcji,
korzystamy z metody
setTimeout.
startAJAXcalls();
},
FREQ
);
}
Wywoaj metod y
ab
getXMLRacers, e kiedy
,
wa
to
an
ar
zagw
pobrana,
strona zostanie j
nie
na
ju
bdzie
zawarto.
getXMLRacers();
startAJAXcalls();
function getXMLRacers(){
Wywoaj nasz
nowo utworzon
funkcj w celu
jej uruchomienia.
$.ajax({
url: "finishers.xml",
cache: false,
my_scripts.js
Nie istniej
gupie pytania
348
Rozdzia 8.
Jazda prbna
Zaktualizuj swj plik my_scripts.js o nowy kod, ktry wanie utworzye. Nie zapomnij te o dodaniu
wywoania nowej funkcji pod koniec skryptu, tu po wywoaniu funkcji getXMLRacers. Nastpnie poogldaj
swoj stron w przegldarce i uyj funkcji Network w Google Chrome albo Net w narzdziu Firebug
Firefoksa, aby zobaczy, jak co 10 sekund pobierany jest plik. Kiedy ju stwierdzisz, e tak si dzieje,
zaktualizuj w swoim ulubionym edytorze tekstowym plik XML podanymi poniej informacjami i zobacz,
jak nowy biegacz pojawia si na stronie (tylko nie zapomnij o zapisaniu pliku XML po aktualizacji!).
<runner>
<fname>Justyn</fname>
<lname>Joniec</lname>
<gender>m</gender>
G-+KG
</runner>
Serwer
.php
PHP
.php
Przegldarka
.php
350
Rozdzia 8.
Ktra godzina?
OK, przyznajemy, e istnieje funkcja JavaScriptu, ktrej moglibymy uy w celu
wywietlenia czasu. Jest to jednak zbyt dua i skomplikowana funkcja jak na zrobienie
czego tak prostego. Na szczcie PHP udostpnia nam bardzo atwe sposoby na uzyskanie
czasu za pomoc funkcji date. Tak jak funkcje, ktre tworzye do tej pory, pobiera ona
wiele parametrw i zwraca rne wersje daty w zalenoci od przekazanych argumentw.
Gwny parametr okrela sposb wywietlania daty. Przyjrzyjmy si tej funkcji bliej.
Wszystko, co znajduje si midzy
nawiasami kwadratowymi [ oraz ],
jest parametrem opcjonalnym.
PHP date.
Wywoaj funkcj
Zrb to!
W tym samym folderze, w ktrym znajduje si plik index.html, utwrz nowy plik i nazwij
go time.php. Dodaj do niego nastpujcy kod:
Otwierajcy znacznik PHP.
Mwi on serwerowi, gdzie
jest kod PHP, ktry naley
przetworzy.
je
Instrukcja echo nakazu
PHP wywietlenie na re
ekranie informacji, kt
po niej nastpuj.
#%#
date_default_timezone_set('Europe/Warsaw');
echo date("F j, Y, g:i:s a");
Zamykajcy znacznik
PHP
Wywoaj fu
z podanymi nkcj date
aby uzyska parametrami,
daty jak w taki sam format
w JavaScripTwojej funkcji
cie.
time.php
jazda prbna
Jazda prbna
Po zapisaniu na dysku pliku time.php otwrz go w swojej przegldarce, aby upewni si, e
data ma waciwy format. Kod PHP musi wykonywa si na serwerze WWW, a zatem adres
URL powinien zaczyna si od http://, a nie wskazywa ciek do pliku. Upewnij si te, e
URL wskazuje na serwer, na ktrym znajduje si Twj kod.
Za pomoc naszego ma
w PHP wywietlilimy ego kodu
ekranie. O wiele atwieczas na
j ni
w JavaScripcie!
3
)
"
3
)
%
)
!
3
)
+
+ )
!
!
"%
"
+)
352
Rozdzia 8.
Zaostrz owek
W stopce swojego pliku index.html dodaj znacznik <span> o identyfikatorze freq. Bdzie
on uywany w celu wskazania wyniku dziaania nowej funkcji o nazwie showFrequency,
ktra powinna wywietla, jak czsto aktualizowana jest strona. Utwrz te kolejn
funkcj o nazwie getTimeAjax, ktra zaaduje plik time.php za pomoc metody load
bdcej metod zoon Ajaksa. Jako parametr pobiera ona adres URL i automatycznie
wpisuje wynik do sekcji o identyfikatorze updatedTime. Na koniec zastp wywoanie
funkcji getTime w getXMLRacers now funkcj getTimeAjax.
<footer>
%G 39&3LS?&3FZRL%3ZL%9LZRIF^K%G
<br><br>
Ostatnia aktualizacja: <div id="updatedTime"></div>
</footer>
<script src="scripts/jquery-1.7.min.js"></script>
<script src="scripts/my_scripts.js"></script>
index.html
function
3?XF3LKR9?
}
.
.
.
.
function
$(
).load(
);
my_scripts.js
zaostrz rozwizanie
Zaostrz owek
Rozwizanie
<footer>
%G 39&3LS?&3FZRL%3ZL%9LZRIF^K%G
<span id="freq"></span>
<br><br>
index.html
function showFrequency(){
$("#freq").html(
3?XF3LKR9?
}
Utwrz dwie nowe fun
pokazujc czstotliw kcje: jedn
o i drug
pobierajc za pored
nic
Ajaksa czas z serwera. twem
.
.
.
.
function getTimeAjax(){
$('#updatedTime' ).load(
"time.php"
}
Wypisz wynik na ekranie
w elemencie updatedTime.
);
e.php
Zaaduj plik timsa.
ak
Aj
za pomoc
my_scripts.js
354
Rozdzia 8.
Jazda prbna
Zaktualizuj swj plik my_scripts.js kodem, ktry wanie utworzye. Nie zapomnij te
o dodaniu do pliku index.html nowego elementu span i zastpieniu funkcji getTime
funkcj getTimeAjax.
3
)
"
3
)
%
)
!
3
)
+
+ )
!
!
"%
"
+)
Ale jak powstrzymamy funkcj,
ktra wywouje sam siebie?
To bdzie trudne.
Musimy tak zmieni funkcj, eby
dziaaa tylko wtedy, gdy s spenione
okrelone warunki.
WYSIL
SZARE KOMRKI
Ktre z funkcjonalnoci poznanych przez nas
do tej pory sprawdzaj, czy zostay spenione
warunki?
WYSIL
SZARE KOMRKI
Czy wiesz, z ktrej struktury logiki warunkowej moemy skorzysta
w tym przypadku? Wskazwka: uywalimy jej w celu sprawdzania
pci biegaczy w pliku XML.
Nie istniej
gupie pytania
P:
P:
O:
356
Rozdzia 8.
O:
O:
Zaostrz owek
Utwrz zmienn globaln o nazwie repeat o domylnej wartoci true. Napisz funkcj, ktra bdzie
zmienia jej warto po klikniciu nowego przycisku o identyfikatorze btnStop. Skonfiguruj kod HTML
elementu span o identyfikatorze freq, tak aby wywietla on komunikat Aktualizacje zatrzymane. Utwrz
te przycisk o nazwie btnStart, ktry nada globalnej zmiennej repeat warto true oraz wywoa funkcje
startAJAXcalls oraz setTimeout, jeli zmienna repeat bdzie miaa warto true. Nowe przyciski
dodaj do stopki strony.
$(document).ready(function(){
var FREQ = 10000;
function startAJAXcalls(){
setTimeout( function() {
getXMLRacers();
startAJAXcalls();
},
FREQ
);
.
.
$("#btnStop").click(function(){
$("#freq").html(
);
});
function(){
startAJAXcalls();
});
my_scripts.js
<footer>
%G 39&3LS?&3FZRL%3ZL%9LZRIF^K%G
<br>
<span id="freq"></span> <br><br>
index.html
zaostrz rozwizanie
Zaostrz owek
Rozwizanie
Utwrz zmienn globaln o nazwie repeat o domylnej wartoci true. Napisz funkcj, ktra bdzie zmienia
jej warto po klikniciu nowego przycisku o identyfikatorze btnStop. Skonfiguruj kod HTML elementu
span o identyfikatorze freq, tak aby wywietla on komunikat Aktualizacje zatrzymane. Utwrz te
przycisk o nazwie btnStart, ktry nada globalnej zmiennej repeat warto true oraz wywoa funkcje
startAJAXcalls oraz setTimeout, jeli zmienna repeat bdzie miaa warto true. Nowe przyciski dodaj
do stopki strony.
warto
miennej
Nadaj z true, dziki i
domyln trona bdzie s waniu.
czemu sowa po zaado
aktualiz
$(document).ready(function(){
var repeat = true;
if(repeat) {
setTimeout( function() {
getXMLRacers();
startAJAXcalls();
},
FREQ
)
);
.
Nadaj zmiennej warto
false, kiedy zostanie
kliknity przycisk
btnStop.
.
$("#btnStop").click(function(){
repeat = false;
});
$(#btnStart).click( function(){
repeat = true;
startAJAXcalls();
showFrequency();
});
my_scripts.js
<footer>
%G 39&3LS?&3FZRL%3ZL%9LZRIF^K%G
<button id="btnStart">Wznw aktualizacje strony</button>
<button id="btnStop">Zatrzymaj aktualizacje strony</button>
<br>
<span id="freq"></span> <br><br>
358
Rozdzia 8.
index.html
Jazda prbna
Zaktualizuj swj plik my_scripts.js oraz index.html nowym kodem, ktry wanie utworzye. Nastpnie
wczytaj stron do swojej ulubionej przegldarki, aby upewni si, e wszystko dziaa. Wyprbuj nowe
przyciski, eby si przekona, czy zatrzymuj dania Ajaksa. Bdziesz mg to sprawdzi na karcie
Network w Google Chrome albo Net w narzdziu Firebug Firefoksa.
To bdzie nasz
najlepszy firmowy
wyjazd WSZECH CZASW!
To dziaa!
Masz teraz stron, ktr
mona aktualizowa w czasie
rzeczywistym (uzupeniajc
plik XML), i umoliwie
uytkownikom wczanie
i wyczanie aktualizacji.
Rozdzia 8.
Ajax
ia
umoliw
, ktre
ii
g
lo
o
n
strony
nie tech
ania
Pocze cj fragmentw noci odwie
z
a
c
z
li
ie
aktua
z kon
owej be
internet
y
j.
ra, ktr
jej cae
o serwe h
d
ia
n
a
d
przed ic
sya
Ajax wy etwarza dane
z
r
moe p m.
ie
sowe s
odesan
ci ajak tody ajax.
o
ln
a
n
jo
e
ry funkc
moc m
W jQue towane za po
n
e
implem
Skrty ajax()
skrtw ajaksowych.
W jQuery istnieje pi
ale
parametry domylne,
Kady z nich ma inne
ajax:
tod
me
uj
wo
wy
e
ostatecznie wszystki
$.get
$.getJSON
$.getScript
$.post
$.load
360
Rozdzia 8.
XML
cile zdefiniowa
ny
jzyk znacznikw , chocia elastyczny
uywany do opis
ywania
danych oraz ich
struktur.
Moe by wykorz
ystywany do
przechowywania
informacji albo ich
formatowania pr
zed wysaniem.
Jest uywany w
wielu popularnych
technologiach si
eciowych takich
jak RSS,
usugi SOAP/W
eb albo SVG.
PHP
9.2EVXJDGDQ\FK-621
Chocia czytanie danych z pliku XML jest bardzo przydatne, to jednak nie
zawsze wystarcza. Bardziej interaktywny format wymiany danych (JavaScript Object
Notation, znany te jako JSON) uatwia pobieranie danych z serwera. JSON jest te atwiejszy
do wygenerowania i czytania ni format XML. Uywajc jQuery, PHP oraz SQL-a, nauczysz
si, jak utworzy baz danych przechowujc informacje, ktre bdziesz mg pniej
odczyta za pomoc formatu JSON i wywietli na ekranie przy uyciu jQuery. Tak objawia si
prawdziwa moc aplikacji internetowych!
Od: '
($&
)$
"
$/&&
$&
(
Temat:
(%(,-.
Odliczanie rozpoczte:
3 dni do startu!
362
Rozdzia 9.
Gdzie si podziali
wszyscy biegacze?
Nieprawidowy
znacznik
otwierajcy
WYSIL
SZARE KOMRKI
Kolejny prob
le
z wielkoci m
w znaczniku liter
<runner>
Znacznik
dla tego zamykajcy
elementu
t> kae
Znacznik <selec worzy
przegldarce ut.
list rozwijan
<select name="truthiness">
<option value="1">True</option>
<option value="0">False</option>
</select>
Warto wybranej opc
ji zostanie
wysana do serwera.
wywietla
Element option cie
li
na
list opcji
rozwijanej.
364
Rozdzia 9.
Kod
gotowy do
wysmaenia
my_style.css
#main {
background:#181818;
<ul class="idTabs">
color:#111;
&G3% 3&G3F?LK3GK&G
padding:15px 20px;
&G3% 3&G3F?LZRK3GK&G
width:600px;
&G3% 3&&GHZLZ3F?LK3GK&G
x?
-
=3=
=
margin:8px auto;
</ul>
<div id="male">
%G3F?LK%G9&?% AGK9&G
</div>
Dodaj now kart o nazwie
Dodaj nowego zawodnika.
<div id="female">
%G3F?LZRK%G9&?% AGK9&G
</div>
<div id="all">
%GHZLZ3F?LK%G9&?% A3&&GK9&G
</div>
=
?U3=
=?U
method
okrela, jak
dane zostan
przesane do
serwera.
y2!
Z
Z
&&!G=1y&&
W1
G
</select><br>
`! !2
;
;
!;
!!
':;
?9*+
;
;g
!;g
!!
':;
?9*g
+
<br><br>
1
!1
1g
1g
3=1
?
P
</div>
index.html
jazda prbna
Jazda prbna
Otwrz plik index.html w swojej przegldarce i przejd na kart
Dodaj nowego zawodnika, aby zobaczy nowy formularz i pola
dodane do Twojej strony.
Tak wyglda
w przegldarce nowy
formularz HTML.
WYSIL
SZARE KOMRKI
Teraz, gdy masz ju na waciwym miejscu formularz do wprowadzania
danych, jak Twoim zdaniem moglibymy je zapisywa i odczytywa?
366
Rozdzia 9.
Co zrobi z danymi
Teraz musimy w jaki sposb przesa zebrane na formularzu dane do serwera i jako je zapisa. W tym celu
skorzystamy z jeszcze jednego jzyka, jakim jest PHP, aby wstawi dane do bazy danych. Bez obaw! Niedugo
wprowadzimy Ci w PHP i bazy danych, ale najpierw skupmy si na tym, jak przekaza do serwera dane z naszego
formularza.
Istniej dwie metody do przesyania danych do serwera za pomoc HTTP: GET i POST. Gwna rnica midzy nimi
polega na sposobie przekazywania danych. GET docza nazwy pl formularza oraz ich wartoci na kocu adresu
URL w postaci par klucz/warto. PHP moe odczyta tak informacj z tablicy asocjacyjnej o nazwie $_GET[],
ktra jest wysyana do serwera w momencie przekazywania formularza. Dane te s widoczne po znaku zapytania
w adresie URL.
POST wysya dane take w tablicy asocjacyjnej, ale zakodowane inaczej ktrych kocowy uytkownik nie widzi
w adresie URL. Tablica asocjacyjna $_POST[] zawiera wszystkie informacje pochodzce z elementw formularza.
S one, podobnie jak w przypadku tablicy $_GET[], seri par klucz/warto nazw elementw oraz ich wartoci.
Metoda HTTP GET
</form>
</form>
%,
%,
,#%#38-
x.php
#%#
#%#
L%!A3KKH#9S
L%!AV3KKH#9S
L%!A8KKH#9S-
L%!AVLKKH#9S
!
<form id="my_form">
<input type="text" name="a" value="1" />
<input type="text" name="b" value="2" />
<input type="hidden" name="c" value="3" />
!
\
<form id="my_form">
<input type="text" name="a" value="1" />
<input type="hidden" name="c" value="3" />
</form>
</form>
$("#my_form").serialize();
lektora
Identyfikator se
Metoda serialize
formularza
$("#my_form:input").serializeArray();
Identyfikator selektora formularza
z filtrem elementu wejciowego
HTML. Taki zapis kae selektorowi
uwzgldnia tylko elementy HTML
typu input.
/
/
[
{
a=1&b=2&c=3
name: "a",
value: "1"
},
{
name: "c",
value: "3"
}
]
368
Rozdzia 9.
Wywoanie
metody
serializeArray
!#9 &A?AFJ33?39RLS3S
Skrt
jQuery
});
Magnesiki z kodem
Wywoaj
t funkcj
wywoania
zwrotnego.
Utwrz suchacza zdarzenia kliknicia dla przycisku #btnSave, ktry pobiera z formularza wszystkie dane i je
serializuje, po czym wysya te informacje do serwera za pomoc metody jQuery post. Adres URL do wysyki pobierz
z atrybutu action formularza. Poza tym utwrz funkcj clearInputs, ktra wykasuje wartoci wszystkich pl
formularza, jeli wysyka zakoczy si powodzeniem. Bdziesz take potrzebowa anulowa domylne dziaanie
zatwierdzania formularza (zwracanie wartoci false), korzystajc ze suchacza .submit o identyfikatorze
addRunner na formularzu.
$('_______________').click(function() {
var data = $("#addRunner :input").___________________();
$.post($("#addRunner").attr('action'), __________ , _______________(json){
if (json.status == "fail") {
alert(json._____________);
serializeArray
}
if (json.status == ______________) {
"success"
alert(json.message);
clearInputs();
message
data
}, "json");
});
function ___________________{
#btnSave
function
$("#addRunner :input").each(function(){
$(this).val('');
});
submit
}
$("#addRunner").______________(function(){
return false;
});
clearInputs()
my_scripts.js
Przygotuj wszy
formularza do stkie pola
wysania
do serwera.
$.post($("#addRunner").attr('action'), __________
, _______________(json){
data
function
if (json.status == "fail") {
alert(json._____________);
message
}
"success"
if (json.status == ______________)
{
alert(json.message);
clearInputs();
}
}, "json");
});
clearInputs()
function ___________________{
$("#addRunner :input").each(function(){
$(this).val('');
});
}
submit
$("#addRunner").______________(function(){
return false;
});
my_scripts.js
Jazda prbna
Po ostatnich poprawkach Twoja strona nie bdzie wyglda inaczej. Powiniene jednak zaktualizowa
swj plik my_scripts.js kodem, ktry przed chwil utworzye. Nastpnie otwrz plik index.html
w przegldarce i przejd na kart Network (Chrome) albo Net (Firebug). Powiniene zobaczy
zdarzenie POST w pliku service.php za kadym razem, kiedy klikniesz przycisk btnSubmit. Zdarzenie
POST bdzie wymienione w sekcji Request Method karty Headers. Dane z formularza (Form Data)
take bd tam obecne. Teraz potrzebujemy ju tylko miejsca, w ktrym moglibymy je umieci...
370
Rozdzia 9.
6HUZHU
SQL w MySQL
oznacza Structured
Query Language, czyli
Strukturalny Jzyk
Zapyta.
MySQL
przechowuje
dane w tabelach
baz danych.
%D]DGDQ\FK0\64/
Dane
3U]HJOGDUND
<? php
>?
6HUZHU:::
6HUZHUED]\GDQ\FK
jest
Baza danych czsto staci
po
przechowywana w ardym,
plikw na dysku tw nie
by
chocia wcale tak
musi.
6HUZHU:::
6HUZHUED]\GDQ\FK
Baza danych
moe zawiera
wiele tabel.
SQL gotowy
do wysmaenia
Aby mg skonfigurowa baz danych, tabel oraz uytkownikw, napisalimy dla Ciebie SQL.
Uruchom MySQL Workbench, otwrz nowe poczenie i uruchom nastpujcy kod SQL.
create database hfjq_race_info;
race_info.
Utwrz baz danych o nazwie hfjq_
Przeka skryptowi, e
nastpny fragment
odnosi si do Twojej
nowej bazy.
372
Rozdzia 9.
Jazda prbna
Uruchom MySQL Workbench i otwrz nowe poczenie z serwerem. Wklej kod SQL
z poprzedniej strony w oknie Query i kliknij ikon z byskawic, aby go uruchomi.
W oknie Output u dou ekranu powiniene zobaczy komunikat o powodzeniu operacji.
No a gdzie po tym
wszystkim znajduj si
dane?
Zaraz si za to wemiemy.
Kod, ktry przed chwil uruchomie, tworzy baz danych
i uytkownika, przydziela uytkownikowi dostp do bazy i tworzy
tabel do przechowywania danych o biegaczach. Zobaczmy, jak
moesz umieszcza w niej dane.
Rozdzielona przecink
lista kolumn, do kt ami
chcemy wstawi da rych
ne
Przeka instrukcji,
do ktrej tabeli ma
wstawi dane.
ch,
Rozdzielona przecinkami lista dany
ktre chcesz umieci w tabeli,
odpowiadajca licie kolumn
Sowo kluczowe va
lue
okrela, kiedy koczy s
si
lista kolumn, a za
czy
si faktyczne warto naj
ci.
Tabela bazy
danych
Wstaw wartoci
do tabeli
Wartoci danych
374
Rozdzia 9.
Relacyjna
baza
danych
Dodaj nowy
li
wiersz do tabe
2EHMU]\MWR
wiczenie
Napisz polecenia SQL-a insert wstawiajce do bazy danych informacje, ktre masz ju w swoim pliku
XML. Powiniene umieszcza jednorazowo po jednym rekordzie w tabeli runners, ktr wczeniej
utworzye. Pierwsze polecenie napisalimy za Ciebie.
rozwizanie wiczenia
Rozwizanie
wiczenia
Teraz, kiedy masz ju cay SQL wstawiajcy zawodnikw do tabel bazy danych,
otwrz MySQL Workbench i uruchom swj kod.
376
Rozdzia 9.
Przegldarki
internetowe nic nie
wiedz o PHP, tak
wic nie potrafi one
uruchamia skryptw
w tym jzyku.
n internetowych
W przeciwiestwie do stro iera lokalnie
otw
na
mo
e
w HTML-u, ktr
zawsze
w przegldarce, skrypty PHP rednictwem
po
musz by otwierane za
W.
adresu URL na serwerze WW
<? php
>?
>?
PHP i MySQL?
Mylaam, e uczymy si
tu jQuery! O co chodzi?
wielki post
ekranie.
Wypisz warto na
Nazwa elemen
tu
zbiera dane na HTML, ktry
formularzu
echo $_POST["txtFirstName"];
Nazwa tablicy, ktra zostaa utworzona
automatycznie w celu obsuenia
danych przesanych do pliku PHP
za pomoc metody POST
Hej, co jeszcze
trzeba zrobi? Chc
ju i na pla!
378
Rozdzia 9.
Otwrz
znaczniki
PHP.
mysql_connect jest
funkcj z biblioteki PHP,
ktr doczylimy
podczas instalacji PHP.
Adres serwera,
na ktrym znajduje
si baza danych
MySQL
Nazwa
uytkownika
MySQL, przy
uyciu ktrej
chcesz si
poczy
#%#
mysql_connect('127.0.0.1', 'runner_db_user', 'runner_db_password')
Instrukcja
die wywietla
komunikat
i koczy skrypt
PHP.
? 3R#J\LZ3Z83Z\?3L%
mysql_select_db('hfjq_race_info');
L%VJ\LZ^
Zamknij
znaczniki
PHP.
service.php
jazda prbna
Jazda prbna
Otwrz swj ulubiony edytor tekstw i przepisz kod z poprzedniej strony. Zapisz plik pod nazw service.php
w tym samym folderze, w ktrym znajduje si Twj plik index.html z tego rozdziau. Otwrz service.php
w swojej przegldarce, aby sprawdzi wynik zwrcony przez zapytanie do bazy danych.
Nie zapominaj, e kod PHP musi wykonywa si na serwerze WWW, a zatem adres URL powinien
zaczyna si od http://, a nie od file://.
Masz racj.
Tak jak w przypadku specjalnego polecenia insert sucego
do wstawiania danych, istnieje specjalna skadnia suca do ich
odczytywania. Zobaczmy, jak to dziaa.
Nie istniej
gupie pytania
380
Rozdzia 9.
Rozdzielona przecinkami
lista kolumn, z ktrych
chcemy pobra dane
Tablica, z ktrej
chcemy pobra dane
O wiele wicej
informacji na temat
PHP, SQL-a, baz
danych i tabel
znajdziesz w ksice
Rusz gow! PHP &
MySQL.
Zaostrz owek
Utwrz instrukcj select dla danych, ktre s nam potrzebne do wywietlenia zawodnikw na
naszej stronie. Bdziesz musia odczyta pola first_name, last_name, gender oraz finish_time
z tabeli runners. Posortuj dane w kolejnoci rosncej wedug finish_time od wartoci najniszej
do najwyszej. W razie potrzeby zajrzyj na stron 372, gdzie utworzye tabel, dziki czemu bdziesz
mg uy prawidowych nazw kolumn.
zaostrz rozwizanie
Zaostrz owek
Rozwizanie
ra
Lista kolumn, ktre musisz wyb
SELECT first_name, last_name, gender, finish_time FROM runners order by finish_time ASC
Tabela, z ktrej chcesz
odczyta dane
Jazda prbna
Korzystajc z narzdzia MySQL Workbench, uruchom swoj instrukcj select,
aby zobaczy dane w postaci, w jakiej zostan zwrcone w obiekcie ResultSet.
To wietnie, e mog
zobaczy dane w Workbenchu,
ale czy nie potrzebujemy ich
na naszej stronie WWW?
Fakt, potrzebujemy.
Sprawdmy, jak moemy pobra
informacje z bazy danych
i wywietli je na ekranie.
382
Rozdzia 9.
Magnesiki z kodem
Poukadaj pokazane poniej magnesiki, aby dokoczy kod PHP tworzcy funkcj o nazwie
db_connection zarzdzajc poczeniami z baz. Ponadto utwrz zmienn $query i przypisz do
niej polecenie select, ktre napisae wczeniej i ktre wybiera wszystkich biegaczy z bazy danych.
Nastpnie dodaj zmienn $result wywoujc funkcj db_connection, ktra przekazuje jako
parametr zmienn $query. Na koniec, za pomoc ptli while, pobierz wszystkie wiersze ze zbioru
wynikowego bdcego tablic asocjacyjn i wydrukuj je na ekranie.
#%#
$query = "SELECT first_name, last_name, gender, finish_time _____ runners
order by ______________ASC ";
$result = ___________________($query);
_______________db_connection(__________) {
mysql_connect('127.0.0.1', 'runner_db_user', 'runner_db_password')
AAAAA 3R#J\LZ3Z83Z\?3L%
$row
_____________________('hfjq_race_info');
die
return mysql_query($query);
mysql_select_db
FROM
G
$result
db_connection
function
$query
finish_time
service.php
#%#
$query = "SELECT first_name, last_name, gender, finish_time _____
FROM runners
finish_time
order by ______________ASC
";
$result = ___________________($query);
db_connection
while ($row = mysql_fetch_array(____________,
MYSQL_ASSOC)) {
$result
print_r(_______);
$row
}
function
$query
_______________db_connection(__________)
{
mysql_connect('127.0.0.1', 'runner_db_user', 'runner_db_password')
die
AAAAA 3R#J\LZ3Z83Z\?3L%
_____________________('hfjq_race_info');
mysql_select_db
return mysql_query($query);
}
service.php
Nie istniej
gupie pytania
P:
384
Rozdzia 9.
O:
Jazda prbna
Zaktualizuj swj plik service.php kodem, ktry wanie utworzye, po czym otwrz go w swojej
przegldarce, aby zobaczy wyniki zapytania przesanego do bazy danych. Nie zapominaj, e kod PHP
musi by uruchomiony na serwerze WWW, tak wic w pasku adresu powiniene zobaczy http://.
Wynik kocowy
wywietlenia
wszystkich
danych na
ekranie.
Zdecydowanie tak.
To, co widzimy, to seria wywietlonych na ekranie tablic.
Zawieraj one potrzebne dane, ale nie w takim formacie,
jakiego potrzebujemy. Na szczcie istnieje skuteczna
metoda organizowania informacji w formacie, ktry
doskonale nadaje si do definiowania struktur danych.
atwiejszy sposb
XML
,&@ L?W9G
kontra
To powinno by
dla nas przydatne,
prawda?
JSON
Element gwny
<books>
books:{
<book>
book:[
<title>Kolor magii</title>
Para nazwa/warto
rozdzielona dwukropkiem
<author>Terry Pratchett</author>
title:'Kolor magii',
<year>1983</year>
author:'Terry Pratchett',
</book>
year:1983
<book>
},
<title>Mort</title>
<author>Terry Pratchett</author>
<year>1987</year>
</book>
{
Wszystkie
obiekty s
rozdzielone
przecinkami.
<book>
<year>2009</year>
</book>
</books>
year:1987
{
Kady obiekt
jest zamknity
midzy
nawiasami
klamrowymi.
]
Wiele kopii znacznikw
zwiksza ilo danych do
przekazania.
author:'Terry Pratchett',
},
<title>Paradoks czasu</title>
<author>Eoin Colfer</author>
title:'Mort',
Kada waciwo
jest oddzielona
od innych
przecinkiem.
acuchy tekstowe
znajduj si midzy
apostrofami.
title:'Paradoks czasu',
author:'Eoin Colfer',
year:2009
Liczby nie potrzebuj
apostrofw.
}
}
Aby odczyta informacje zawarte w obiekcie JSON, moesz uy tej samej notacji, z ktrej korzystasz w przypadku innych
obiektw notacji z kropk (.). Tablice wewntrz obiektw JSON zachowuj si tak samo jak tablice JavaScriptu i maj
takie same waciwoci, na przykad length. W przypadku naszego przykadowego obiektu JSON pokazanego powyej
mgby dowiedzie si, ile ksiek zostao zwrconych, za pomoc instrukcji books.book.length. Rne obiekty JSON
bd mie rne struktury, tak wic niekoniecznie bdziesz potrzebowa tylu kropek, aby dotrze do obiektu tablicy.
386
Rozdzia 9.
Skrt
jQuery
Wywoaj zwrotnie t
funkcj.
$.getJSON(url_to_load, function(json) {
Adres URL, spod ktrego
chcesz pobra dane
});
Tak, moemy.
Szczliwie ludzie od PHP pomyleli
take i o tym. Spjrzmy jeszcze na kilka
podstawowych elementw PHP, po czym
sprawdmy, jak poczy je z innymi
funkcjami PHP, aby otrzyma nasze dane
w formacie JSON.
am na wasn odpowiedzialno
Podstawy PHP
1. Cay kod PHP musi znajdowa si midzy znacznikami #%# i G.
?@G#3GZX
#%#
echo "Robert";
G
</span></div>
#%#
!9KK
$home_country = "Polska"; // OK
!3% @3 33?3KK#F?9S8J\?
#%#
!!!
echo $i;
while ($j <= 10) {
L%!S
}
!33 3-
3L%!33!@
L%\L3F3 X+!@
}
G
388
Rozdzia 9.
#%#
$my_arr2 = array('USA', 'Polska',
'Irlandia');
L%!A3 --KKHXF&3 &3?3
L%!3 KKHXF&383
L%!3 -KKHXF&3 9
#%#
L%,SFRZ?
#%#
echo "Robert";
print_r($my_arr2);
G
echo json_encode(array_name);
Zanim jednak bdziemy mogli zakodowa dane, musz si one znale w jednej
tablicy asocjacyjnej. Spotkalimy si ju z metod, ktra przechodzi w ptli przez
zbir wynikowy i odnajduje wszystkie znajdujce si tam tablice asocjacyjne. To,
czego teraz potrzebujemy, to sposb na poczenie wszystkich tych tablic w jedn.
Za pomoc funkcji PHP array_push moemy dopisywa nowe elementy na
kocu tablicy.
Utwrz now pust tablic.
$my_array = array();
Dodawana do tablicy
para nazwa/warto.
Porady maniaka
Funkcja json_encode pojawia si w wersji 5.2 PHP. Jeli korzystasz z wersji
wczeniejszej, uaktualnij j albo wpisz w swojej ulubionej wyszukiwarce haso json
alternatywne kodowanie php, aby zobaczy, jak inni programici PHP poradzili sobie
z brakiem takiej funkcji. Bdziesz mg wtedy napisa wasn funkcj i skorzysta
z przewagi, jak moe Ci ona da dziki swoim wyjtkowym cechom.
390
Rozdzia 9.
gupie pytania
O:
ie
Sp
ojn
k
o
dugie wiczenie
Dugie wiczenie
Zaktualizuj swj plik my_scripts.js now funkcj o nazwie getDBRacers, ktra wywouje plik service.php.
To wywoanie powinno zwraca obiekt JSON, a nastpnie informowa w oknie alarmowym o liczbie
zwrconych biegaczy. Zaktualizuj te funkcj czasow startAJAXCalls, aby zamiast funkcji
getXMLRacers wywoywaa t now funkcj. Nastpnie dokonaj aktualizacji pliku service.php,
tak aby uzyskane z bazy dane o biegaczach odsya on zakodowane w formacie JSON.
function startAJAXcalls(){
if(repeat){
setTimeout( function() {
..................
startAJAXcalls();
},
FREQ
);
}
}
function getDBRacers(){
$.getJSON(. ........ function(.....) {
.....(json.runners........);
});
getTimeAjax();
}
my_scripts.js
392
Rozdzia 9.
#%#
$query = "SELECT first_name, last_name, gender, finish_time FROM runners
order by finish_time ASC ";
$result = ..................($query);
$runners = array();
while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
............($runners, array('fname' => $row['first_name'], 'lname' =>
$row['last_name'], 'gender' => $row['gender'], 'time' => $row['finish_time']));
}
echo ............(array("runners" => ............));
exit;
function db_connection($query) {
mysql_connect('127.0.0.1', 'runner_db_user', 'runner_db_password')
?3& 3R#J\LZ3Z83Z\?3L%
mysql_select_db..................
return mysql_query($query);
}
function fail($message) {
die(json_encode(array('status' => 'fail', 'message' => $message)));
}
function success($message) {
die(json_encode(array('status' => 'success', 'message' => $message)));
}
G
service.php
Twj plik my_scripts.js ma teraz now funkcj o nazwie getDBRacers, ktra wywouje plik
service.php. Stara funkcja getXMLRunners nie jest ju potrzebna, tak wic moesz si jej pozby.
Nowa funkcja przyjmuje obiekt JSON zwrcony przez plik service.php oraz podaje w oknie
alarmowym liczb pobranych biegaczy. Funkcja czasowa startAJAXCalls take zostaa
zaktualizowana o t now funkcj. Dokonae te aktualizacji pliku service.php, a otrzymane
z bazy dane o biegaczach s odsyane w formacie JSON i porzdkowane wedug pola
finish_time, poczwszy od najniszej wartoci.
function startAJAXcalls(){
if(repeat){
setTimeout( function() {
Wywoaj now
funkcj zgodnie
startAJAXcalls(); z harmonogramem.
getDBRacers();
},
FREQ
);
}
}
function getDBRacers(){
$.getJSON("service.php", function(json) {
alert(json.runners.length);
});
getTimeAjax();
}
Ten obiekt json zawiera
tablic o nazwie runners.
Nazw t uzyska od
metody PHP json_encode.
394
Rozdzia 9.
my_scripts.js
#%#
function db_connection($query) {
Funkcja obsugujca
poczenie z baz danych
,
Zwr zbir wynikowy tam
skd zostaa wywoana ta
funkcja.
function fail($message) {
die(json_encode(array('status' => 'fail', 'message' => $message)));
}
function success($message) {
die(json_encode(array('status' => 'success', 'message' => $message)));
}
G
service.php
jazda prbna
Jazda prbna
Zaktualizuj swoje pliki service.php oraz my_scripts.js kodem, ktry utworzye, a nastpnie
otwrz plik index.html w swojej przegldarce. W Narzdziach dla programistw otwrz kart
Network, gdzie powiniene zobaczy pobierane informacje JSON.
Funkcja wywietla
okno alarmowe
z liczb rekordw
zwrconych przez
obiekt JSON.
Niezupenie.
Wiemy, e dane mamy w formacie JSON, poniewa
utworzy je nasz wasny kod PHP. Teraz (wreszcie)
spojrzymy bliej na ten obiekt JSON, o ktrym tyle
mwilimy, dziki czemu bdziemy mogli z niego
odzyska dane.
396
Rozdzia 9.
Zaostrz owek
Zaktualizuj funkcj getDBRunners, tak aby wczytywaa obiekt JSON z aplikacji service.php. Nastpnie
uyj logiki warunkowej w celu okrelenia, na ktr list trafi biegacz. Uwaaj! Naley tak postpi tylko
wtedy, gdy biegacze istotnie zostan zwrceni w obiekcie JSON.
function getDBRacers(){
$.getJSON(
, function(json) {
if (json.runners.
> 0) {
$('#finishers_m').empty();
$('#finishers_f').empty();
$('#finishers_all').empty();
$.
json.runners,function() {
@3 &G3ZFR+%3%&3Z3+
%K&G
if(this['gender'] == 'm'){
$('
').append( info );
);
}else{}
$('
').append( info );
});
}
});
getTimeAjax();
}
my_scripts.js
zaostrz rozwizanie
Zaostrz owek
Rozwizanie
function getDBRacers(){
Pobierz informacje
z pliku service.php.
$.getJSON("service.php", function(json) {
if (json.runners.length > 0) {
$('#finishers_m').empty();
$('#finishers_f').empty();
Ponownie wyczy
wszystkie listy.
$('#finishers_all').empty();
$. each(json.runners,function() {
@3 &G3ZFR+%3%&3Z3+
this['time'K&G
if(this['gender'] == 'm'){
$('#finishers_m').append( info );
y bieca
Sprawd, cz ciwoci
a
w
warto
, czy f.
gender to m
}
});
getTimeAjax();
}
my_scripts.js
Porady maniaka
Aby przej przez wszystkie elementy tablicy zwrconej w obiekcie JSON, moemy uy
metody each. Rni si ona od metody (selektor).each, poniewa moe iterowa
przez tablice spoza jQuery takie jak nasza tablica runners.
398
Rozdzia 9.
Jazda prbna
W swoim pliku my_scripts.js zaktualizuj funkcj getDBRacers. Nastpnie otwrz plik index.html
i zobacz, jak za pomoc Ajaksa, formatu JSON i PHP pobierani s biegacze z bazy danych MySQL.
Informacje
o biegaczach
pobrane z bazy
danych
Suszna uwaga.
Kiedy ju zakoczymy ten etap, to aloha, Waikiki! Najpierw
zagwarantujmy, e dane, jakie wprowadzi dzia marketingu,
nie wpdz nas w adne problemy.
Istnieje wiele rnych funkcji, ktrych uycie mona rozwaa przy okazji sanityzacji danych, w tym
htmlentities, trim, stripslashes, mysql_real_escape_string i inne. Znacznie wiksz ich liczb
znajdziesz w rozdziale 6. ksiki Head First PHP & MySQL. Edycja polska.
Moemy sprawdzi, czy warto tego pola wystpuje w daniu POST, dziki czemu bdziemy wiedzie, e
przesalimy formularz. Nastpnie moemy wywoa funkcje walidacji i sanityzacji danych, aby upewni si,
czy dostalimy wszystkie potrzebne informacje. Podobnie, jeli zaktualizujemy metod getJSON pobierajc
biegaczy z bazy danych przy uyciu parametru URL (dla obiektu PHP $_GET), bdziemy mogli wskaza do
uruchomienia w pliku PHP ten wanie kod. Dziki temu do konserwacji bdziemy mie tylko jeden plik PHP.
$.getJSON("service.php~
P
!, function(json) {
Skorzystaj z takiego zapisu, aby
nakaza funkcji PHP uruchomienie
kodu zwizanego z pobieraniem
biegaczy z bazy danych.
400
Rozdzia 9.
Kod
gotowy do
wysmaenia
Runner zostaa
#%#
Sprawd, czy warto add t to nasze
Jes
a.
wer
ser
przekazana do
if ($_POST['action'] == 'addRunner') {
o kodu.
ukryte pole z wczeniejszeg
$fname = htmlspecialchars($_POST['txtFirstName']);
$lname = htmlspecialchars($_POST['txtLastName']);
Sanityzacja danych dla info
rmacji
$gender = htmlspecialchars($_POST['ddlGender']);
zawartych w tablicy $_POST
.
$minutes = htmlspecialchars($_POST['txtMinutes']);
$seconds = htmlspecialchars($_POST['txtSeconds']);
# WA3L%KFK!3# WA3L%KFK!&3
3&V?3## 3F&983ZFR
,
}
Walidacja danych gwarantuje
jakie
no
dzo
owa
wpr
e
#!3#!&3
informacje.
3&V Z#?33ZFR
}
if( empty($gender) ) {
3&V ZF8 3#J
Jeli walidacja nie
}
powiedzie si, wywoaj
funkcj fail.
$time = $minutes.":".$seconds;
$query = "INSERT INTO runners SET first_name='$fname', last_name='$lname', gender='$gender',
finish_time='$time'";
do bazy danych...
Ka wstawi nowy rekord
$result = db_connection($query);
...i sprawd, czy wstawianie zakoczyo si sukcesem.
if ($result) {
$msg = "Biegacz: ".$fname." ".$lname." dodany poprawnie." ;
success($msg);
Sprawd, czy warto get
Runners
4&3&H3F3#F?J4, zostaa
przesana w acuchu URL
.
}elseif($_GET['action'] == 'getRunners'){
$query = "SELECT first_name, last_name, gender, finish_time FROM runners order by finish_time
ASC ';
$result = db_connection($query);
$runners = array();
while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
array_push($runners, array('fname' => $row['first_name'], 'lname' => $row['last_name'],
'gender' => $row['gender'], 'time' => $row['finish_time']));
}
Pobierz i zwr
echo json_encode(array("runners" => $runners));
biegaczy.
exit;
}
service.php
function getDBRacers(){
Zrb to!
Zaktualizuj wywoanie
funkcji getJSON parametrem
URL o nazwie action
z wartoci getRunners, aby
kazao plikowi service.php
zwrci biegaczy.
.
}
});
getTimeAjax();
}
my_scripts.js
Jazda prbna
Po zaktualizowaniu swoich plikw service.php oraz my_scripts.js otwrz w przegldarce plik index.html.
Powiniene zobaczy, jak pobierani s biegacze. Powiniene mie take moliwo dodawania do listy
nowych biegaczy za pomoc formularza na nowej karcie, ktr utworzye.
Wspaniale! Wsiadajmy
ju do samolotu,
a kolejne drinki
wypijemy sobie
na play...
402
Rozdzia 9.
Krzywka jQuery
Nadszed czas, aby wygodnie usi i da swojej lewej pkuli
jakie zajcie. Bdzie to zwyka krzywka. Wszystkie
wyrazy stanowice hasa pochodz z biecego rozdziau.
Poziomo
Pionowo
rozwizanie krzywki
404
Rozdzia 9.
PHP
MySQL
nych
anie da
chowyw z wstawianie
e
z
r
p
ia
a
Umoliw i tabelach or
omoc
h
cji za p
c
a
a
z
m
r
a
b
fo
in
w
ywanie
i odczyt QL.
S
jzyka
JSON
ra
aby pob
ie
tJSON, ane w formac
e
g
ji
c
k
w
n
o
fu
d
o
j
k
y
za
.
U
ra dane
kt JSON
z serwe wrci ona obie
larza
Z
z formu
e
n
JSON.
a
y
s
ich
prze
og by
t. Przed atowa
Dane m metody pos
m
r
fo
s
je
oc
y.
za pom m powiniene
lizeArra
ie
ia
r
n
e
a
s
s
y
ji
c
w
k
n
fu
oc
za pom
Jzyk s
kr
stronie yptowy wykony
w
se
manipulo rwera, ktry p any po
ozwala
wanie z
na
na serw
awarto
ci stro
e
ny
przekaza rze, zanim stro
na ta zo WWW
na do p
rzeglda
s
rki klien tanie
ta.
Skrypt
PHP
Plik tek
st
ktry wy owy zawierajc
y
konuje d
WWW.
ziaania kod PHP,
na serw
erze
<?php ?
>
Te znac
zn
PHP w iki musz otac
skryptac
z
h PHP. a cay kod
echo
Ta instr
uk
okna prz cja PHP wysy
a
e
nastpu gldarki. Jej s tekst do
kadnia
jco:
wyglda
echo 'W
itaj, w
iecie';
$_POST
Specjaln
a zmien
n
dane z
formular a, ktra przech
za.
owuje
json_en
code
Ta instr
uk
i konwe cja pobiera ta
rt
b
JSON, k uje j na dane lic
trych d
w forma
omaga s
c
i jQuer ie
y.
Rozdzia 9.
406
Rozdzia 9.
10.,QWHUIHMVX\WNRZQLNDZbM4XHU\
Kiedy wreszcie
dadz mi spokj
ci paparazzi?
Dr Paters
ka
?
Dr Glinka
za
anie formular
Wygld i dzia do jego
aj
c
nie zach
wyglda on,
wypeniania z pnych lat
zi
od
jakby poch
wieku.
90. ubiegego
408
Rozdzia 10.
jquery UI
Data obserwacji:
Miesic
ssak
Rodzaj zwierzcia:
Przybliona odlego od zwierzcia (w metrach):
Masa zwierzcia:
Wysoko zwierzcia:
Kolor skry, sierci albo okrycia:
R
G
B
Co powiecie na
mikser kolorw?
eby
Chcielibymy, cy
ni
nasi uytkow gali
klikali i przeci
suwak w celu l
wypeniania p nam
liczbowych. Da e
to dokadniejsz
dane i bdzie
atwiejsze dla.
uytkownikw
WYSIL
SZARE KOMRKI
Kryptozoolodzy postawili przed Tob trudne zadanie. Chc, eby utworzy interfejs
uytkownika, jaki mona spotka w zwykych aplikacjach. Jakie wedug Ciebie
funkcje moe zaoferowa jQuery, ktre pomogyby osign ten cel?
rozmowa w boksie
Chopaki, widzielicie ju projekt
formularza do przesyania
obserwacji kryptyd?
Jzek
Kuba
410
Rozdzia 10.
jquery UI
jeste tutaj
411
przedstawiamy jquery UI
Wtyczki z efektami
jQuery UI poszerza moliwoci
jQuery o dodatkowe efekty.
Twoje elementy bd mogy
si odbija, eksplodowa,
pulsowa albo dre. jQuery
UI zawiera te funkcje easingu
skomplikowane operacje
matematyczne, dziki ktrym
animacje wygldaj bardziej
realistycznie.
Wtyczki z interakcjami
!
"
#
Wtyczki w widgetami
Widget to samodzielny element,
ktry dodaje do Twoich
aplikacji internetowych nowe
funkcjonalnoci. Widgety pozwalaj
Ci zaoszczdzi mnstwo czasu
i zapobiegaj zoonoci kodu,
tworzc jednoczenie przydatne
i aktywne elementy interfejsu
uytkownika.
W naszej pracy
z
w tym rozdziale UI
si przede wszy skupimy
stkim na
widgetach.
Jazda prbna
412
Instrukcja postpowania
http://jqueryui.com/demos/animate/#default
http://jqueryui.com/demos/effect/default.html
http://jqueryui.com/demos/draggable/#default
http://jqueryui.com/demos/accordion/#default
http://jqueryui.com/demos/dialog/#animated
Rozdzia 10.
jquery UI
Puff
Autocomplete
Droppable
Explode
Sortable
Progressbar
Resizable
Blind
Accordion
Rozwizanie
Dopasuj kad z wtyczek jQuery UI do opisu jej typu i tego, co robi.
Puff
Autocomplete
Droppable
Explode
Sortable
Progressbar
Resizable
414
Blind
Accordion
Rozdzia 10.
jquery UI
Zrb to!
(+
!!
%
"
!#
-40
&
INNO'N
("
")
("
"
5
'&''&P84<
3
3
'''&
P84 ' '
*'
''&73"
+
'
3
!&GE
+
'&3P84 Q
'
8G#I
&
INNO'N&NR&;
4
No to zaadowaem
sobie jQuery UI! Jak mam
z niego korzysta?
Musisz po prostu rozpakowa folder i doczy
bibliotek do katalogu z Twoim projektem.
Przewr stron, a zajrzymy do rodka jQuery UI.
struktura jquery UI
jquery-ui-1.8.16.custom
W chwili pisania tej
aktualna wersja jQ ksiki
miaa numer 1.8.16 uery UI
.
css
development-bundle
js
index.html
sunny
jquery-1.6.2.min.js
jquery-ui-1.8.16.custom.min.js
jquery-ui-1.8.16.custom.css
W naszym formular
sightings.html bdzizu
potrzebowa sekcj emy
i
ze skryptem, ktry
zawiera cze do teg
o
pliku.
Folder z jQuery UI doczylimy do pliku z kodami, ktry pobrae na pocztku tej ksiki.
Znajdziesz go w podkatalogu end w folderze r10.
416
1.
2.
3.
4.
5.
Rozdzia 10.
jquery UI
-
3;;
!#
-4
<link type="text/css" href="jquery-ui-1.8.16.custom/css/sunny/
jquery-ui-1.8.16.custom.css" rel="stylesheet" />
(5
67'8
.
<input type="text" name="sighting_date">
-
9:;
%
/!
&
!!
" !
!
.
ie
To tyle! Wanrmularza
dodae do fo widget.
interaktywny
jQuery za kulisami
Chocia moe to wyglda na czary, to jQuery UI jest tak naprawd tylko du
iloci dobrze zaprojektowanego i wietnie napisanego kodu w jQuery kodu,
ktrego Ty nie musisz ju pisa. Przyjrzyjmy si bliej temu, jak to dziaa.
1
7
!
!#
$("#datepicker").datepicker();
Prawdziwa moc kry
tutaj, w metodzie je si
datepicker.
Kod jQuery
Za kulisami
2
<
!#
""
!#
-4
9:;
Interpreter
JavaScriptu
Rozdzia 10.
%
Wersja DOM
strony
Prosz bardzo.
67'8=
3;;
" !
418
Widget z kalendarze
ktry w magiczny m,
sposb pojawia si
na stronie, jest
tabel zagniedon
w wielu sekcjach.
jquery UI
rzedni
Przycisk pop eniejszy
cz
w
Ci
pokae
miesic.
Widget datepicker ma
mnstwo konfigurowalnych
opcji. stepMonths umoliwia
okrelenie, ile miesicy
zostanie przewinitych.
$("#datepicker").datepicker({
stepMonths: 3
Jeli rozpoczniesz w danym mies
icu
i klikniesz przycisk poprzedni
});
albo
nas
tpny, przeskoczysz o trzy
miesice do tyu albo do przodu.
$("#datepicker").datepicker({
changeMonth: true
});
wiczenie
ji
Jeli zmienisz warto opc
tkownik
changeMonth na true, uy
sic z listy
bdzie mg wybiera mie
ej.
rozwijan
Napisz kod, ktry pozwoli uytkownikowi zmienia za pomoc list rozwijanych zarwno
miesic, jak i rok w widgecie datepicker. Podpowied: kiedy zmieniasz wicej opcji,
rozdziel je przecinkami.
rozwizanie wiczenia
Napisz kod, ktry pozwoli uytkownikowi zmienia za pomoc list rozwijanych zarwno
miesic, jak i rok w widgecie datepicker. Podpowied: kiedy zmieniasz wicej opcji,
Rozwizanie rozdziel je przecinkami.
wiczenia
$('#datepicker').datepicker({
changeMonth: true, changeYear: true
});
Kod
gotowy do
wysmaenia
Na pocztku
<head>
&GV?Z&FS\8 F3LS\R #?K&G
<link rel="stylesheet" type="text/css" href="style/form.css" />
; !!?
%
&&'#4#'7# ! !!!%
&&'#4#'7# !# !!
!
!?
li cze do pliku CSS jQuery
Musimy okre
o.
UI, eby widgety wyglday prawidow
</head>
<h3>Data obserwacji:</h3>
;
!?"
:
!
<script src="scripts/jquery-1.7.min.js"></script>
<script src="scripts/my_scripts.js"></script>
! ! %
&&'#4#'7# !!%
&&'#4#'7# !##!!
</body>
</html>
eby
Musimy doczy bibliotek jQuery UI,pne.
wszystkie fajne funkcje UI byy dost
$(document).ready(function(){
)*M-
M+#
*, ?
?2
Q ?
2
.+0
});//koniec doc ready
my_scripts.js
420
Rozdzia 10.
jquery UI
Jazda prbna
Po wprowadzeniu kodu z poprzedniej strony otwrz w swojej ulubionej przegldarce plik
sightings_end.html, aby przetestowa widget datepicker. Kliknij przyciski nastpny i poprzedni
oraz listy rozwijane z miesicem oraz rokiem, eby upewni si, e wszystko dziaa.
Datepicker dziaa!
Opcje changeMonth
i changeYear take
dziaaj.
Moesz go ju odhaczy
Numer 1 z naszej listy kontrolnej zosta zrobiony. Przejdmy do pozycji nr 2.
1.
2.
3.
4.
5.
$( "#radio1" ).button();
<div id="radio">
<input type="radio" id="radio1" name="radio" />
Umie grup
przyciskw radiowych
wewntrz kontenera.
W kodzie jQuery
wska kontener.
$( "#radio" ).buttonset();
422
Rozdzia 10.
jquery UI
Magnesiki z kodem
Poukadaj magnesiki z kodem we waciwej kolejnoci, aby utworzy zestaw przyciskw,
z ktrego bd korzysta uytkownicy, wybierajc rodzaj zwierzcia, jakie widzieli. Kilka
magnesikw umiecilimy we waciwych miejscach.
<div id="type_select">
<label for="radio1">Chupacabras</label>
&38& 3?GV3R9?3K&38&G
</div>
my_scripts.js
$( "#type_select" ).buttonset();
<div id="type_select">
:
!
&38& 3?GV3R9?3K&38&G
</div>
W folderze z kodem
moesz zobaczy,
e dodalimy
te przyciski dla
yeti oraz innych
zwierzt. W tym
wiczeniu po
prostu zabrako
na nie miejsca.
$( "#type_select" ).buttonset();
my_scripts.js
424
Rozdzia 10.
jquery UI
Jazda prbna
Do plikw sightings.html oraz my_scripts.js dodaj kod z poprzedniej strony. Nastpnie
otwrz stron w swojej ulubionej przegldarce i sprawd, czy wszystko dziaa.
...zamienie na
zestaw adnie
wygldajcych
przecznikw.
1.
2.
3.
4.
5.
<div id="slide_me"></div>
$("#slide_me"). slider();
suwaka wzdu
Kiedy uytkownik przesuwa uchwyt
j zmianie.
jego cieki, wartoci suwaka ulega
$( "#slide_me" ).slider({
Opcja value decyduje,
od ktrej wartoci
naley zacz.
value:0,
min: 0,
max: 100,
step: 5,
orientation: 'vertical'
});
Opcja orientation
moe przyj warto
horizontal (uoenie
poziome) albo vertical
(uoenie pionowe).
426
Rozdzia 10.
jquery UI
Widget z suwakiem
oferuje wietne opcje,
ale jak przenosimy wartoci
z suwaka do formularza?
Musimy poczy suwak z jedn z funkcji obsugi zdarze tego wigdetu.
Zobaczylimy ju niektre z opcji widgetu, ale nie poznalimy jeszcze kolejnej wspaniaej
cechy jQuery UI. Wiele skadnikw jQuery udostpnia funkcje obsugi zdarze, a suwak
jest jednym z nich. W chwili pisania tej ksiki widget suwaka jQuery UI oferowa pi
funkcji obsugi: create, start, slide, change i stop. Aby poczy suwak z polem
formularza, wyprbujmy funkcj obsugi zdarze o nazwie slide.
Jeli nie chcesz,
eby uytkownik
mg wpisywa liczby
z klawiatury, ustaw
opcj readonly.
Zdarzenie przesunicia
jest powizane
z wywoaniem zwrotnym
funkcji. Kiedy funkcja
ta dziaa, warto
rubryki jest okrelana
za pomoc metody
jQuery val.
dugie wiczenie
Dugie wiczenie
Uzupenij puste miejsca w kodzie kadej z rubryk, ktre chc mie kryptozoolodzy. Zostawili
oni dla Ciebie kilka notatek dotyczcych opcji suwakw, jakie powiniene ustawi.
):
Odlego od zwierzcia (w metrach
osi 0.
Warto pocztkowa powinna wyn
wynosi 0.
Najmniejsza odlego powinna
osi 150.
Najwiksza odlego powinna wyn
i
Naley uy przyrostw wartoc
wynoszcych 3 metry.
</div>
</div>
:
!
$( "#slide_dist" ).slider({
}
});
my_scripts.js
428
Rozdzia 10.
jquery UI
):
Masa zwierzcia (w kilogramach
osi 0.
Warto pocztkowa powinna wyn
osi 0.
Najmniejsza masa powinna wyn
2000.
Najwiksza masa powinna wynosi
i
Naley uy przyrostw wartoc
wynoszcych 2 kilogramy.
"></div>
:
!
$( "
$( "#slide_weight" ).slider({
" ).slider({
}
});
});
my_scripts.js
my_scripts.js
Uzupenij puste miejsca w kodzie kadej z rubryk, ktre chc mie kryptozoolodzy. Zostawili
oni dla Ciebie kilka notatek dotyczcych opcji suwakw, jakie powiniene ustawi.
):
Odlego od zwierzcia (w metrach
osi 0.
Warto pocztkowa powinna wyn
wynosi 0.
Najmniejsza odlego powinna
osi 150.
Najwiksza odlego powinna wyn
i
Naley uy przyrostw wartoc
wynoszcych 3 metry.
$( "#slide_dist" ).slider({
value:0,
min:0,
max:150,
step: 3,
430
Rozdzia 10.
jquery UI
):
Masa zwierzcia (w kilogramach
osi 0.
Warto pocztkowa powinna wyn
osi 0.
Najmniejsza masa powinna wyn
2000.
Najwiksza masa powinna wynosi
i
Naley uy przyrostw wartoc
wynoszcych 2 kilogramy.
:
!
$( " #slide_height
$( "#slide_weight" ).slider({
" ).slider({
value:0,
value:0,
min:0,
min:0,
max:6,
max:2000,
step: 0.25,
step: 2,
#height
}
});
});
my_scripts.js
my_scripts.js
jazda prbna
Jazda prbna
Dodaj kod z dugiego wiczenia z poprzednich stron do swoich plikw. Nastpnie otwrz
plik sightings_end.html w swojej ulubionej przegldarce. Nie zapomnij przetestowa suwakw
za pomoc myszy i klawiatury (klawisze ze strzakami w lewo i w prawo powinny przesuwa
suwak o warto zdefiniowanego przyrostu).
Uytkownicy mog
teraz wprowadza
dane, przecigajc
uchwyty suwakw,
a kryptozoolodzy
uzyskali o wiele
wiksz kontrol
nad jakoci danych.
432
Rozdzia 10.
jquery UI
Ale szeroko i dugo geograficzna
mog mie wartoci ujemne oraz interway
dziesitne takie jak 0,00001. Czy widget
z suwakiem obsuguje takie rodzaje liczb?
Zaostrz owek
Uzupenij kod w jQuery, tak aby pojawiy si suwaki dla szerokoci i dugoci geograficznej.
Suwak dla szerokoci geograficznej powinien mie zakres od 90 do 90 z przyrostami
wynoszcymi 0,00001. Suwak dla dugoci geograficznej powinien mie zakres od 180
do 180 z przyrostami rwnymi 0,00001.
value:0,
}
});
value:0,
}
});
my_scripts.js
zaostrz rozwizanie
Zaostrz owek
Rozwizanie
Uzupenij kod w jQuery, tak aby pojawiy si suwaki dla szerokoci i dugoci geograficznej. Suwak dla
szerokoci geograficznej powinien mie zakres od 90 do 90 z przyrostami wynoszcymi 0,00001.
Suwak dla dugoci geograficznej powinien mie zakres od 180 do 180 z przyrostami rwnymi 0,00001.
$( #slide_lat ).slider({
value:0,
min: -90,
max: 90,
step: 0.00001,
value:0,
min: -180,
max: 180,
my_scripts.js
step: 0.00001,
2.
3.
434
Rozdzia 10.
jquery UI
R
G
B
R
G
B
R
G
B
R
G
B
R
G
B
Kolor
R
G
B
Zakres kadego
z
bdzie wynosi od suwakw
0 do 255.
#red
#swatch
#green
#blue
Ponadto sekcja swatch musi
by aktualizowana kadorazowo,
kiedy uytkownik przecignie
uchwyt jednego z suwakw.
Kod
gotowy do
wysmaenia
!
!=J=!
-!
"!Q-!
"=
?Q-!
"?
?,
&12'U;0
}
-!= ?,
=?2(@;0
?
?2(@;0
1 &
2
0
form.css
Ten identyfikator
definiuje prbk stylu CSS
,
bdzie pokazywa ktra
gdy uytkownik kolor,
zm
pooenie ktrego ieni
suwaka.
}
-
#&!
&
,1 2-
990.
-
#&!
&?
,1
&
2-
990.
Kady z tych wierszy
dodaje do cieki
suwaka jego kolor.
-
#&!
&
,1 2-4
96U0.
-
#&!
&?
,1
&
2-4
96U0.
-1
#&!
&
,1 2-(9 0.
-1
#&!
&?
,1
&
2-(9 0.
W
*!
!!=+2
;
!!!"!
"
"
11
!= ?
!!&=
&
&
&
Sekcja z prbk
koloru
F
2
;
!!!"!
"
"
:
!
436
Rozdzia 10.
jquery UI
Zaostrz owek
Poniszy skrypt konfiguruje suwaki dla barwy czerwonej, zielonej i niebieskiej. Spjrz
na kady wiersz i zastanw si, co moe on robi, bazujc na tym, co ju wiesz
o jQuery i jQuery UI. Nastpnie napisz, co wedug Ciebie robi kod. Jeli nie masz
pewnoci, moesz zgadywa. Jeden z wierszy opisalimy za Ciebie.
range: "min",
max: 255,
value: 127,
slide: refreshSwatch,
change: refreshSwatch
})
Nie istniej
gupie pytania
z jQuery UI?
O:
P: Powiedziae, e w jQuery UI
P:
O:
zaostrz rozwizanie
Zaostrz owek
Rozwizanie
Poniszy skrypt konfiguruje suwaki dla barwy czerwonej, zielonej i niebieskiej. Spjrz
na kady wiersz i zastanw si, co moe on robi, bazujc na tym, co ju wiesz
o jQuery i jQuery UI. Nastpnie napisz, co wedug Ciebie robi kod. Jeli nie masz
pewnoci, moesz zgadywa. Oto nasze odpowiedzi.
orientation: "horizontal",
range: "min",
max: 255,
value: 127,
Tak ustawia warto pocztkow, aby suwak znalaz si mniej wicej w rodku.
slide: refreshSwatch,
change: refreshSwatch
});
function refreshSwatch() {
???
var green = ???
var blue = ???
var my_rgb = ???
$( "#swatch" ).???;
var red =
$( "#red_val" ).val(red );
$( "#blue_val" ).val( blue);
$( "#green_val" ).val( green);
$( "#color_val" ).val(my_rgb);
}
438
Rozdzia 10.
jquery UI
R G B
background-color:rgb(255,0,255)
Jest to jednak zaledwie podpowied do
jednego z pyta. Aby napisa ca funkcj,
bdziesz musia si troch wysili.
function refreshSwatch() {
var red =
var green =
var blue =
var my_rgb =
$( "#swatch" ).
$( "#red_val" ).val(red );
$( "#blue_val" ).val( blue);
$( "#green_val" ).val( green);
$( "#color_val" ).val(my_rgb);
}
rozwizanie wiczenia
Rozwizanie
wiczenia
$( "#color_val" ).val(my_rgb);
}
Kod
gotowy do
wysmaenia
440
Rozdzia 10.
jquery UI
Jazda prbna
Otwrz plik sightings_end.html w swojej ulubionej przegldarce. Nie zapomnij o przetestowaniu
suwakw za pomoc myszy i klawiatury (klawisze ze strzakami w lewo i w prawo powinny
powodowa przesuwanie si suwakw o wartoci ich przyrostw).
ostatni przycisk
2.
3.
4.
5.
gupie pytania
P: W kolorowych suwakach,
O:
O:
442
Rozdzia 10.
O:
jquery UI
Momencik. Oczywicie, e
poczwszy od rozdziau 1.,
korzystamy z przyciskw, ale
to jest przycisk jQuery UI oraz
element formularza HTML.
Suszna uwaga.
Uywalimy metody jQuery click oraz metody jQuery UI button, ale nie zrobilimy
wiele, jeli chodzi o wybieranie elementw formularza takich jak przycisk przesyania
danych. Oto krtki przewodnik dotyczcy wybierania takich elementw.
CELNE SPOSTRZEENIA
wiczenie
$(":password") wybiera
wszystkie pola formularza, ktre s
przeznaczone na hasa.
Napisz pojedynczy wiersz kodu, ktry po dodaniu go do pliku my_scripts.js przeksztaci obecny
przycisk w przycisk zgodny z wybranym motywem jQuery UI.
rozwizanie wiczenia
Rozwizanie Nie zapomnij o dodaniu tego wiersza do pliku my_scripts.js i przetestowaniu go po otwarciu pliku
sightings_end.html w swojej ulubionej przegldarce.
wiczenia
$( "button:submit" ).button();
Jestemy do tego
stopnia zadowoleni z Twojej
pracy, e w nastpnym
rozdziale znowu wezwiemy
Ci do pomocy.
444
Rozdzia 10.
jquery UI
wiczenie
Twj formularz wyglda wspaniale, ale na razie nie przesya adnych danych. Nauczye si jednak
dodatkowe
wszystkiego, co jest do tego potrzebne, w rozdziale 9., zastanw si wic przez chwil, jak mgby
doprowadzi ten stylowy formularz do stanu rzeczywistej funkcjonalnoci.
Folder end w kodzie, ktry pobrae do tego rozdziau, zawiera wszystko, czego potrzebujesz do
skonfigurowania i uruchomienia swojej aplikacji: pliki sightings.html, service.php oraz sightings.sql. Bdziesz
musia popracowa nad nimi troch samodzielnie, ale wanie na tym polega bycie programist WWW,
prawda? Doczylimy metody Ajaksa i formatu JSON, o ktrych uczye si w rozdziale 9., dziki czemu
formularz, ktry utworzye, bdzie mg przesya dane.
Ca konfiguracj musisz wykona we wasnym zakresie (czyli uruchomi skrypt sightings.sql albo
samodzielnie utworzy baz danych z polami z tego skryptu oraz doda metody Ajaksa i formatu JSON
do pliku my_scripts.js). Przed przejciem do rozdziau 11. bdziesz musia te doda kilka rekordw do
bazy danych. Jeli potrzebujesz odwieenia wiadomoci o MySQL, PHP i Ajaksie, nie krpuj si zajrze do
rozdziaw 8. i 9.
Do tego wiczenia nie ma rozwizania, ale jeli bdziesz mia jakiekolwiek problemy, zawsze
moesz wpa na forum tej ksiki pod adresem www.headfirstlabs.com i pogada z autorami
albo innymi czytelnikami.
Rozdzia 10.
I
U
y
r
e
u
jQ
Widget
alno do
dodaje funkcjon
y
r
kt
,
ik
dn
a
Samodzielny sk
etowej.
roci
aplikacji intern
wo czasu i up
zczdzi mnst i aktywne elementy
os
za
on
Ci
a
Pozwal
datne
dnoczenie przy
kod, tworzc je
a.
ik
kown
interfejsu uyt
tra
uery, k
teka jQ rodzaje
o
li
ib
b
a
Oficjaln ia trzy gwne go jQuery:
n
e
udostp dla podstawow ety.
g
k
id
e
z
w
c
i
y
t
w
rakcje
e
t
in
,
y
efekt
Widget button
button, ktra
Udostpnia metod
orzeniu
tw
zy
pr
a
jest pomocn
ntw takich
me
atrakcyjniejszych ele ia, przyciski
an
sy
ze
pr
ki
jak przycis
wyboru.
radiowe albo pola
Widget ker
datepic
je
nakazu
locie
epicker tworzenie w daty
t
a
d
a
d
u
u
r
S
o
J
Meto
b
i
y
terow
ci w
raz
interpre za z moliwo TML i CSS o
r
H
a
d
u
n
kod
kale
noci.
z mas
cznie n interaktyw
alnych
a
figurow
n
o
k
wbudow
o
nstw
e ma m
On tak
opcji.
446
Rozdzia 10.
Suwaki
Elementy
in
ktrymi m terfejsu uytkow
nika,
ona man
pomoc m
ip
yszy lub ulowa za
kontroluj
k
c tym sa lawiatury,
mym wpro
dane.
wadzane
Zawieraj
zdarze, one pi funkcji
ob
z
w celu p ktrych korzysta sugi
owizania
si
formularz
suwaka z
a
change o : create, start, s polem
raz stop.
lide,
11.M4XHU\Lb$3,
spotkanie kryptyd
$2
Od:
#(0$#(1
%"#%.
(
(
4(
(
"
Temat: 3##%+
Cze!
448
Rozdzia 11.
jquery i API
Jzek
Franek
wewntrz API
var map;
function initialize() {
@3
3&WFWW&3#
3
W--
var myOptions = {
zoom: 13,
center: myLatlng,
mapTypeId: google.maps.MapTypeId.ROADMAP
}
map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
google.maps.event.addListener(map, 'zoom_changed', function() {
setTimeout(moveToNewYork, 3000);
});
var marker = new google.maps.Marker({
position: myLatlng,
map: map,
title:"Hello World!"
});
google.maps.event.addListener(marker, 'click', function() {
map.setZoom(8);
});
}
function moveToNewYork() {
@3 F RFWW&3#
3
W-----
map.setCenter(NewYork);
}
To kod Google.
Nie jest tak le, jak na to wyglda. Przyjrzyjmy si
troch dokadniej temu, co si dzieje w kodzie.
450
Rozdzia 11.
jquery i API
Przypisz t zmienn
do
obiektu Google LatLng nowego
.
var map;
@3
3&WFWW&3#
3
W--
var myOptions = {
zoom: 13,
W parametrach naszego
obiektu przeka wartoci
szerokoci i dugoci
geograficznej.
center: myLatlng,
Zmiennej
map nadaj
warto
nowego
obiektu
Google Maps.
mapTypeId: google.maps.MapTypeId.ROADMAP
}
Zadeklaruj zmienn,
ktra bdzie obiektem
klasy Marker.
W parametrach
przeka wartoc
map: map,
i.
title:"Hello World!"
});
function moveToNewYork() {
Zrb to!
<!DOCTYPE html>
<html>
<head>
&GV ZW&\?38 F3LSR #?K&G
display_one.html
Utwrz miejsce
dla naszej mapy.
</div>
L # L%#+KK3#WW&LK3#K3#KS 3&GKL #G
<script src="scripts/jquery-1.7.min.js"></script>
<script src="scripts/maps.js"></script>
</body>
</html>
452
Rozdzia 11.
Docz bibliotek
jQuery.
jquery i API
Magnesiki z kodem
Poukadaj magnesiki, aby dokoczy kod funkcji o nazwie initialize. Funkcja ta utworzy
now instancj obiektu map Google Maps z uyciem parametrw zdefiniowanych w kodzie. Ten
nowy obiekt map zostanie nastpnie zastosowany w elemencie strony map_canvas. Ponadto
zaktualizuj istniejcy plik form.css z uwzgldnieniem definicji stylu dla pojemnika mapy.
#map_canvas {
map;
float
_____________ :left;
HYBRID
zoom
%W%+#,
width: ____________
$(document).ready. ____________{
var _____________
function ______________{
var latlng = new google.maps.LatLng. ____________________;
var mapOpts = {
form.css
_____________: 13,
center: latlng,
mapTypeId: google.maps.MapTypeId._____________
};
-----
initialize()
maps.js
"map_canvas"
new
#,
(function()
var _____________
map;
initialize()
function ______________{
var latlng = new google.maps.LatLng. ____________________;
-----
var mapOpts = {
form.css
_____________:
13,
zoom
center: latlng,
HYBRID
mapTypeId: google.maps.MapTypeId._____________
};
"map_canvas"
new
map = ___________google.maps.Map(document.getElementById(_____________),
mapOpts);
}
initialize();
});
maps.js
Nie istniej
gupie pytania
O:
454
Rozdzia 11.
O:
jquery i API
Jazda prbna
Zaktualizuj swj plik maps.js funkcj initialize, ktr uoye z magnesikw. Pamitaj te
o uwzgldnieniu pliku maps.js w kodzie strony display_one.html. Nastpnie otwrz j w swojej
przegldarce. Cay kod powinien by uruchomiony na Twoim serwerze, w zwizku z czym w pasku adresu
powinien by widoczny URL rozpoczynajcy si od http://, a nie lokalna cieka dostpu do pliku.
$my_array = array();
array_push($my_array, array('my_key' => 'my_val'));
echo json_encode($my_array);
Serwer WWW przetwarza dania
strony, uruchamia skrypty PHP
i zwraca zawarto HTML.
6HUZHU
Dane
%D]DGDQ\FK0\64/
3U]HJOGDUND
<? php
>?
6HUZHU:::
6HUZHUED]\
GDQ\FK
JSON
jest
Baza danych czsto staci
po
przechowywana w ardym,
plikw na dysku tw e musi
chocia niekonieczni
tak by.
W tym rozdziale cay kod PHP i SQL napisalimy za Ciebie. Jeli tylko masz baz
danych MySQL z rozdziau 10., moesz przej dalej! Pozostay kod SQL i PHP
znajduje si w pliku do pobrania dla biecego rozdziau; moesz go spokojnie
uruchomi na swoim serwerze. Cao kodu PHP oraz SQL mona pobra pod
adresem ftp://ftp.helion.pl/przyklady/jquerg.zip.
456
Rozdzia 11.
jquery i API
Magnesiki z kodem
Poukadaj magnesiki w taki sposb, aby zaktualizowane pliki display_one.html, forms.css oraz
maps.js pobieray dane w formacie JSON i wywietlay je na ekranie. Dodaj elementy div i ul
do przechowywania danych, CSS do nadania stylu listom oraz funkcj pobierajc dane za
porednictwem formatu JSON, ktra wstawi na list kad z kryptyd.
function getAllSightings(){
!W @L#%#3LW&&W%WAAAAAAAAAAAAAA
if (_________________length > 0) {
$("#sight_list")_________;
maps.js
________(json.sightings,function() {
@3 33+%?3?Z3S+%#
var $li = $("<li />");
______________
"sightings"
"map_canvas"
$li.addClass(_____________);
json.sightings.
$li.attr('id', this['id']) ;
$li.appendTo(______________);
});
}
#sight_nav{
li.sightings:hover {
float:left;
});
$li.html(info);
}
ul#sight_list{
width:150px;
form.css
padding:0px;
<div class="ui-widget-content form_pad">
margin:0px;
.empty()
<div id="sight_nav">
li.sightings {
$.each
#3??W+#,
background:#7B7382;
</ul>
</div>
color:#fff;
</div>
________________
}
list-style:none;
________________
display_one.html
background:#eee;
"sight_list"
"#sight_list"
color:#000;
function(json)
function getAllSightings(){
!W @L#%#3LW&&W%WAAAAAAAAAAAAAA
function(json)
if (_________________length
> 0) {
json.sightings.
$("#sight_list")_________;
.empty()
maps.js
________(json.sightings,function()
{
$.each
@3 33+%?3?Z3S+%#
var $li = $("<li />");
$li.html(info);
______________
"sightings"
$li.addClass(_____________);
#sight_nav{
$li.attr('id', this['id']) ;
$li.appendTo(______________);
"#sight_list"
});
float:left;
}
ul#sight_list{
width:150px;
});
padding:0px;
margin:0px;
}
li.sightings {
<div class="ui-widget-content form_pad">
#3??W+#,
background:#7B7382;
"map_canvas"
<div id= ______________></div>
<div id="sight_nav">
color:#fff;
"sight_list"
<ul id= ______________>
list-style:none;
________________
</ul>
}
</div>
________________
li.sighting
s:hover {
</div>
background:#eee;
color:#000;
display_one.html
form.css
458
Rozdzia 11.
jquery i API
Jazda prbna
Zaktualizuj swj plik maps.js funkcj getAllSightings, ktr wanie ukoczye.
Ponadto dodaj jej wywoanie przy kocu funkcji initialize. Nastpnie otwrz
w przegldarce plik display_one.html. Zakadamy przy tym, e w rozdziale 10. dodae
do swojej bazy kilka zwierzt. Jeli nie, zrb to teraz. Pamitaj, e cay kod powiniene
uruchamia na serwerze WWW, tak wic adres URL powinien zawiera http://, a nie
ciek dostpu do lokalnego pliku.
@3
3
WFWW&3#
3
W---
wie my_marker
Zdefiniuj obiekt o naz u Google Marker.
ekt
obi
cj
tan
bdcy ins
y
Zdefiniowany wczeniej obiekt klas
LatLng jako parametr
Wstpnie
map: map,
zdefiniowany obiek
t
map. Widziae &+ZX^3 R ZS9R?XF?Z3JX
go ju wczeniej
w akcji.
ujce kolejne
});
menty konfigur
Przeka argu iektu my_marker.
ob
waciwoci
markera,
Ustalamy tu pooenie go doda,
ey
nal
iej
jak
do
map,
oraz tytu punktu.
460
Rozdzia 11.
jquery i API
Zaostrz owek
Zaktualizuj swoj funkcj getAllSightings, dodajc do pozycji listy suchacza zdarzenia kliknicia, zanim
jeszcze ta pozycja znajdzie si na licie. Zdarzenie to powinno wywoywa funkcj o nazwie getSingleSighting
pobierajc jeden parametr identyfikator wskazanej klikniciem obserwacji. Ta nowa funkcja powinna pobra
informacj o kliknitej pozycji i wstawi j na map w postaci markera, korzystajc z jej waciwoci z szerokoci
i dugoci geograficzn.
function getAllSightings(){
!W @L#%#3LW&&W%W9LS
if (json.sightings.length > 0) {
$("#sight_list").empty();
$.each(json.sightings,function() {
@3 33+%?3?Z3S+%#
var $li = $("<li />");
$li.html(info);
$li.addClass("sightings");
$li.attr('id', this['id']) ;
$li.click(function(){
______________________ this['id'] );
});
$li.appendTo("#sight_list");
});
}
});
}
function getSingleSighting(______________________){
!W @L#%#3LWW&W%W??9LS
if (json.sightings.length > 0) {
__________________________________
var loc = new google.maps.LatLng(this['lat'], this['long']);
var my_marker = new google.maps______________________({
______________________loc,
map: map,
title:this['type']
});
_________________setCenter(loc, 20);
});
}
});
}
maps.js
zaostrz rozwizanie
Zaostrz owek
Rozwizanie
function getAllSightings(){
!W @L#%#3LW&&W%W9LS
if (json.sightings.length > 0) {
$("#sight_list").empty();
$.each(json.sightings,function() {
@3 33+%?3?Z3S+%#
var $li = $("<li />");
$li.html(info);
$li.addClass("sightings");
$li.attr('id', this['id']) ;
$li.click(function(){
getSingleSighting( this['id'] );
});
$li.appendTo("#sight_list");
});
}
});
}
function getSingleSighting( id ){
!W @L#%#3LWW&W%W??9LS
if (json.sightings.length > 0) {
$.each(json.sightings,function() {
map: map,
title:this['type']
});
map. setCenter(loc, 20);
});
}
});
}
462
Rozdzia 11.
maps.js
jquery i API
Jazda prbna
Zaktualizuj swj plik maps.js funkcjami getAllSightings oraz getSingleSighting,
ktre wanie ukoczye. Nastpnie otwrz plik display_one.html w przegldarce
tak jak poprzednio w pasku adresu powinno by http://.
Kod
gotowy do
wysmaenia
<!DOCTYPE html>
<html>
<head>
&GV ZW&\?38 F3LSR #?K&G
<link type="text/css" href="style/form.css" rel="stylesheet" />
<link type="text/css" href="jquery-ui-1.8.16.custom/css/sunny/
jquery-ui-1.8.16.custom.css"/>
</head>
<body>
<div class="ui-widget-header ui-corner-top form_pad">
%-GVR38 F3LSR #?K%-G
</div>
<div class="ui-widget-content form_pad">
<div id="map_canvas"></div>
anie
Dodaj list rozwijan, ktra zost
<div id="sight_nav">
.
rzt
zwie
i
ajam
rodz
na
enio
wyp
<select id="ddlTypes">
#@3&9GV ZF8 3K#G
</select>
<ul id="sight_list"></ul>
</div>
Docz API Google Maps.
</div>
L # L%#+KK3#WW&LK3#K3#KS 3&GKL #G
<script src="scripts/jquery-1.7.min.js"></script>
<script src="scripts/maps.js"></script>
Docz bibliotek jQuery.
</body>
cz plik maps.js.
Do
</html>
464
Rozdzia 11.
display_type.html
jquery i API
Magnesiki z kodem
Poukadaj magnesiki z kodem, aby dokoczy funkcj getAllTypes. Funkcja ta bdzie odwoywa si do
pliku service.php (ktry jest doczony do plikw, jakie pobrae do biecego rozdziau) w celu uzyskania
z bazy danych listy rnych rodzajw zwierzt. Nastpnie rodzaje te powinny zosta dodane do listy rozwijanej
o identyfikatorze ddlTypes. Napisz take suchacza zdarze dla tej listy, ktry bdzie czeka na zdarzenie
change i wywietli alarm z wybran przez uytkownika wartoci. Na koniec poniewa w naszych dwch
plikach HTML korzystamy z tego samego pliku maps.js dodaj do funkcji initialize logik sprawdzajc,
czy lista rozwijana istnieje. Jeli tak, wywoaj funkcj getAllTypes; jeli nie, funkcj getAllSightings.
function initialize(){
.
.
map = new google.maps.Map(document.getElementById(________________), mapOpts);
if ( $('#ddlTypes').length ) {
___________________
}else{
___________________
}
}
function getAllTypes(){
!W @L#%#3LWW%W#9LSA#
if (___________________creature_types.length > 0) {
$.each(json_types.creature_types,___________________
var info = this['type'];
var $li = ___________________
$("<option />");
$li.html(info);
$li___________________("#ddlTypes");
getAllSightings();
});
}
});
"map_canvas"
getAllTypes();
.appendTo
json_types.
__________________change(function() {
function() {
if($(this).val() != ""){
alert( $(this).val() );
}
$('#ddlTypes').
});
maps.js
function initialize(){
.
.
map = new google.maps.Map(document.getElementById(______________),
mapOpts);
"map_canvas"
if ( $('#ddlTypes').length ) {
Aby sprawdzi, czy dany
element istnieje, uyj
waciwoci .length.
getAllTypes();
}else{
getAllSightings();
Za pomoc formatu JS
pobierz z bazy danych ON i PHP
rodzaje
zwierzt.
}
function getAllTypes(){
$.each(json_types.creature_types,_____________
function() {
var info = this['type'];
Ustaw tekst dla var $li = _________________
$("<option />");
elementu listy
$li.html(info);
rozwijanej.
.appendTo
$li___________("#ddlTypes");
});
}
});
}
$('#ddlTypes').
_________________change(function()
{
if($(this).val() != ""){
alert( $(this).val() );
}
});
Warto wybranego
elementu listy.
maps.js
466
Rozdzia 11.
jquery i API
Jazda prbna
Zaktualizuj swj plik maps.js, dodajc do niego funkcj getAllTypes i suchacza zdarzenia change
dla listy rozwijanej. Uzupenij te funkcj initialize, korzystajc z tej nowej logiki. Nastpnie
otwrz plik display_one.html w swojej przegldarce, tak jak poprzednio za pomoc http://.
No i przyapaa nas.
Musimy tak zaktualizowa nasz kod, ebymy mogli
pobiera informacje z bazy danych, kiedy zmieni si
lista rozwijana, zamiast po prostu pokazywa w oknie
alarmowym rodzaj zwierzcia.
Dopiero wtedy bdziemy mogli zaznaczy je na licie.
Kiedy ju to zrobimy, powinnimy da rad take
trzeciemu zadaniu. Przygotuj si za chwil rzucimy si
na gbok wod i poskadamy wszystko razem.
Dugie wiczenie
Uzupenij puste wiersze kodu, aby utworzy funkcj getSightingsByType. Funkcja ta powinna przyjmowa
jeden parametr: rodzaj zwierzcia, ktre ogldasz. Powinna ona te pobiera dane w formacie JSON, przechodzi
w ptli przez wszystkie zwrcone zwierzta (jeli jakie s) i dla kadego z nich umieszcza punkt na mapie.
Oprcz tego utwrz dwie zmienne globalne tablic o nazwie markerArray oraz nowy obiekt Google Maps
klasy LatLngBounds o nazwie bounds. Napisz te funkcj, ktra przed dodaniem nowych punktw wyczyci
stare, jeli ulega zmianie lista rozwijana.
var markersArray = [];
var bounds = new google.maps________________;
function getSightingsByType(type){
!W @L#%#3LWW%W###9LS
{
if (_________sightings.length > 0) {
$('#sight_list').empty();
$.each(json.sightings,function() {
var loc = new google.maps______________(this['lat'], this['long']);
var opts = {
map: map,
position:________________
};
468
Rozdzia 11.
jquery i API
maps.js
Po dodaniu dwch nowych zmiennych globalnych i kilku funkcji Google Maps moesz ju wstawia na
map i usuwa z niej markery, kiedy zmieni si lista rozwijana. Kiedy do mapy dodawane s markery, s
one umieszczane te w tablicy markerArray i uywane do poszerzenia granic mapy. W ten sposb za
pomoc funkcji fitBounds mapa automatycznie zmienia swoje rozmiary, aby obj wszystkie punkty.
Z kolei funkcja getSightingsByType wywoywana obecnie przy kadej zmianie listy rozwijanej
dodaje markery do mapy, a zaobserwowane zwierzta do listy widocznej na stronie.
function getSightingsByType(type){
!W @L#%#3LWW%W###9LS
{
Pobierz dane za pomoc
formatu JSON.
if ( json.sightings.length > 0) {
$('#sight_list').empty();
$.each(json.sightings,function() {
Do naszego obiektu
bounds dodaj biece
wartoci szerokoci
i dugoci geograficznej.
map.fitBounds(bounds);
}
});
}
470
Rozdzia 11.
jquery i API
$('#ddlTypes').change(function() {
if($(this).val() != ""){
clearOverlays();
getSightingsByType ( $(this).val() );
Przeka naszej
w parametrze funkcji
wa
listy rozwijane rto
j.
});
function clearOverlays() {
if (markersArray) {
3 R 3
markersArray[i].setMap(null);
}
markersArray.length = 0;
bounds = null;
bounds = new .google.maps. LatLngBounds();
}
Zresetuj take
zmienn bounds.
maps.js
Porady maniaka
jazda prbna
Jazda prbna
Zaktualizuj swj plik maps.js nowym kodem, ktry wanie utworzye. Nastpnie otwrz
w przegldarce stron display_type.html i wybierz z listy kilka rnych zwierzt.
472
Rozdzia 11.
jquery i API
WYSIL
SZARE KOMRKI
Wiesz ju, jak programowa w jQuery aktywne elementy. Jak ta wiedza moe Ci pomc
w zrealizowaniu ostatniego zadania z listy?
Nie istniej
gupie pytania
P:
O:
O:
cay wiat?
O:
O:
P:
P: A co ze znajdowaniem miejsca
O: Co takiego nazywa si
O:
content: contentString
});
a
Mapa bdzie nasuchiwa zdarzenier.
mark
my_
kcie
obie
ym
nasz
click w
});
Porady maniaka
474
Rozdzia 11.
jquery i API
Zaostrz owek
Uzupenij brakujce fragmenty kodu w celu dokoczenia funkcji getSightingsByType, ktra
doda funkcjonalno kliknicia zarwno do markerw na mapie, jak i do pozycji na licie. Utwrz
take zmienn globaln o nazwie info_window, ktra bdzie now instancj obiektu Google Maps
InfoWindow z domyln zawartoci bdc pustym acuchem tekstowym.
var info_window = new google.maps________________({content: ''});
function________________(type){
!WAAAAAAAAAAAAAAAA3LWW%W###9LS
if (json.sightings.length > 0) {
$('#sight_list').empty();
$.each(json.sightings,function() {
@3 ?&WJX+%AAAAAAAAA8 GHRX+%%W%
33+%FW%& +%L& 8 G
Z RXWW +%&3J9WXWW +%AAAAAAAAA
var loc = new _____________________(this['lat'], this['long']);
var opts = {
map: map,
position:_____________
};
var marker = new google.maps _____________(opts);
markersArray.push(marker);
google.maps.event_____________(marker, 'click', function() {
info_window.content = info;
info_window.open(map, marker);
});
var $li = $("<li />");
!&%&33+%?3?Z3S+%#
$li.addClass("sightings");
$li_________(function(){
info_window.content = info;
info_window.open(map, _________);
});
$li.appendTo("#sight_list");
_________ extend(loc);
});
map _____________ (bounds);
}
});
}
maps.js
zaostrz rozwizanie
Zaostrz owek
Rozwizanie
if (json.sightings.length > 0) {
$('#sight_list').empty();
$.each(json.sightings,function() {
distance'
@3 ?&WJX+%8 GHRX+%%W%
Dodaj suchacza
zdarzenia click do
markera na mapie.
};
var marker = new google.maps .Marker(opts);
markersArray.push(marker);
google.maps.event .addListener (marker, 'click', function() {
info_window.content = info;
info_window.open(map, marker);
});
var $li = $("<li />");
!&%&33+%?3?Z3S+%#
$li.addClass("sightings");
$li.click (function(){
info_window.content = info;
info_window.open(map, marker );
Dodaj do listy su
zdarze otwieraj chacza
mapie okno InfoWcego na
indow.
});
$li.appendTo("#sight_list");
bounds.extend(loc);
});
map .fitBounds .(bounds);
}
});
maps.js
476
Rozdzia 11.
jquery i API
Jazda prbna
Zaktualizuj swj plik maps.js nowym kodem, ktry napisae na poprzedniej stronie.
Nastpnie otwrz w przegldarce stron display_type.html i wybierz kryptyd z listy.
Kliknij marker albo pozycj listy, aby uzyska wicej wiadomoci na temat obserwacji.
Udao si!
Na zaledwie kilku krtkich stronach udao Ci si utworzy w peni funkcjonaln
witryn zaprogramowan w kilku jzykach PHP, SQL-u, JavaScripcie i jQuery
a take poczy Google Maps API z Ajaksem i formatem JSON w celu wywietlania
do zoonych danych. Z pewnoci wyzwanie to nie byo bahe!
478
Rozdzia 11.
jquery i API
Krzywka API
Poziomo
Pionowo
rozwizanie krzywki
480
Rozdzia 11.
jquery i API
aprawd
o tak n (albo
t
ji
c
a
k
apli
tw
u,
owania
ogramis
program rzez innych pr wojego program
y
js
fe
r
h
p
s
c
y
y
o
Inte
n
n
d
io
stpn
klepa
oraz r
kod udo try moesz w ch, obiektw
y
k
n
a
),
d
y
firm
z ich
zysta
tw
aby kor
y obiek
struktor ch obiektw.
n
o
usug.
k
j
ji ty
wiera
instanc
y te za
z uywa
Interfejs jce tworzenie tancj, moes i oraz metod
ia
s
c
umoliw sz ju tak in ich waciwo
k
a
t
m
s
y
y
z
d
s
w
.
Kie
kodzie
biektem
w swoim ych z danym o
n
skojarzo
API
482
Rozdzia 11.
'RGDWHN$2VWDWNL
wszystkie drobiazgi
Metody jQuery
.add()
.addClass()
.after()
jQuery.ajax()
.ajaxComplete()
.ajaxError()
jQuery.ajaxPrefilter()
.ajaxSend()
jQuery.ajaxSetup()
.ajaxStart()
.ajaxStop()
.ajaxSuccess()
.andSelf()
.animate()
.append()
.appendTo()
.attr()
.before()
.bind()
.blur()
jQuery.browser
.change()
.children()
.clearQueue()
.click()
.clone()
.closest()
jQuery.contains()
.contents()
.context
.css()
jQuery.cssHooks
.data()
jQuery.data()
.dblclick()
deferred.always()
deferred.done()
deferred.fail()
484
Dodatek A
deferred.isRejected()
deferred.isResolved()
deferred.pipe()
deferred.promise()
deferred.reject()
deferred.rejectWith()
deferred.resolve()
deferred.resolveWith()
deferred.then()
.delay()
.delegate()
.dequeue()
jQuery.dequeue()
.detach()
.die()
jQuery.each()
.each()
.empty()
.end()
.eq()
.error()
jQuery.error
event.currentTarget
event.data
event.isDefaultPrevented()
event.
isImmediatePropagationStopped()
event.isPropagationStopped()
event.namespace
event.pageX
event.pageY
event.preventDefault()
event.relatedTarget
event.result
event.
stopImmediatePropagation()
event.stopPropagation()
event.target
event.timeStamp
event.type
event.which
jQuery.extend()
.fadeIn()
.fadeOut()
.fadeTo()
.fadeToggle()
.filter()
.find()
.first()
.focus()
.focusin()
.focusout()
jQuery.fx.interval
jQuery.fx.off
jQuery.get()
.get()
jQuery.getJSON()
jQuery.getScript()
jQuery.globalEval()
jQuery.grep()
.has()
.hasClass()
jQuery.hasData()
.height()
.hide()
jQuery.holdReady()
.hover()
.html()
jQuery.inArray()
.index()
.innerHeight()
.innerWidth()
.insertAfter()
.insertBefore()
ostatki
.offsetParent()
.one()
.outerHeight()
.outerWidth()
jQuery.param()
.parent()
.parents()
.parentsUntil()
jQuery.parseJSON
jQuery.parseXML()
.position()
jQuery.post()
.prepend()
.prependTo()
.prev()
.prevAll()
.prevUntil()
.promise()
.prop()
jQuery.proxy()
.pushStack()
.queue()
jQuery.queue()
.ready()
.remove()
.removeAttr()
.removeClass()
.removeData()
jQuery.removeData()
.removeProp()
.replaceAll()
.replaceWith()
.resize()
.scroll()
.scrollLeft()
.scrollTop()
.select()
.serialize()
.serializeArray()
.show()
.siblings()
.size()
.slice()
.slideDown()
slideToggle()
.slideUp()
.stop()
jQuery.sub()
.submit()
jQuery.support
.text()
.toArray()
.toggle()
.toggle()
.toggleClass()
.trigger()
.triggerHandler()
jQuery.trim()
jQuery.type()
.unbind()
.undelegate()
jQuery.unique()
.unload()
.unwrap()
.val()
jQuery.when()
.width()
.wrap()
.wrapAll()
.wrapInner()
486
Dodatek A
ostatki
>
?!@
?*4
3B
http://ajax.googleapis.com/ajax/libs/jquery/1.7/jquery.min.js
' /
3B
http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.7.min.js
!#
3B
1
'
72
http://code.jquery.com/jquery-1.7.min.js
http://code.jquery.com/jquery-1.7.js (wersja rdowa)
Adresy te moesz docza do swoich aplikacji, zamiast kadorazowo pobiera kopi biblioteki jQuery.
metoda noConflict
Technika ta jest szczeglnie przydatna w poczeniu z metod .ready, ktra potrafi nadawa aliasy
obiektom jQuery, poniewa w wywoaniu zwrotnym przekazywanym do tej metody moemy korzysta
ze znaku $ bez obaw o pniejsze wystpienie konfliktw:
<script type="text/javascript" src="other_lib.js"></script>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript">
$.noConflict();
jQuery(document).ready(function($) {
KKVS39XLR?S9 RI 9F3Z3R9!
});
KKVS39XLR?#Z3JL%88&R9F3S\LL%Z3R9!
</script>
Ze sposobu tego bdziesz musia korzysta, jeli masz zamiar uywa innych bibliotek JavaScriptu,
w ktrych znak dolara zastosowano w roli odwoania. Jeeli na swoich stronach korzystasz wycznie
z jQuery, nie bdziesz musia stosowa tej metody, nawet gdy do kodu doczysz wiele rnych wtyczek.
488
Dodatek A
ostatki
kolejki
Kiedy powysza instrukcja zostanie wywoana, element od razu zacznie si wsuwa do gry, ale pojawienie si
kolorw zostanie odoone w kolejce fx i zostanie wywoane dopiero wtedy, gdy zakoczy si wsuwanie.
Metoda .queue pozwala na bezporednie manipulowanie kolejk funkcji. Szczeglnie przydatne jest
uruchamianie tej metody wraz z wywoaniem zwrotnym, co umoliwia dodawanie nowych funkcji na kocu kolejki.
Dziaanie takie przypomina wywoywanie funkcji zwrotnej z metod animujc, jednak nie wymaga, aby wywoanie
miao miejsce w czasie wykonywania si animacji.
$('#my_element').slideUp();
$('#my_element').queue(function() {
3& 3LS3Z3RLZ3
$(this).dequeue();
});
Zwr uwag na fakt, e kiedy dodajemy funkcj za pomoc metody .queue, powinnimy pamita o wywoaniu
w pewnym momencie metody .dequeue, eby wykonaa si funkcja z kolejnego wiersza.
W jQuery 1.4 wywoywana funkcja bya przekazywana jako pierwszy argument nastpnej funkcji, ktra po
automatycznym wywoaniu usuwaa z kolejki nastpny element, dziki czemu kolejka przesuwaa si dalej.
Sposb uycia takiego kolejkowania przedstawia si nastpujco:
$("#test").queue(function(next) {
KK93SLXZ I8
next();
});
Domyln kolejk w jQuery jest fx. Jest ona standardowo uywana przez metod .animate i wszystkie inne funkcje,
ktre j wywouj.
Uwaga: Jeli uywasz kolejki niestandardowej, musisz rcznie zdejmowa z niej funkcje za pomoc metody
.dequeue nie uruchamiaj si one automatycznie, tak jak to ma miejsce w przypadku domylnej kolejki fx!
490
Dodatek A
ostatki
6. Walidacja formularzy
Jedn z bardzo wanych funkcji, na ktrych opisanie nie mielimy ju miejsca, jest walidacja formularzy
za pomoc jQuery po stronie klienta, czyli w przegldarce. W rozdziaach 9., 10. i 11. mielimy do
czynienia z niewielkim fragmentem procesu walidacji za pomoc PHP po stronie serwera, zanim nasze
dane zostay wstawione do bazy. Walidacja po stronie serwera rwnie jest bardzo wana i zdecydowanie
zalecana. le napisana instrukcja insert albo select wykonana na Twojej bazie mogaby ujawni o wiele
wicej danych, ni by sobie tego yczy.
Powrmy jednak do walidacji po stronie klienta
Istnieje wiele wtyczek jQuery dedykowanych walidacji formularzy. Jedn z naszych ulubionych jest
stosownie nazwana wtyczka Validation, ktr mona pobra std: http://docs.jquery.com/Plugins/validation.
Wtyczka ta pozwala na utworzenie dla kadego elementu formularza serii regu, dziki czemu proces
walidacji mona dostosowa do wasnych potrzeb, a take mona ograniczy rodzaj danych, ktre mog
by przyjmowane przez formularz. Reguy te mog dotyczy ustalenia minimalnych i maksymalnych
dugoci pl formularza lub te sprawdzenia, czy wypeniono pola wymagane, czy wprowadzony adres
e-mail jest poprawny itd. Oto dwa przykady z witryny jQuery:
Okrela elementy name i email jako wymagane (z uyciem skrtu dla pierwszej reguy), a take sprawdza
poprawno adresu e-mail (za pomoc literau obiektu).
$(".selector").validate({
rules: {
KK W9J3# 3Z333 9 ?+ 94
name: "required",
KK W9J3ZJ3
email: {
required: true,
email: true
}
}
});
Dodaje dla pola regu wymagalnoci (required) oraz minimaln dugo (minlength) rwn 2, a take dla
obu regu definiuje niestandardowe komunikaty.
$("#myinput").rules("add", {
required: true,
minlength: 2,
messages: {
required: "Pole wymagane",
&W%+S9 3V ZF# F3?Z# Z3SS4F3W3L%Z3RIF
}
});
UI effects
Animacje kolorw
Animacje kolorw rozszerzaj funkcj animate o moliwo animowania barw. S one szeroko
uywane w funkcjonalnoci przejcia klas i potrafi animowa kolory w nastpujcych waciwociach:
backgroundColor
borderBottomColor
borderLeftColor
borderRightColor
borderTopColor
color
outlineColor
*!
Przejcia klas rozszerzaj podstawowe API klas o moliwo animowania przej midzy dwoma
rnymi klasami. Wymienione poniej metody jQuery zostay zmienione przez jQuery UI, aby mogy
przyjmowa trzy dodatkowe parametry: speed, easing (opcjonalnie) oraz callback.
addClass (klasa)
Dodaje okrelon klas, jeli jej nie ma; usuwa okrelon klas, jeli ta istnieje.
FL%&38\L3&33F3&33
<
/!
Zaawansowane funkcje easingu s doczone do gwnej biblioteki efektw i stanowi cz funkcji easingu
napisanych pocztkowo przez Roberta Pennersa na potrzeby jzyka ActionScript dla Flasha. Kade z nich
jest seri rwna matematycznych zaprojektowanych w celu zapewnienia wikszej pynnoci i dokadnoci
animowania obiektw. Oto lista wszystkich funkcji easingu:
492
linear
easeInQuart
easeInExpo
easeInBack
swing
easeOutQuart
easeOutExpo
easeOutBack
jswing
easeInOutQuart
easeInOutExpo
easeInOutBack
easeInQuad
easeInQuint
easeInCirc
easeInBounce
easeOutQuad
easeOutQuint
easeOutCirc
easeOutBounce
easeInOutQuad
easeInOutQuint
easeInOutCirc
easeInOutBounce
easeInCubic
easeInSine
easeInElastic
easeOutCubic
easeOutSine
easeOutElastic
easeInOutCubic
easeInOutSine
easeInOutElastic
Dodatek A
ostatki
domknicia
%
/!
!
+
!!
%
!
/!
/!
%
%
/!
% !
Zakrcone, nie?
Domknicia w duej mierze bazuj na zakresach wanoci zmiennych i obiektw. Zakres
wanoci odnosi si do tego, w ktrych miejscach obiekty, zmienne i funkcje s tworzone oraz
dostpne i w jakim kontekcie s wywoywane. Zasadniczo obiekty, zmienne oraz funkcje mog by
definiowane w zakresie wanoci lokalnym albo globalnym.
Zakres lokalny: Mamy z nim do czynienia wtedy, kiedy co zostaje zdefiniowane i jest dostpne
tylko w okrelonej czci kodu, na przykad wewntrz funkcji.
Zakres globalny: W przeciwiestwie do zakresu lokalnego, kiedy co jest globalne, bdzie
dostpne z dowolnego miejsca w kodzie.
Wemy pod rozwag nastpujcy kod:
function func1(x) {
var tmp = 3;
function func2(y) {
3& ,#
}
func2(10);
}
func1(2);
494
Dodatek A
ostatki
Tak samo i tutaj zmienna tmp znajduje si w lokalnym zakresie wanoci, ale ju funkcja func2
znajduje si w zakresie globalnym. Powysza funkcja take wywoa okno alarmowe z wartoci 16,
poniewa func2 cigle moe odwoywa si do zmiennych x oraz tmp, chocia nie znajduje si ju
bezporednio w tym samym zakresie wanoci.
Jako e zmienna tmp nadal przebywa wewntrz domknicia funkcji func2, to przy kadym wywoaniu
tej funkcji take ta zmienna bdzie inkrementowana.
Istnieje moliwo utworzenia wikszej liczby funkcji domknitych dziki zwrceniu ich listy albo
przypisaniu ich do zmiennych globalnych. Zarwno jedno, jak i drugie rozwizanie bdzie si odnosi
do tego samego x oraz tego samego tmp; nie utworz one swoich kopii.
10. Szablony
Szablony jQuery nadal s dostpne w wersji beta, ale stanowi one atrakcyjn przysz
funkcjonalno, ktra umoliwi tworzenie elastycznych witryn bez duych iloci kodu HTML albo
jQuery. S one zaprojektowane do pobierania danych i wizania ich z pewnym znacznikiem
szablonu, dziki czemu mona konsekwentnie uywa tego samego znacznika do wywietlania
danych o znacznym pokrewiestwie.
Moesz si z nimi zapozna tutaj: http://api.jquery.com/category/plugins/templates/.
496
Dodatek A
'RGDWHN%.RQILJXUDFMDURGRZLVNDSURJUDPLVW\F]QHJR
Przygotuj si do
przyszych sukcesw
Jeli si tego naucz
odpowiednio wczenie,
to wyprzedz wszystkich
innych...
6HUZHU
6HUZHU:::
6HUZHUED]\
GDQ\FK
W rodowisku
programistycznym PHP
Twj lokalny komputer
dziaa jako serwer na
potrzeby uruchamiania
skryptw PHP.
498
Dodatek B
Zapisz ten plik w katalogu, z ktrego korzysta Twj serwer WWW. W systemie Windows jest to zazwyczaj
C:\inetpub\wwwroot\ (dla IIS)
albo
C:\Program Files (x86)\Apache Software Foundation\Apache2.2\htdocs (dla Apache).
W Macu bdzie to zwykle co podobnego do
/Users/twojanazwa/sites/.
Jeli sprbujesz otworzy ten plik w przegldarce, wpisujc http://localhost/info.php, to jeeli masz zainstalowane PHP,
powiniene zobaczy co takiego:
To jest numer wersji
PHP, ktr masz
zainstalowan.
To wanie tu
zobaczysz MySQL.
Jeeli polecenie zadziaa, znaczy to, e MySQL jest zainstalowany. Aby okreli wersj, wpisz:
mysql
5#*(6#"76
6
Jeli to
polecenie
zadziaa,
to znaczy,
e masz
zainstalowany
MySQL.
500
Dodatek B
$ cd /usr/local/mysql
$ mysql
H&L%
3??F% W
Your MySQL connection id is 3
Server version: 5.0.51b MySQL Community Server (GPL)
#%&# % %&##LL&3 %89
mysql>
instalacja php
Twj serwer WWW zosta skonfigurowany w taki sposb, aby uruchamia si automatycznie po wczeniu
komputera. Moesz to jednak zmieni, zatrzymujc go i ponownie uruchamiajc w oknie dialogowym Panel
sterowania/Narzdzia administracyjne/Usugi, gdzie bdzie widoczny jako Apache2.2.
Jeli powysze instrukcje nie zadziaay w Twoim przypadku, sprbuj ponownie albo wpisz w swojej ulubionej
wyszukiwarce haso Instalacja Apache pod Windows, aby uzyska wicej pomocy.
Instalacja PHP
Przejd na stron http://www.php.net/downloads.php albo http://windows.php.net/download/, jeli
korzystasz z Windows.
Podobnie jak w przypadku Apache, jeli uywasz Windows, zalecamy, aby pobra wersj instalatora
dla tego wanie systemu. Jeli masz Apache, pobierz plik php-5.2.17-Win32-VC6-x86.msi. Jeeli
uywasz IIS, wybierz plik php-5.3.6-Win32-VC9-x86.msi. Pliki te automatycznie zainstaluj PHP
po tym, jak je zapiszesz i uruchomisz.
502
Dodatek B
Jeli jeszcze tego nie zrobie, utwrz nowy skrypt o nazwie info.php i wpisz w nim nastpujc instrukcj:
#%##%#G
Zapisz plik w katalogu, z ktrego korzysta Twj serwer WWW. W systemie Windows jest to zwykle C:\inetpub\wwwroot\
(dla IIS) albo C:\Program Files (x86)\Apache Software Foundation\Apache2.2\htdocs (dla Apache).
W Macu zazwyczaj jest to /Users/twojanazwa/sites/.
Jeli sprbujesz teraz otworzy ten plik w przegldarce, wpisujc: http://localhost/info.php,
Jeeli sposb ten nie
to jeeli PHP zosta zainstalowany, powiniene zobaczy co takiego1.
1 Instalator PHP dopisuje w pliku konfiguracyjnym serwera Apache httpd.conf cieki
dostpu do katalogu PHP oraz do biblioteki php5apache2_2.dll. Jeli po wpisaniu adresu
http://localhost/info.php informacje o PHP nie wywietlaj si, naley sprawdzi, czy
cieki w tym pliku zostay prawidowo okrelone. Ostatnie wiersze w pliku httpd.conf
powinny wyglda na przykad tak:
#BEGIN PHP INSTALLER EDITS REMOVE ONLY ON UNINSTALL
PHPIniDir "C:\PHP\"
LoadModule php5_module "C:\Program Files (x86)\Apache Software Foundation\
Apache2.2\bin\php5apache2_2.dll"
#END PHP INSTALLER EDITS REMOVE ONLY ON UNINSTALL
Zaoono przy tym, e biblioteka php5apache2_2.dll zostaa skopiowana z katalogu PHP
do katalogu z binariami Apache przyp. tum.
zadziaa, sprbuj
jeszcze raz albo wpisz
w swojej ulubionej
wyszukiwarce
Instalacja PHP
Apache [IIS] pod
Windows.
Instalacja MySQL
Instrukcja i rozwizywanie problemw
Potrzebny jest jeszcze MySQL, zatem zabierzmy si za jego pobieranie oraz instalowanie. Oficjaln nazw darmowej wersji
serwera MySQL RDBMS jest obecnie MySQL Community Server.
Poniej zamieszczono list czynnoci koniecznych do zainstalowania MySQL w systemie Windows albo Mac OS X. Celem
tego opisu nie jest zastpienie znakomitej instrukcji znajdujcej si w witrynie MySQL i szczerze zachcamy, aby si
tam uda i j przeczyta! O wiele bardziej szczegowe instrukcje oraz poradnik dotyczcy rozwizywania problemw
znajduj si tutaj:
Pobierz wersj
5.5 lub nowsz
.
http://dev.mysql.com/doc/refman/5.5/en/windows-installation.html.
Spodoba Ci si te przegldarka zapyta MySQL, dziki ktrej moesz wpisywa swoje zapytania i przeglda uzyskane
wyniki w interfejsie programu zamiast w oknie konsoli.
504
Dodatek B
Przejd na stron
http://dev.mysql.com/downloads/
i kliknij przycisk pobierania MySQL Installer for Windows. All MySQL Products. For All
Windows Platforms. In One Package. Download.
By moe bdziesz
musia przewin okno
troch w d.
Pobierz instalator
3
Pobierz wersj
5.5.16 albo
nowsz.
Kontynuuj bez
rejestracji.
Zobaczysz list miejsc, z ktrych moesz pobra swoj kopi. Wybierz miejsce,
ktre znajduje si najbliej Ciebie.
Kiedy plik skoczy si pobiera, kliknij na nim prawym przyciskiem myszy i wybierz
polecenie Uruchom jako administrator, jeli masz w Windows aktywn funkcj
Kontrola konta uytkownika. Od tego momentu instalacja bdzie przebiega
w kreatorze instalacji. Kliknij Dalej.
506
Dodatek B
508
Teraz instalator sprawdzi zgodno Twojego systemu z profilem klienta platformy Microsoft .NET
Framework 4, co jest potrzebne do uruchamiania aplikacji MySQL Workbench. Jeli nie masz tego
komponentu, zaktualizuj swj system Windows na stronie http://update.microsoft.com/. Instalator
sprawdzi take obecno w Twoim systemie Visual C++ 2010.
10
Dodatek B
12
Upewnij si, e opcje Enable TCP/IP Networking oraz Create Windows Service s
zaznaczone, i pozostaw bez zmian ich domylne wartoci. W polach u dou okna wprowad
haso dla uytkownika root MySQL i kliknij Next.
13
Teraz proces instalacji powinien by ju zakoczony. Jeeli okno MySQL nie otworzy si
automatycznie, uruchom MySQL Workbench z poziomu menu, wybierajc Start/Wszystkie
programy/MySQL.
Aby uaktywni PHP, musisz usun znak hash i zrestartowa serwer. Wacicielem
dokumentu httpd.conf jest root, co znaczy, e aby wprowadzi w nim zmiany, musisz
poda haso. Prawdopodobnie bdziesz te musia dokona edycji pliku php.ini, eby
mg z niego korzysta Apache. Bardziej szczegowe informacje na temat tych
czynnoci oraz uruchomienia PHP znajduj si na stronie http://foundationphp.com/
tutorials/php_leopard.php (strona w jzyku angielskim).
Przejd na stron:
http://dev.mysql.com/downloads/
i kliknij cze MySQL Community Server.
Na potrzeby tego opisu pobieramy wersj 32-bitow. Upewnij si, e pobierzesz wersj
odpowiedni dla swojego systemu operacyjnego.
By moe bdziesz
musia przewin
troch w d.
510
Dodatek B
Kliknij przycisk Download obok nazwy archiwum Mac OS X ver. 10.6 (x86, 32-bit),
DMG Archive.
eby dosta si do
tego miejsca, bdziesz
musia przewin w d
.
Kliknij cze No thanks, just take me to the downloads!, chyba e chcesz si zarejestrowa
i zaoy konto na witrynie MySQL albo ju masz takie konto.
Kontynuuj bez
rejestracji.
jeste tutaj
511
Pobierz instalator
4
Powr na stron:
http://dev.mysql.com/downloads/
i kliknij cze MySQL Workbench (GUI Tool).
Kliknij Download, a nastpnie No thanks, just take me to the downloads! (chyba e chcesz si
zarejestrowa i zaoy konto na witrynie MySQL albo ju masz takie konto).
Kontynuuj bez
rejestracji.
Instalator pakietu
512
Dodatek B
Instalator pakietu
514
Dodatek B
10
Instalator pakietu
11
516
Dodatek B
12
Korzystajc z panelu Server Administration, sprawd, czy Twj serwer dziaa. Jeli panel
jest pusty, kliknij opcj New Server Instance i wybierz serwer do uruchomienia.
13
Utwrz nowe poczenie w sekcji SQL Development, klikajc New Connection, i wypenij pola w oknie,
ktre si otworzy. Nastpnie kliknij dwukrotnie swoje nowe poczenie, aby je otworzy.
W celu uzyskania dalszych informacji na temat MySQL albo o narzdziu MySQL Workbench,
odwied stron http://dev.mysql.com/doc/ (strona w jzyku angielskim).
Skorowidz
A
B
baza danych, 367
MySQL, 371, 456
serwer, 371
before, Patrz: metoda before
biblioteka jQuery, Patrz: jQuery biblioteka
JavaScript, 41
UI Effects, 492
button, Patrz: metoda button
C
CDN, 487
children, Patrz: metoda children
Chrome, Patrz: przegldarka Google Chrome
clearInterval, Patrz: metoda clearInterval
click, Patrz: metoda click
Cold Fusion, 347
contains, Patrz: metoda contains
content delivery networks, Patrz: CDN
content distribution networks, Patrz: CDN
Crockford Douglas, 391
cross-site scripting, Patrz:skrypt midzy
witrynami
CSS, 30, 39, 40, 84, 88, 410
display, 224
identyfikator, 49, 50, 52, 59, 61, 77, 83,
86, 103
klasa, 49, 50, 83, 84, 85, 86, 88, 89, 96, 97,
103, 151, 154, 166, 286, 292, 492
opacity, 224, 225
pozycjonowanie, 218
D
dane
baza, Patrz: baza danych
sanityzacja, 368
518
Skorowidz
serializacja, 368
walidacja, 368, 442, 491
data, Patrz: metoda data
datepicker, Patrz: metoda datepicker
delay, Patrz: metoda delay
dequeue, Patrz: metoda dequeue
detach, Patrz: metoda detach
DOM, Patrz: HTML Obiektowy Model
Dokumentu
domknicie, Patrz: JavaScript domknicie
Dragonfly, Patrz: przegldarka Opera
drive-by scripting, Patrz:skrypt
przekierowujcy
Dump, 489
G
generator liczb losowych, 230
get, Patrz: metoda get
getJSON, Patrz: metoda getJSON
getScript, Patrz: metoda getScript
getter, 312
Google
powoka, Patrz: powoka
przegldarka, Patrz: przegldarka Google
Chrome
Google Maps, 449, 450, 451, 453, 473
geokodowanie, 473
trasy dojazdw, 473
J
JavaScript, 30, 41, 45, 47, 55, 88, 132, 333, 334
domknicie, 494, 495
interpreter, 47, 115, 185, 224, 238
logika warunkowa, Patrz: logika
warunkowa
operator, 243
zmienna, 92
Skorowidz
JavaScript Object Notation, 356
jzyk
ASP, Patrz: ASP
Cold Fusion, Patrz: Cold Fusion
JSP, Patrz: JSP
PHP, Patrz: PHP
skryptowy, 40
jQuery
animacja, 211, 224
biblioteka, 32, 71, 132, 251, 329, 412,
446, 492
debugowanie kodu, 489
efekty, 62, 211, 224, 234, 235
funkcja, Patrz: funkcja
szablon, 495
tablica, Patrz: tablica
UI, 244, 407, 412, 437, 446, 492
wersja deweloperska, 32
wersja produkcyjna, 32
wtyczki, 489, 493
zdarzenie, 78, 115, 118, 120, 127, 158,
348, 356
JSON, 260, 256, 361, 386, 387, 391, 397,
405, 456
JSP, 347
K
kaskadowe arkusze stylw,
Patrz: CSS
Keyhole Markup Language,
Patrz: KML
KML, 336
kolejka, 490
komunikat alarmowy, 82
konkatenacja, 93
konstruktor, 256, 288, 452, 481
krzywka, 67, 247, 323, 403, 479
kwerenda, 51
acuch
metod, Patrz: metoda spinanie
tekstowy, 86, 143, 185, 186, 253, 351, 368,
255, 386
M
marker, 460
Math.floor, Patrz: metoda Math.floor
Math.random, Patrz: metoda Math.random
metoda, 71,110, 254, 484, 485
addclass, 154
after, 195, 210
ajax, 340, 356, 360, 387
animate, 235, 236, 242, 250
append, 95
appendTo, 273
before, 195, 210
button, 422, 443, 446
children, 176, 177, 197, 198, 210, 342
clearInterval, 300, 326
click, 78, 81, 82
contains, 150
data, 490
datepicker, 417, 418, 446
delay, 299, 346
dequeue, 490
detach, 172, 184, 210
each, 204, 208, 342
empty, 184, 281, 282, 288
eq, 197, 210
equal, Patrz: metoda eq
fadeIn, 60, 63, 225, 232, 250
fadeOut, 225, 232, 250
fadeTo, 225, 250
filter, 198, 210
filtrujca, 197, 210
find, 208, 342
first, 197, 210
get, 356, 360
get, 367, 400
getJSON, 356, 360, 405
getScript, 356, 360
hide, 224, 232
inArray, 267, 268
last, 197, 210
length, 261
load, 356, 360
acuchowa, Patrz: metoda spinanie
Math.floor, 94, 107
Math.random, 94, 107
next, 176
noConflict, 488
not, 198, 210
onBlur, 292, 295, 326
onFocus, 292, 295, 326
parent, 176, 177, 178, 184, 210
parents, 184, 198
post, 356, 360, 367, 378, 387, 400
prev, 176
queue, 490
remove, 102, 107, 172, 184, 210
replaceWith, 190, 191, 193, 194, 210
serialize, 368
O
obiekt, 254, 257, 260, 261, 288, 386, 447, 451
API, 460
instancja, 256
jednokrotnego uycia, 260
JSON, Patrz: JSON
wielokrotnego uycia, 260
window, 292, 320, 326
waciwo, 255
XMLHttpRequest, 347
zakres wanoci, 494
Obiektowa Notacja JavaScriptu,
Patrz: JSON
Obiektowy Model Dokumentu,
Patrz: HTML Obiektowy Model
Dokumentu
onBlur, Patrz: metoda onBlur
onFocus, Patrz: metoda onFocus
OOXML, 336
Open Office XML, Patrz: OOXML
Opera, Patrz: przegldarka Opera
operator, Patrz: JavaScript operator
kropka, 257, 386
logiczny, 276, 288, 389
porwnania, 276, 288, 389
trjargumentowy, 276, 280
overlay, Patrz: powoka
P
para klucz/warto, 389
parent, Patrz: metoda parent
Skorowidz
parents, Patrz: metoda parents
ptla
do...while, 265, 266, 288, 388
for, 265, 266, 288, 388
for...in, 273
foreach, 388
nieskoczona, 265, 291
while, 273, 276, 388
PHP, 347, 356, 360, 367, 376, 383, 388, 389,
391, 400, 405, 498, 502
zagroenia, 400
PHPMyAdmin, 380
post, Patrz: metoda post
powoka, 471
prev, Patrz: metoda prev
przegldarka
Dragonfly dla Opery, 30
Firebug dla Firefox, 30
Google Chrome, 30, 184, 301, 341
Internet Explorer, 30, 301
Mozilla Firefox, 301
odwieanie, 42
Safari, 30
silnik, 218, 238
przycisk, 61, 102, 169, Patrz te: metoda
button, widget przycisku
PSPad, 31
R
RDBMS, 371
RDF Site Summary, Patrz: RSS
Real Simple Syndication, Patrz: RSS
Relational Database Management Systems,
Patrz: RDBMS
remove, Patrz: metoda remove
replaceWith, Patrz: metoda
replaceWith
RSS, 336, 360
520
Skorowidz
T
tablica, 186, 187, 203, 204, 208, 210, 253, 255,
261, 263, 288, 385, 386, 388, 490
asocjacyjna, 367, 389, 390, 397
terminator, 184
TextPad, 31
TextWrangler, 31
this, 99, 110, 204, 208, 493
toggle, Patrz: metoda toggle
trigger, Patrz: metoda trigger
U
UML, 255, 260
Unified Modeling Language, Patrz: UML
V
Variable-Debugger, 489
W
walidacja
danych, Patrz: dane walidacja
formularzy, Patrz: dane walidacja
waek malarski, 437
warto losowa, 92, 147, 311, Patrz te:
funkcja losowa
wersja
deweloperska, 32
produkcyjna, 32
widget, 412, 419, 446
autouzupeniania, 442
button, 446
datepicker, 446
o zmiennych rozmiarach, 437
przecigalny, 437
przycisku, 422
sortowalny, 437
upuszczalny, 437
wybieralne, 437
wstrzyknicie kodu SQL,
wtyczka, 329, 410
idTabs, 329
w widgetami, 412
z efektami, 412
z interakcjami, 412
X
XHTML, 336
XML, 334, 335, 336, 350, 356, 360, 361, 363,
391
Z
zagroenia, 400
zasada tosamego pochodzenia, 341
zdarzenie, Patrz: jQuery zdarzenie
hover, 153
nasuchiwanie, 474
suchacz, Patrz: suchacz zdarze
usuwanie, 122
wizanie, 117
zmienna, 92, 93, 96, 184, 185, 253, 388
lokalna, 494
zakres wanoci, 494
Zunifikowany Jzyk Modelowania, Patrz:
UML
zwracanie, 51, 87