Newsletter

Grupa MagazynyInternetowe

Online: 956

Wyszukiwarka

Framework, jQuery

jQuery dla zaawansowanych

jQuery dla zaawansowanych W poprzedniej części wprowadzenia do jQuery poznaliśmy podstawy korzystania z tego frameworka, takie jak używanie selektorów czy poruszanie się po DOM-ie. W niniejszym artykule przyjrzymy się pozostałym zagadnieniom, bez których nie sposób wykorzystać w pełni bogatych możliwości jQuery.

Piotr Arendt

Zasadniczą rolą, jaką pełni JavaScript na stronach internetowych, jest obsługa zdarzeń i wywoływanie przypisanych do nich akcji. Jest to podstawowe rozszerzenie statycznych dokumentów HTML o elementy dynamiczne, umożliwiające nawiązywanie interakcji z użytkownikami. Zdarzeniem może być np. kliknięcie, aktywacja pola formularza czy naciśnięcie klawisza na klawiaturze.

Jako webmaster masz kontrolę nad tym, co dzieje się po wystąpieniu danej akcji - definiując odpowiednie reguły. Możesz to zrobić, dodając do elementów HTML atrybuty odpowiedzialne za zdarzenia, np. w ten sposób:

[+]
 
HTML
Pobierz
1. <div class="pk">
2. <p onclick="this.style.color='red'">Kliknij na mnie!</p>
3. <p onclick="this.style.color='red'">
4. Albo na mnie!</p>
5. </div>

Powyższy kod spowoduje zmianę koloru tekstu zawartego w akapitach na czerwony po ich kliknięciu. Zdecydowanie lepszym sposobem będzie jednak nie dołączanie do kodu HTML atrybutów odnoszących się do zdarzeń (jak tutaj "onclick"), a zamiast tego umieszczenie odpowiedniej reguły w zewnętrznym kodzie JavaScript.

Jest to właściwy sposób na separację struktury dokumentu od warstwy zachowania. O ile w "czystym" JavaScripcie osiągnięcie tego nie jest zbyt proste (z uwagi na różnice w obsłudze odpowiednich funkcji przez przeglądarki), o tyle korzystając z jQuery, możemy dojść do tego w bardzo łatwy sposób:

[+]
 
JavaScript
Pobierz
 1. $(document).ready(function() {
 2. $('.pk p').click(function() {
 3. $(this).css('color', 'red');
 4. });
 5. });
 6. ----------------------------
 7. <div class="pk">
 8. <p>Kliknij na mnie!</p>
 9. <p>Albo na mnie!</p>
10. </div>

Zamiast umieszczać akcje wewnątrz elementów "p" w kodzie HTML, sprawiliśmy, że po kliknięciu na dowolny akapit będący potomkiem elementu o klasie "pk", wywołana zostanie metoda css(), ustalająca kolor akapitu na czerwony. Zamiennikiem atrybutu "onclick" jest tutaj metoda click() skojarzona ze zdarzeniem "click" - jednym z wielu zdarzeń, które obsługuje jQuery.

Zwróć uwagę na użycie nowego obiektu "this" - jest to odwołanie do elementu, który wywołał dane zdarzenie. Załóżmy, że chcemy, aby tym razem kolor akapitów został zmieniony po ich dwukrotnym kliknięciu (tzw. dwukliku). Wszystko, czego potrzebujemy, to zastąpienie obecnej metody click() inną metodą dblclick(), powiązaną ze zdarzeniem "dblclick":

[+]
 
JavaScript
Pobierz
1. $(document).ready(function() {
2. $('.pk p').dblclick(function() {
3. $(this).css('color', 'red');
4. });
5. });

Przykładem ciekawej metody powiązanej ze zdarzeniem może być toggle(), która daje w naszym przypadku możliwość przełączania koloru tekstu akapitu w zależności od kolejności kliknięcia na niego. W ten sposób możemy ustalić, że po pierwszym kliknięciu tekst akapitu będzie czerwony, a po kolejnym wróci do czarnego, po czym następne kliknięcie znowu będzie skutkowało ustawieniem koloru czerwonego:

[+]
 
JavaScript
Pobierz
1. $(document).ready(function() {
2. $('.pk p').toggle(function() {
3. $(this).css('color', 'red');
4. }, function() {
5. $(this).css('color', 'black');
6. });
7. });

W tym przypadku musimy dodać po przecinku drugą funkcję, która spowoduje ustawienie dla akapitu koloru czarnego. Sprawdzając działanie tego kodu w przeglądarce, zwróć uwagę na to, że dla każdego z dwóch akapitów ich stany zapamiętywane są oddzielnie. Chcąc osiągnąć identyczny efekt w czystym JavaScripcie, nie ucieklibyśmy od perspektywy napisania znacznej ilości kodu. W jQuery możemy to osiągnąć praktycznie bez żadnego wysiłku.

