Aplikacje internetowe laboratorium JavaScript

Podobne dokumenty
Aplikacje WWW - laboratorium

Aplikacje internetowe laboratorium JavaScript

Aplikacje internetowe - laboratorium

Aplikacje WWW - laboratorium

Aplikacje WWW - laboratorium

Zajęcia 4 - Wprowadzenie do Javascript

Wykład 03 JavaScript. Michał Drabik

DOM (Document Object Model)

Zdarzenia Zdarzenia onload i onunload

Dokumentacja Skryptu Mapy ver.1.1

Zaawansowane aplikacje internetowe

Aplikacje internetowe - laboratorium

FORMULARZE Formularz ma formę ankiety, którą można wypełnić na stronie. Taki formularz może być np. przesłany pocztą elektroniczną .

Podstawy JavaScript ćwiczenia

Aplikacje WWW - laboratorium

Szablon główny (plik guestbook.php) będzie miał postać:

Budowa aplikacji ASP.NET współpracującej z bazą dany do obsługi przesyłania wiadomości

JAVAScript w dokumentach HTML (2)

Aplikacje WWW - laboratorium

Laboratorium 7 Blog: dodawanie i edycja wpisów

Funkcje i instrukcje języka JavaScript

Przykład integracji kalkulatora mbank RATY na platformie IAI

Danuta ROZPŁOCH-NOWAKOWSKA Strona Moduł 4. Przykład 1. Przykład 2. HTML 4.01 Transitional).

Aplikacje WWW - laboratorium

JavaScript - wykład 4. Zdarzenia i formularze. Obsługa zdarzeń. Zdarzenia. Mysz. Logiczne. Klawiatura. Beata Pańczyk

Wybrane znaczniki HTML

Pierwsza strona internetowa

Rys.2.1. Drzewo modelu DOM [1]

BAZY DANYCH Panel sterujący

Young Programmer: HTML+PHP. Dr inż. Małgorzata Janik, Zajęcia #2

Wprowadzenie do Internetu Zajęcia 5

za pomocą: definiujemy:

BAZY DANYCH Formularze i raporty

Formularze w PHP dla początkujących

1. Umieść kursor w miejscu, w którym ma być wprowadzony ozdobny napis. 2. Na karcie Wstawianie w grupie Tekst kliknij przycisk WordArt.

SSK - Techniki Internetowe

XML extensible Markup Language. część 5

Referat z przedmiotu Technologie Internetowe SPIS TREŚCI

HTML (HyperText Markup Language) hipertekstowy język znaczników

Celem ćwiczenia jest zapoznanie z językiem HTML i JavaScript, zasadami tworzenia stron WWW i umieszczania na nich skryptów w języku JavaScript.

etrader Pekao Podręcznik użytkownika Strumieniowanie Excel

Przygotowanie formularza do wypożyczenia filmu:

Dokumentacja programu. Zoz. Uzupełnianie kodów terytorialnych w danych osobowych związanych z deklaracjami POZ. Wersja

Podręcznik Użytkownika LSI WRPO

HTML. HTML(ang. HyperTextMarkupLanguage, pol. hipertekstowy język znaczników) język wykorzystywany do tworzenia stron internetowych

Instrukcja zarządzania kontem przedsiębiorstwa w serwisie internetowym

obecnie tabeli nie stosuje się do budowy struktury witryny (stosuje się za to pozycjonowanie elementów i warstwy) faktycznie wymagają

Instrukcja zarządzania kontem jednostki samorządu terytorialnego w serwisie internetowym

KASK by CTI. Instrukcja

Modele danych walidacja widoki zorientowane na model

Widżety KIWIPortal. tworzenie umieszczanie na stronach internetowych opcje zaawansowane. Autor: Damian Rebuś Data: Wersja: 1.

Formularze w programie Word

MS Word Długi dokument. Praca z długim dokumentem. Kinga Sorkowska

LABORATORIUM 2 WSTĘP DO SIECI TELEINFORMATYCZNYCH TABELE I FORMULARZE

Elektroniczny Urząd Podawczy

Laboratorium 1: Szablon strony w HTML5

Nawigacja po długim dokumencie może być męcząca, dlatego warto poznać następujące skróty klawiszowe

PWI Instrukcja użytkownika

