od Podstaw
9 godz. 20 min · JavaScript · Full-stack i Programowanie
Piotr PalarzWeb DeveloperJavaScript to język programowania, który napędza niemal wszystkie strony internetowe. Dopełnia on technologie HTML i CSS, za pomocą których tworzymy strukturę i wygląd dokumentu. Co jednak w sytuacji, gdy chcemy po kliknięciu w wybrany przycisk wyświetlić powiększone zdjęcie lub wczytać dodatkowe dane z serwera? To właśnie w takich sytuacjach przydaje się język JavaScript i tzw. DOM API, dostępne w przeglądarce. Jak się przekonasz, możliwości nowoczesnych przeglądarek w połączeniu z tym językiem są naprawdę ogromne.
Język JavaScript może być używany nie tylko na stronach internetowych. Z tego powodu, w kursie omówimy najpierw najważniejsze konstrukcje tego języka, które są niezależne od platformy uruchomieniowej. Dzięki temu zbudujesz fundamenty niezbędne do tego, by wykorzystać ten język np. w środowisku Node.js. Krok po kroku omówimy sposoby tworzenia zmiennych, dostępne typy danych i operatory. Następnie zobaczysz jak tworzyć tablice i obiekty, z jakich instrukcji warunkowych i pętli możesz korzystać, a także jak tworzyć własne funkcje. Przekazywana wiedza uwzględniać będzie nowości, które pojawiły się w języku wraz z rewolucyjnym standardem EcmaScript 6 (ES6).
Sam język JavaScript to nie wszystko, by tchnąć ducha w strony internetowe. Z tego powodu, przeglądarki internetowe udostępniają tzw. DOM API. To interfejs, który z użyciem języka JavaScript pozwala na manipulację treścią i wyglądem strony. W kursie bardzo dokładnie omówimy czym jest Obiektowy Model Dokumentu, a także jak z nim pracować. Zobaczysz jak tworzyć nowe elementy HTML i wstawiać je na stronę, jak modyfikować ich treść, atrybuty, style czy klasy CSS. Poznasz sposoby na odczytywanie położenia elementu na stronie i jego wymiarów, które będą niezbędne w wielu sytuacjach. Dowiesz się także, jak przypisywać obsługę zdarzeń w przeglądarce, by np. wywołać własną funkcję, gdy ktoś kliknie w wybrany przez Ciebie przycisk.
JSON to popularny format wymiany danych, a Ajax to potoczna nazwa dla asynchronicznych zapytań HTTP, które wysyłać możemy z poziomu kodu JavaScript. Dziś niemal każda strona internetowa wykorzystuje te technologie. W niektórych przypadkach jako dopełnienie podstawowej funkcjonalności witryny, a w innych jako główny motor napędzający stronę. Jeśli kiedykolwiek widziałeś, jak na stronie internetowej jakaś treść "doczytuje" się np. podczas przewijania - widziałeś w praktyce Ajax. W jednym z rozdziałów kursu zobaczysz, jak pracować z tym formatem, a także jak wysyłać wspomniane zapytania do serwera.
Choć kurs który masz przed sobą, jest kursem dla początkujących, to aby zrozumieć jak działa język JavaScript i jak z nim się współcześnie pracuje, omówimy dwa ważne tematy - zarządzanie zależnościami i bundlowanie kodu. Dowiesz się czym jest npm i jak z jego pomocą pobierać paczki gotowego kodu z internetu, a także jak sprawić, by bez trudnu dołączać je do własnego kodu. W tym celu skorzystamy z narzędzia snowpack, które pozwoli nam także na optymalizację kodu przed jego wypuszczeniem w świat. Na tym etapie omówimy również jak działają moduły ESM, pozwalające dzielić kod na mniejsze części.
Kurs podzielony został na możliwie krótkie lekcje, do których w każdej chwili możesz wrócić. Jeśli zatem zapomnisz jak odczytywać wymiary elementu na stronie, szybko odnajdziesz odpowiednią lekcję. Czym jednak była by sama teoria i proste przykłady, bez pokazania, jak połączyć je w całość i wykorzystać w praktyce? Dobra wiadomość jest taka, że w kursie stworzymy aż 5 praktycznych projektów, wykorzystujących zdobytą wcześniej wiedzę. Najpierw napiszemy program losujący Dużego Lotka, następnie dynamiczny pasek postępu przeczytania artykułu, dymek pojawiający się nad elementem po najechaniu na niego myszą, wygenerujemy tabelkę w użytkownikami na podstawie danych JSON, a na koniec tworzymy prosty odtwarzacz wideo, z możliwością pauzowania i przewijania filmu.
Kurs ten jest dla wszystkich osób, które znają już podstawy HTML i CSS i chciałyby przejść poziom wyżej i dodać do swoich stron dynamiczności. Żadna wcześniejsza wiedza z zakresu JavaScript nie jest wymagana, ale zalecana jest podstawowa wiedza z zakresu samego programowania (czym są zmienne, pętle, funkcje itd.). Materiał ten będzie również świetnym odświeżeniem i usystematyzowaniem wiedzy dla osób, które już z tym językiem miały do czynienia. Po przerobieniu tego kursu będziesz gotowy, by poznawać język JavaScript dalej i zacząć korzystać z nowoczesnych frameworków.
W tej lekcji poruszam temat tego, jak odczytywać wartości pól formularza i to
będzie przydatne szczególnie wtedy, kiedy już poznasz w jednym z kolejnych
rozdziałów, w jaki sposób przypisywać zdarzenia.
Wówczas będziemy mogli zareagować na to,
jak ktoś kliknie w przycisk wyślij i odczytać sobie wtedy wszystkie pola formularza.
Więc w tej lekcji pokażę Ci po prostu, jak mając odwołanie do danego pola można
odczytać jego wartość i będzie to różnie wyglądać w przypadku np.
takiego selecta czy checkbox albo zwykłego pola.
Więc mamy taki oto formularz.
Jak widzisz przede wszystkim mamy tutaj elementy o różnym typie.
Mamy typ text czy jest to input tekstowy, mamy
select, mamy właśnie jakiś input o typie checkbox.
Wszystkie z nich mają atrybuty name, co będzie istotne i np.
w przypadku tego pierwszego elementu od razu dodaliśmy atrybut value, który
sprawia, że jakaś wartość jest tutaj ustawiona.
Wyobrażamy sobie po prostu, że mamy formularz do zmiany danych,
on jest wczytywany z serwera już z uzupełnionymi danymi, które wcześniej
podaliśmy, więc w kodzie HTML wyglądałoby to dokładnie tak.
Teraz będę chciał sobie znaleźć uchwyt do
całego tego formularza, czyli jest to main form.
Zrobimy to znaną nam już metodą querySelector myForm.
I teraz wewnątrz tego formularza będziemy wyszukiwać poszczególnych pól.
Mając odwołanie do myForm, czyli do
tego formularza, możemy sobie znaleźć taki input po np.
tym name firstName, ale pokażę Ci, że
również możemy skorzystać z ciekawego skrótu, który działa na formularzach.
Jeżeli mamy odwołanie do formularza, to
wszystkie pola, które w nim się znajdują to ich atrybuty
name stają się właściwościami
na tym obiekcie form i te właściwości kierują do poszczególnych pól.
Czyli jak mamy firstName podany w name to mogę powiedzieć form.firstName
i w tym momencie mam już uchwyt do tego
elementu, tak samo jakbym go wyszukał z querySelector. Czyli dokładnie na nim
mogę wtedy operować. I pokażę Ci jak odczytać jego wartość.
Zrobimy sobie to może w konsoli.
Czyli pamiętaj na tym etapie mamy odwołanie do elementu input
i za pomocą właściwości value możemy odczytać jego aktualną wartość.
Zobaczmy. Wyświetli nam się Jan.
Dokładnie w taki sam sposób będziemy mogli
zmieniać wartość lub tę wartość ustawiać, więc odwołajmy się do form.lastName.
To z kolei sprawi, że będziemy mieli
uchwyt do tego elementu i ustawimy sobie jego wartość np.
na Kowalski.
A więc w ten sposób można to zrobić dynamicznie.
Zauważ ta wartość została teraz tutaj ustawiona.
Jeżeli chodzi np.
o pole textarea, które tutaj mamy, to z nim sytuacja wygląda tak samo.
Jak mamy name message to możemy się
również odwołać do form, następnie message i ustawić mu wartość.
Tak jak wspomniałem raczej będziemy zazwyczaj wartości odczytywać,
czyli jak coś klikniesz na taki przycisk wyślij,
wtedy wywołamy funkcję, w której właśnie sprawdzili byśmy jaka jest wartość.
Te wartości, co ważne zawsze są zwracane jako string.
Czyli nawet jeżeli ktoś tutaj w Jan wpisał by 20, to w momencie kiedy my to odczytamy
poprzez value otrzymamy tam string 20 czyli coś takiego.
To też warto zapamiętać.
Nie ma tutaj żadnej konwersji np.
na liczby.
Jeżeli ktoś nic nie wpisze to nie
otrzymamy ani undefined, ani null, ale otrzymamy wtedy taki pusty ciąg znaków,
więc to będzie istotne w momencie kiedy będziesz robił np.
jakieś if i będziesz chciał sobie porównać.
Jeżeli coś jest pustym ciągiem znaków to
znaczy, że ktoś nic nie wpisał, ale w zasadzie wtedy również
jeżeli zrobisz coś takiego i zostanie to
podstawiony pusty ciąg znaków też oznacza, że ktoś nic nie wpisał.
OK, będę chciał sobie tutaj ustawić tą treść, żeby Ci to zostało w plikach źródłowych,
żebyś po prostu widział, że na textarea działamy dokładnie w taki sam sposób.
Jeżeli chodzi o te podświetlenia to one też wynikają tutaj z tego sprawdzenia, z
tej analizy w akurat w tym przypadku one nie mają żadnego znaczenia.
Jak zatem widzisz z polami o typie input
pracujemy z użyciem właściwości value i odczytujemy je ustawiamy,
natomiast jak myślisz, jak będzie w przypadku takiego elementu select?
Odwołamy się do niego po jego name, czyli subject.
Nie musimy go wyszukiwać, ale możesz zrobić również form.querySelector
select albo zrobimy form następnie subject i na nim również jest właściwość value.
Zobaczmy sobie w konsoli jaka jest aktualna wartość tego pola.
Zobaczymy pytanie. Teraz skąd to się bierze?
Jeżeli sobie zerkniemy mamy tutaj opcje i dokładnie w value danej opcji, która jest
aktualnie wybrana to jest to co będzie zwracane.
Tutaj została zaznaczona domyślnie ta
pierwsza opcja, bo nie ma żadnej innej pustej.
Natomiast jeżeli byśmy wybierali prośba i spróbowali to odczytać to otrzymamy value
nie takie jak jest tutaj, bo to jest tylko tzw.
label, ale taki jak jest w tym miejscu. Czyli dokładnie to zostanie zwrócone.
Pytanie zatem czy możemy również sterować
tym value, żeby zaznaczyć jakiś inny element, np.
zgłoszenie. Spróbujmy, odwołamy się do form.subject.value
i ustawimy to na zgłoszenie na taki oto string.
Zobaczmy. Jak widzisz również zostało to tutaj
przedstawione, aczkolwiek moglibyśmy to zrobić również inaczej.
Mógłbyś sobie wyszukać konkretnego elementu option np.
z querySelector i ustawić jego atrybut poprzez set attribute na selected.
Jeżeli byś zrobił coś takiego, również
dane pole będzie automatycznie zaznaczone, a wtedy na tym select,
jak odczytamy jego value to będzie to wartość właśnie zaznaczonego option.
OK. I został nam jeszcze checkbox.
W jaki sposób odczytujemy wartość checkbox?
Mamy tutaj name remember.
Zobaczmy console.log for.remember i następnie value.
Co nam to zwróci?
Jak widzisz zwróciło nam value on.
Czyli jak on jest ustawiony to będzie miał value on,
ale to jest trochę mylące, dlatego, że on przecież nie był zaznaczony.
Oznacza to tylko tyle, że value nie jest
dobrym wyznacznikiem tego, czy checkbox jest zaznaczony czy nie.
W przypadku checkboxów będziemy korzystać z właściwości checked.
Ona wygląda w ten sposób i ona już nie zwraca stringu, ale zwraca true lub false.
Zobaczmy.
Otrzymaliśmy false, bo to pole nie jest zaznaczone.
Teraz jak go zaznaczę i byśmy jeszcze raz
mogli się do niego odwołać to zwróci nam to już true.
Co ważne, tą właściwość można również
ustawiać, więc moglibyśmy powiedzieć form.remember.checked i ustawić ją na true.
Wtedy automatycznie ten element możemy odświeżyć stronę,
jak widzisz, jest zaznaczony.
Równie dobrze moglibyśmy tutaj przypisać atrybut checked w ten sposób,
albo z góry, jeżeli chcielibyśmy, żeby to było od razu zaznaczone, albo z użyciem
JavaScript za pomocą setAttribute checked na wartość true.
To zatem tyle, jeżeli chodzi o podstawy pracy z formularzami.
Jak widzisz, zazwyczaj będziemy ustawiać i odczytywać wartości pól za pomocą
właściwości value, a w przypadku takich pól jak np.
checkbox będzie ta właściwość checked. Value
zapamiętaj zawsze zwraca string albo pusty string albo wartość jaka jest wpisana,
natomiast checked zwraca wartość typu prawda lub fałsz.