Przy okazji warto wspomnieć o kolejnej metodzie: hover(), która może zastąpić znane ci na pewno zdarzenia "mouseover" i "mouseout". Jej użycie jest równie proste:

[+]
 
JavaScript
Pobierz
1. $(document).ready(function() {
2. $('.pk p').hover(function() {
3. $(this).css('color', 'red');
4. }, function() {
5. $(this).css('color', 'black');
6. });
7. });

Tutaj również korzystamy z dwóch funkcji. Pierwsza odpowiada za stan po najechaniu kursorem na dany element, a drugi za stan po jego opuszczeniu. Możemy użyć metody hover() na dowolnym elemencie jako zamiennika pseudoklasy ":hover" w CSS, która nie jest w pełni obsługiwana przez Internet Explorera.

Oczywiście nie musimy się ograniczać do samych modyfikacji wizualnych, możliwych do uzyskania w CSS. Spróbujmy za pomocą metody hover() osiągnąć efekt pojawiania się i znikania dodatkowego akapitu, który domyślnie będzie ukryty, a stanie się widoczny po najechaniu na jeden z dwóch pozostałych.

Najpierw dodajmy dodatkowy element do kodu HTML:

[+]
 
HTML
Pobierz
1. <div class="pk">
2. <p>Najedź na mnie!</p>
3. <p>Albo na mnie!</p>
4. </div>
5. <p id="poj">Wtedy ja się pojawię!</p>

W kodzie JavaScript powinniśmy na początku ukryć ów nowy akapit, a potem dodać do metody hover() nowe funkcje, odkrywające i ukrywające go. Skorzystamy z dwóch nowych metod: show() oraz hide().

Rys. 1. Dzięki wykorzystaniu metod show() i hide(),
po najechaniu na jeden z akapitów pojawia się pod
nimi kolejny Rys. 1. Dzięki wykorzystaniu metod show() i hide(), po najechaniu na jeden z akapitów pojawia się pod nimi kolejny

Umożliwiają one, jak same nazwy wskazują, ukrycie lub odkrycie danego elementu (rysunek 1). Kod przedstawia się następująco:

[+]
 
JavaScript
Pobierz
 1. $(document).ready(function() {
 2. $('#poj').hide();
 3. $('.pk p').hover(function() {
 4. $(this).css('color', 'red');
 5. $('#poj').show();
 6. }, function() {
 7. $(this).css('color', 'black');
 8. $('#poj').hide();
 9. });
10. });

Wywołanie metody hide() na elemencie "#poj" sprawi, że ten zostanie ukryty zaraz po tym, jak zostanie załadowany model DOM dokumentu i w praktyce będzie on od razu niewidoczny.

Rys. 2. Inspekcja drzewa dokumentu (DOM) wykaże,
że metody show() oraz hide() dodają do naszego
akapitu nowy atrybut stylu wewnętrznego (&#8222;style&#8221;)
z właściwością &#8222;display&#8221; i odpowiednią wartością
(&#8222;none&#8221; lub &#8222;block&#8221;) Rys. 2. Inspekcja drzewa dokumentu (DOM) wykaże, że metody show() oraz hide() dodają do naszego akapitu nowy atrybut stylu wewnętrznego („style”) z właściwością „display” i odpowiednią wartością („none” lub „block”)
2 grudnia 2008

Powiązane publikacje

Framework jQuery - JavaScript nie boli

Framework jQuery - JavaScript nie boli

Framework Ext JS - Nowoczesne interfejsy z wykorzystaniem JavaScript

Framework Ext JS - Nowoczesne interfejsy z wykorzystaniem JavaScript

JavaScript nas kręci

JavaScript nas kręci

jQuery - od czego zacząć

jQuery - od czego zacząć

 
Skomentuj
ten artykuł

Komentarzy: 1

Kod obrazkowy
(Kliknij, aby zmienić)
 
Przejdż do tego postu na forum Friday, 12.12.2008 13:05blogihno

To jest dla zaawansowanych? biggrin.gif. To co było dla początkujących? Tzn..... bardzo fajne tylko ten tytuł nie pasuje.

Zobacz wszystkie komentarze »

Autor

Piotr Arendt

Piotr Arendt zajmuje się zawodowo kodowaniem strony użytkownika serwisów internetowych.

Jest entuzjastą dopracowanych aplikacji: schludnego kodu, przemyślanych interfejsów użytkownika i bogatego user experience. Prywatnie miłośnik zen, minimalizmu i nastrojowej muzyki.

Zobacz mnie na GoldenLine

Artykuły tego autora:

Newsletter

Jesli chcesz być na bieżąco z tym co się dzieje na stronie magazynu INTERNET Maker zapisz się do naszego newslettera.