Umieszczanie kodu. kod skryptu

Ćwiczenia laboratoryjne nr 8 Podstawy języka XML.

SPECYFIKACJA TECHNICZNA PRODUKTÓW REKLAMOWYCH SIECI LOCAL POWER. Specyfikacja ważna od 21 maja 2018 r.

I. Dlaczego standardy kodowania mailingów są istotne?

LeftHand Sp. z o. o.

LABORATORIUM 6: ARKUSZ MS EXCEL JAKO BAZA DANYCH

Specyfikacja techniczna dot. mailingów HTML

1. Składanie wniosku rejestracyjnego - rejestracja konta użytkownika/firmy

WOJEWÓDZTWO PODKARPACKIE

Format HTML. Wybrane działy Informatyki Stosowanej. Definicja i przeznaczenie Struktura dokumentu Znaczniki Formularze i komponenty

INSTRUKCJA Panel administracyjny

Budowa dokumentu HTML 5

STRONY INTERNETOWE mgr inż. Adrian Zapała

Podręcznik użytkownika Wprowadzający aplikacji Wykaz2


Instrukcja do programu DoDPD 1.0

Tworzenie szablonów użytkownika

Laboratorium 1 Wprowadzenie do PHP

Jak zacząć korzystać w HostedExchange.pl ze swojej domeny

Programowanie Obiektowe GUI

Formularz MS Word. 1. Projektowanie formularza. 2. Formularze do wypełniania w programie Word

Ćwiczenie 8. Kontrolki serwerowe

Zasady tworzenia podstron

Podstawy technologii WWW

Krok 1: Stylizowanie plakatu

Rozwiązanie ćwiczenia 8a

1. Proszę wejść na stronę: poczta.home.pl i zalogować się do nowej skrzynki za pomocą otrzymanych danych.

Formularze HTML. dr Radosław Matusik. radmat

SPIS TREŚCI. Sposób pierwszy... 3 Sposób drugi Ikony banków Ikony dostawców Strona1

5.4. Tworzymy formularze

Aplikacje WWW - laboratorium

Tworzenie stron internetowych z wykorzystaniem HTM5, JavaScript, CSS3 i jquery. Łukasz Bartczuk

REKRUTACJA DO PRZEDSZKOLI

1. Przypisy, indeks i spisy.

Podręcznik użytkownika Publikujący aplikacji Wykaz2

Instrukcja obsługi aplikacji Karty Pojazdów dla Dealerów Samochodowych

INSTRUKCJA. zakładania konta w Społeczności CEO oraz rejestrowania się do programu lub na szkolenie/cykl szkoleniowy KROK 1

I. Program II. Opis głównych funkcji programu... 19

Generator CABRILLO program Marka SP7DQR (Instrukcja obsługi)

Instrukcja obsługi Zaplecza epk w zakresie zarządzania tłumaczeniami opisów procedur, publikacji oraz poradników przedsiębiorcy

UMOWY INSTRUKCJA STANOWISKOWA

Transkrypt:

Celem ćwiczenia jest przygotowanie formularza HTML z wykorzystaniem języka. Formularz ten będzie sprawdzany pod względem zawartości przed wysłaniem do serwera. Formularz będzie miał charakter dynamiczny, tzn. niektóre jego elementy będą zmieniać swój stan pod wpływem działań użytkownika. Do wykonania ćwiczenia potrzebny jest dowolny edytor plików tekstowych oraz przeglądarka. 1. Stwórz dwa pliki tekstowe znajdujące się w tym samym katalogu dyskowym: form.html i form_check.js. 2. Formularz ma służyć do wprowadzania danych potrzebnych do rejestracji użytkownika w serwisie internetowym. Potrzebne informacje to przede wszystkim dane osobowe. W celu utworzenia formularza wykorzystaj element <form> języka HTML. Formularz o nazwie dane_osobowe powinien umożliwiać wprowadzanie następujących danych: imię, nazwisko, płeć (wybór jednej z opcji), nazwisko panieńskie, e-mail, ulica, kod pocztowy, miasto, uwagi (pole tekstowe). Dla lepszej wizualizacji formularza pola można umieścić w komórkach tabeli. Zawartość pliku form.html powinna być następująca: <!doctype html> <html> <head> <meta charset="utf-8" /> <title></title> </head> <body> <form name="dane_osobowe"> <table> <tr><td>imię</td><td><input type="text" name="f_imie"></td></tr> <tr><td>nazwisko</td><td><input type="text" name="f_nazwisko"></td></tr> <tr> <td>płeć</td> <td> <input name="f_plec" value="f_k" checked type="radio" />kobieta<br /> <input name="f_plec" value="f_m" type="radio" />mężczyzna </td> </tr> <tr><td>n. panieńskie</td><td><input type="text" name="f_nazwisko_p"></td></tr> <tr><td>e-mail</td><td><input type="text" name="f_email"></td></tr> <tr><td>kod pocztowy</td><td><input type="text" name="f_kod"></td></tr> <tr><td>ulica/osiedle</td><td><input type="text" name="f_ulica"></td></tr> <tr><td>miasto</td><td><input type="text" name="f_miasto"></td></tr> <tr><td>uwagi</td><td><textarea rows="5" cols="15" name="uwagi"></textarea> </td></tr> <tr><td colspan="2"><input type="button" value="prześlij"></td></tr> </table> </form> </body> </html>

3. W pliku form_check.js zostaną umieszczone definicje funkcji, które będą sprawdzały elementarne warunki, które powinny spełniać wartości wprowadzane do formularza. Sprawdzana powinna być długość opisu uwag, format kodu pocztowego oraz adresu e-mail. Początkowo plik zawiera jedną funkcję sprawdzającą czy pole jest puste. function isempty(str) return (!str str.length === 0); 4. Dodaj do powyższego kodu funkcję, która sprawdzi, czy zgłaszając formularz użytkownik wypełnił wymagane pole f_imie. function validate(form) if (isempty(form.elements["f_imie"].value)) alert("podaj imię!"); 5. Dodaj do nagłówka HTML w pliku form.html odwołanie do zewnętrznego pliku (form_check.js) zawierającego skrypt w języku. <script src="form_check.js"></script> 6. Dodaj do przycisku obsługę zdarzenia naciśnięcia przycisku. Właściwy fragment kodu powinien mieć postać: <input type="button" value="prześlij" onclick="return validate(this.form);"> 7. Uruchom formularz w przeglądarce i przetestuj jego działanie próbując zgłosić formularz bez podania imienia. 8. Formularz nadal można łatwo oszukać, wpisując do pola f_imie ciąg białych znaków. Dodaj do pliku form_check.js funkcję sprawdzającą, czy podany łańcuch znaków nie składa się w całości z białych znaków. function iswhitespace(str) var ws = "\t\n\r "; for (i = 0; i < str.length; i++) var c = str.charat(i); if (ws.indexof(c) == -1)

9. Zmodyfikuj funkcję validate() w taki sposób, aby przy sprawdzaniu imienia uwzględnić także funkcję iswhitespace(). Sprawdź, czy walidacja działa poprawnie. 10. Zmodyfikujemy teraz kod skryptu w taki sposób, aby wygodnie można było dodawać walidację poprawności kolejnych pól. Dodaj do pliku form_check.js funkcję checkstring(). function checkstring(str, msg) if (iswhitespace(str) isempty(str)) alert(msg); 11. Zmień funkcję validate(). Wykorzystaj funkcję checkstring() i dodaj sprawdzanie poprawności nazwiska, kodu, ulicy i miasta. Sprawdź działanie formularza. 12. W następnym kroku uzupełnimy skrypt o funkcję weryfikującą podstawową poprawność podanego adresu e-mail. Dodaj do pliku form_check.js poniższy kod. function checkemail(str) if (iswhitespace(str)) alert("podaj właściwy e-mail"); at = str.indexof("@"); if (at < 1) alert("nieprawidłowy e-mail"); var l = -1; for (var i = 0; i < str.length; i++) var c = str.charat(i); if (c == ".") l = i; if ((l < (at + 2)) (l == str.length - 1)) alert("nieprawidłowy e-mail"); 13. Aby uruchomić weryfikację adresu email, wprowadź konieczną modyfikację w funkcji validate(). 14. Przedstawione rozwiązanie nie jest zadowalające, ponieważ zmusza użytkownika do dwukrotnego kliknięcia myszką (zamknięcie okna z powiadomieniem oraz przejście do błędnie wypełnionego pola). Następny przykład pokaże, jak temu zaradzić przy użyciu liczników czasowych. Zmodyfikuj formularz poprzez dodanie po polu do wprowadzania imienia pustego pola do wyświetlania błędów. <span class="err" id="e_imie" />

15. Dodaj w nagłówku poniższą regułę CSS do formatowania komunikatu o błędzie. Reguła powinna dotyczyć wszystkich elementów <span> z klasą err. color: red; font-weight: bold; padding-left: 5px; 16. Dodaj definicję nowej funkcji do weryfikacji pola. function checkstringandfocus(obj, msg) var str = obj.value; var errorfieldname = "e_" + obj.name.substr(2, obj.name.length); if (iswhitespace(str) isempty(str)) document.getelementbyid(errorfieldname).innerhtml = msg; obj.focus(); 17. Konieczna jest także modyfikacja funkcji validate(). checkstringandfocus(form.elements["f_imie"], 'Błędne imię') 18. Niestety, tak zdefiniowany komunikat o błędzie jest wyświetlany nawet wówczas, gdy użytkownik poprawi już swój błąd, co może być mylące. Posłużymy się licznikiem czasowym do automatycznego usunięcia komunikatu o błędzie po upływie 5 sekund. Dodaj do pliku dwie funkcje: pierwsza funkcja powoduje uruchomienie stopera ustawionego na 5000 ms i automatyczne wywołanie drugiej funkcji po upływie określonego czasu. Nazwa pola, które ma zostać wyczyszczone, zostanie przekazane poprzez zmienną globalną. errorfield = ""; function starttimer(fname) errorfield = fname; window.settimeout("clearerror(errorfield)", 5000); function clearerror(objname) document.getelementbyid(objname).innerhtml = ""; 19. Ostatnim krokiem tej części ćwiczenia jest wskazanie miejsca, w którym funkcja starttimer() ma zostać uruchomiona. Zmodyfikuj definicję funkcji checkstringandfocus() dodając w odpowiednim miejscu poniższe wywołanie funkcji starttimer(). starttimer(errorfieldname); 20. Uruchom formularz i przetestuj działanie mechanizmu raportowania błędów.

21. Kolejnym krokiem ćwiczenia będzie rozbudowanie formularza w taki sposób, aby pole f_nazwisko_p było dostępne tylko dla osoby, która jest kobietą. W tym celu konieczne będzie obsłużenie zdarzenia polegającego na przełączeniu pomiędzy wartościami pola opcji f_plec. W zależności od kierunku zmiany pole f_nazwisko_p powinno stać się widoczne lub niewidoczne. Do tego celu zostanie wykorzystana właściwość stylu o nazwie visibility. Może ona przyjąć wartości visible albo hidden. Zmiana nastąpi przy zajściu zdarzenia onclick. 22. Dodaj do pliku form.html tuż przed zamknięciem elementu </body> kod odpowiedzialny za zmianę właściwości visibility dla elementu, którego identyfikator jest przekazywany do funkcji jako argument. <script type="text/javascript"> function showelement(e) document.getelementbyid(e).style.visibility = 'visible'; function hideelement(e) document.getelementbyid(e).style.visibility = 'hidden'; </script> 23. Rozbuduj definicję pola służącego do wprowadzania nazwiska panieńskiego w taki sposób, aby możliwe było jego ukrywanie. Dotychczasowy kod: <input type="text" name="f_nazwisko_p"> zastąp przez: <span id="nazwiskopanienskie"> <input type="text" name="f_nazwisko_p"> </span> 24. Dodaj obsługę zdarzenia polegającego na wybraniu jednej z opcji oznaczających płeć. W zależności od wybranej płci powinno nastąpić ukrycie albo wyświetlenie pola do wprowadzenia nazwiska panieńskiego. W pierwszym elemencie f_plec ustaw wartość atrybutu onclick na: showelement('nazwiskopanienskie') a w drugim na: hideelement('nazwiskopanienskie') 25. Uruchom formularz w przeglądarce i sprawdź jego działanie.

26. Język oferuje możliwość wykorzystania mechanizmu wyrażeń regularnych. Mogą one służyć do weryfikacji czy dany napis odpowiada zdefiniowanemu wzorcowi. W utworzonym formularzu można znaleźć dwa fragmenty, gdzie warto skorzystać z wyrażeń regularnych. Jest to sprawdzanie poprawności kodu pocztowego oraz adresu mailowego. Dodaj do pliku form_check.js funkcję checkemailregex(). Następnie, zamień w funkcji validate() wywołanie funkcji checkemail() na wywołanie funkcji checkemailregex(). Przetestuj działanie formularza. function checkemailregex(str) var email = /[a-za-z_0-9\.]+@[a-za-z_0-9\.]+\.[a-za-z][a-za-z]+/; if (email.test(str)) alert("podaj właściwy e-mail"); 27. Kolejnym zadaniem w ćwiczeniu będzie usprawnienie działania formularza przez dodanie weryfikacji kodu pocztowego w czasie rzeczywistym, tzn. podczas wpisywania tekstu przez użytkownika. W tym celu koniecznie jest wykorzystanie zdarzenia następującego w chwili wpisania nowego znaku w pole kodu pocztowego. Dotychczasowy kod: <input type="text" name="f_kod"> zastąp przez: <input type="text" name="f_kod" onkeyup="checkzipcoderegex(this);"> <b id="kod" class="none"></b> 28. Powyższa zmiana wprowadza obsługę zdarzania onkeyup, które następuje po zwolnieniu klawisza. Dodatkowo, obok pola do wprowadzania kodu pocztowego, został dodany tekst z identyfikatorem kod. Ten tekst będzie sygnalizował użytkownikowi, czy wpisywany kod jest poprawny. 29. Konieczne jest zdefiniowanie funkcji sprawdzającej wpisany tekst po każdym puszczeniu klawisza. Dodaj funkcję checkzipcoderegex() do pliku ze skryptami. function checkzipcoderegex(e) var ZIPcode = /^[0-9]2-[0-9]3$/; if (ZIPcode.test(e.value)) document.getelementbyid("kod").innerhtml = "OK"; document.getelementbyid("kod").classname = "green"; document.getelementbyid("kod").innerhtml = "Źle"; document.getelementbyid("kod").classname = "red"; 30. W sekcji nagłówkowej dokumentu form.html dodaj do arkusza stylistycznego dodatkowe dwie reguły CSS dla klas green oraz red, które ustawiają kolor wybranych elementów odpowiednio na zielony i czerwony.

31. W ciele funkcji validate() zamień dla kodu pocztowego wywołanie funkcji checkstring() na wywołanie funkcji checkzipcoderegex(). Pamiętaj, aby zmienić również parametry wywołania funkcji. Sprawdź działanie formularza. 32. umożliwia łatwe iterowanie po elementach formularza. W sekcji nagłówkowej dokumentu form.html dodaj do arkusza stylistycznego dodatkowe dwie reguły CSS..correct border-style: dotted; border-color: green;.wrong border-style: dotted; border-color: red; 33. Następnie, dodaj do pliku form_check.js poniższą funkcję: function validate2(form) if (validate(form)) for (i = 0; i < form.elements.length; i++) form.elements[i].setattribute("class", "correct"); for (i = 0; i < form.elements.length; i++) form.elements[i].setattribute("class", "wrong"); 34. W ostatnim kroku w pliku form.html podmień wywołanie funkcji validate() na wywołanie funkcji validate2(). Przetestuj wprowadzone zmiany. 35. W dotychczasowych przykładach wyszukiwaliśmy elementy według ich identyfikatorów (getelementbyid()). Często jednak nie mamy takiej możliwości (np. dostęp do wierszy tabeli tworzonej w pętli). W takich przypadkach mogą się przydać metody przechodzenia po drzewie dokumentu. Wstaw poniższą tabelkę nad formularzem. <table> <tbody> <tr><td>wiersz 1</td></tr> <tr><td>wiersz 2</td></tr> <tr><td>wiersz 3</td></tr> <tr><td>wiersz 4</td></tr> <tr><td>wiersz 5</td></tr> <tr><td>wiersz 6</td></tr> <tr><td>wiersz 7</td></tr> </tbody> </table>

36. Aby uatrakcyjnić jej wygląd pokolorujemy co drugi wiersz. Dodaj do pliku ze skryptami poniższą funkcję. function alterrows(i, e) if (e) if (i % 2 == 1) e.setattribute("style", "background-color: Aqua;"); e = e.nextsibling; while (e && e.nodetype!= 1) e = e.nextsibling; alterrows(++i, e); 37. Następnie w pliku form.html dodaj w sekcji <script> jej wywołanie w następujący sposób: var sib = document.getelementsbytagname("tr")[0]; alterrows(1, sib); 38. Posłużyliśmy się metodą getelementsbytagname(), która wyszukuje wszystkie elementy o zadanej etykiecie. Metoda ta działa w kontekście elementu na którym jest wywołana, przeszukując wszystkie węzły drzewa znajdujące się w poniżej. Następnie wykorzystujemy metodę nextsibling, która zwraca następny węzeł będący rodzeństwem aktualnego. Innymi metodami pozwalającymi na przechodzenie po węzłach są firstchild, lastchild, previoussibling, parentnode oraz childnodes. Należy również mieć na uwadze, iż w drzewie dokumentu węzły to nie tylko elementy, ale też na przykład komentarze czy tekst! Informację o typie węzła przechowuje pole nodetype, którego wartość 1 oznacza element. 39. W kolejnym przykładzie pokażemy w jaki sposób można manipulować zawartością strony przy użyciu języka. Wstaw poniższe funkcje do pliku ze skryptami. Funkcje nextnode() oraz prevnode() zwracają najbliższy element w przód lub w tył. Funkcja swaprows() posłuży nam aby wstawić ostatni wiersz tabeli jako pierwszy. Zauważ, że mimo iż usuwamy element z dokumentu nie jest on niszczony i można ponownie wstawić go do dokumentu. function nextnode(e) while (e && e.nodetype!= 1) e = e.nextsibling; return e; function prevnode(e) while (e && e.nodetype!= 1) e = e.previoussibling; return e; function swaprows(b) var tab = prevnode(b.previoussibling); var tbody = nextnode(tab.firstchild); var lastnode = prevnode(tbody.lastchild); tbody.removechild(lastnode); var firstnode = nextnode(tbody.firstchild); tbody.insertbefore(lastnode, firstnode);

40. Wstaw do dokumentu pod tabelką a przed formularzem przycisk, który wywoła metodę zamiany. Zauważ, że metoda zadziała tylko wtedy, gdy element wywołujący zdarzenie będzie znajdował się bezpośrednio za tabelą. <button onclick="swaprows(this)">swap</button> 41. Kolejny przykład ilustruje wykorzystanie języka do kontroli długości wprowadzanego tekstu. W pliku form.html wprowadź, bezpośrednio po polu typu memo, obszar do wyświetlania licznika znaków. Zamień poniższy kod: <tr> <td>uwagi</td> <td> <textarea rows="5" cols="15" name="uwagi"></textarea> </td> </tr> na: <tr> <td>uwagi</td> <td> <textarea rows="5" cols="15" name="uwagi" onkeyup="cnt(this.form.uwagi, document.getelementbyid('zostalo'), 150)"> </textarea> </td> </tr> <tr> <td>pozostało <span id="zostalo">150</span> znaków</td> </tr> 42. Dodaj do pliku form_check.js kod funkcji cnt() i przetestuj wprowadzoną funkcjonalność. function cnt(form, msg, maxsize) if (form.value.length > maxsize) form.value = form.value.substring(0, maxsize); msg.innerhtml = maxsize - form.value.length; 43. Stwórz nowy plik form2.html i wypełnij go poniższą zawartością. Następnie zaimplementuj jego walidację w oparciu o dowolną, wybraną przez Ciebie bibliotekę (np. http://livevalidation.com/). <!doctype html> <html> <head> <meta charset="utf-8" /><title></title> </head> <body> <form name="dane_osobowe"><table> <tr><td>imię</td><td><input type="text" name="f_imie"></td></tr> <tr><td>e-mail</td><td><input type="text" name="f_email"></td></tr> <tr><td>kod pocztowy</td><td><input type="text" name="f_kod"></td></tr> <tr><td>miasto</td><td><input type="text" name="f_miasto"></td></tr> <tr><td colspan="2"><input type="submit" value="prześlij"></td></tr> </table></form> </body> </html>