Aplikacje internetowe - laboratorium

Podobne dokumenty
Aplikacje WWW - laboratorium

Aplikacje internetowe laboratorium JavaScript

Aplikacje WWW - laboratorium

Aplikacje WWW - laboratorium

Aplikacje internetowe laboratorium JavaScript

Zajęcia 4 - Wprowadzenie do Javascript

Wykład 03 JavaScript. Michał Drabik

Dokumentacja Skryptu Mapy ver.1.1

Zaawansowane aplikacje internetowe

Zdarzenia Zdarzenia onload i onunload

Aplikacje internetowe - laboratorium

Aplikacje WWW - laboratorium

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

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

JAVAScript w dokumentach HTML (2)

Aplikacje WWW - laboratorium

DOM (Document Object Model)

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

Funkcje i instrukcje języka JavaScript

Przykład integracji kalkulatora mbank RATY na platformie IAI

plansoft.org Zmiany w Plansoft.org

Wybrane znaczniki HTML

Laboratorium 7 Blog: dodawanie i edycja wpisów

Aplikacje WWW - laboratorium

Podstawy JavaScript ćwiczenia

Rys.2.1. Drzewo modelu DOM [1]

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

LABORATORIUM 2 WSTĘP DO SIECI TELEINFORMATYCZNYCH TABELE I FORMULARZE

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

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

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

Ćwiczenia laboratoryjne nr 8 Podstawy języka XML.

Pierwsza strona internetowa

Wprowadzenie do Internetu Zajęcia 5

XML extensible Markup Language. część 5

SSK - Techniki Internetowe

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

BAZY DANYCH Panel sterujący

Specyfikacja techniczna dot. mailingów HTML

Modele danych walidacja widoki zorientowane na model

Referat z przedmiotu Technologie Internetowe SPIS TREŚCI

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

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

Instrukcja zarządzania kontem przedsiębiorstwa w serwisie internetowym

Budowa dokumentu HTML 5

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

Podręcznik Użytkownika LSI WRPO

Przygotowanie formularza do wypożyczenia filmu:

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

Budowa aplikacji wielowarstwowych. Zastosowanie Kaskadowych arkuszy stylów (CSS)

Aplikacje internetowe

Podręcznik użytkownika Wprowadzający aplikacji Wykaz2

za pomocą: definiujemy:

BAZY DANYCH Formularze i raporty

Formularze w programie Word

Instrukcja rejestracji świadczeniodawcy

Laboratorium 6 Tworzenie bloga w Zend Framework

Elektroniczny Urząd Podawczy

Pozycjonowanie i poruszanie warstw

Zawartość specyfikacji:

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

WOJEWÓDZTWO PODKARPACKIE

etrader Pekao Podręcznik użytkownika Strumieniowanie Excel

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

JAVAScript w dokumentach HTML (1) JavaScript jest to interpretowany, zorientowany obiektowo, skryptowy język programowania.

PWI Instrukcja użytkownika

CZYM JEST JAVASCRIPT?

Umieszczanie kodu. kod skryptu

TECHNOLOGIE SIECI WEB

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


Bootstrap. Tworzenie serwisów Web 2.0. dr inż. Robert Perliński

Formularze w PHP dla początkujących

Witryny i aplikacje internetowe

Portal Personelu Medycznego Global Services Sp. z o.o.

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

Krok 1: Stylizowanie plakatu

JAVASCRIPT (cz. IV) ĆWICZENIA DO SAMODZIELNEGO WYKONANIA materiały dydaktyczne dla słuchaczy opracowanie: by Arkadiusz Gawełek, Łódź

Przetwarzanie dokumentów XML i zaawansowane techniki WWW Zdarzenia w JavaScript (Zajęcia r.)

Podręcznik użytkownika Publikujący aplikacji Wykaz2

Podstawy technologii WWW

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

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

LeftHand Sp. z o. o.

INSTRUKCJA Panel administracyjny

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

Aplikacje internetowe laboratorium XML, DTD, XSL

Instrukcja rejestracji organizacji w podsystemie Generator Wniosko w Aplikacyjnych (GWA) Systemu Informatycznego NAWIKUS

Tworzenie stron internetowych w kodzie HTML Cz 5

Instrukcja użytkownika systemu medycznego

HTML (HyperText Markup Language)

Laboratorium 1 Wprowadzenie do PHP

How To? Konfiguracja podglądu strumienia z kamer IP ACTi

Zakres treści Czas. 2 Określenie charakteru i tematyki strony. Rodzaje witryn. Projekt graficzny witryny. Opracowanie skryptów

Szczegóły dotyczące kolokwium nr 1

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

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

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

Instrukcja do programu Do7ki 1.0

Transkrypt:

Aplikacje internetowe - laboratorium Język JavaScript Celem ćwiczenia jest przygotowanie formularza HTML z wykorzystaniem języka JavaScript. 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: formularz.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 formularz.html powinna być następująca: <html> <head> <title>javascript</title> <meta http-equiv="content-type" content="text/html; charset=windows-1250"> </head> <body> <form name="dane_osobowe"> <table border=0> <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" align="center"> <input type="button" value="przeslij"></td></tr> </table> </form> </body> </html>

Plik jest wyświetlany przez przeglądarkę w następujący sposób 3. W pliku form_check.js zostaną umieszczone definicje funkcji, które będą sprawdzały elementarne warunki, jakie powinny spełniać wartości wprowadzane do formularza. Sprawdzana powinna być długość napisu, format kodu pocztowego oraz adresu poczty internetowej. Początkowo, plik zawiera jedną funkcję sprawdzającą, czy pole jest puste. // zwraca wartosc true jesli przekazany argument to pusty lancuch function isempty(str) if (str.length == 0) return true

4. Dodaj do powyższego kodu funkcję, która sprawdzi, czy zgłaszając formularz użytkownik wypełnił wymagane pole Imię function validate(form) if (isempty(form.elements["f_imie"].value)) alert("podaj imię!") return true 5. Dodaj do nagłówka HTML w pliku formularz.html odwołanie do zewnętrznego pliku (form_check.js) zawierającego skrypt w języku JavaScript: <html> <head> <title>javascript</title> <meta http-equiv="content-type" content="text/html; charset=windows-1250"> <script src="form_check.js"></script> </head> <body> 6. Dodaj do przycisku obsługę zdarzenia naciśnięcia przycisku. Właściwy fragment kodu powinien mieć postać: <input type="button" value="przeslij" onclick="return validate(this.form)"> 7. Uruchom formularz w przeglądarce. Przetestuj działanie formularza próbując zgłosić formularz bez wypełnienia pola Imię.

8. Formularz nadal można łatwo oszukać, wpisując do pola Imię 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. // zwraca wartosc true jesli przekazany argument // to ciag bialych znakow 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) return true 9. Zmodyfikuj funkcję validate() w taki sposób, aby przy sprawdzaniu imienia uwzględnić także funkcję iswhitespace(). function validate(form) if (isempty(form.elements["f_imie"].value) iswhitespace(form.elements["f_imie"].value)) alert("podaj imię!") return true 10. Sprawdź, czy walidacja działa poprawnie. 11. 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() // zwraca wartosc prawda jesli przekazany argument to niepusty lancuch, // ktory nie zawiera samych bialych znakow function checkstring(str, msg) if ( iswhitespace(str) isempty(str)) alert(msg) return true

12. Zmień funkcję validate() dodając sprawdzanie poprawności nazwiska, ulicy i miasta. function validate(form) return ( checkstring(form.elements["f_imie"].value, 'Błędne imię') && checkstring(form.elements["f_nazwisko"].value,' Błędne nazwisko') && checkstring(form.elements["f_kod"].value,' Błędny kod pocztowy') && checkstring(form.elements["f_ulica"].value,' Błędna ulica/osiedle') && checkstring(form.elements["f_miasto"].value,' Błędne miasto') ) 13. Sprawdź działanie formularza, spróbuj przesłać formularz bez podania nazwy ulicy lub nazwy miasta

14. 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. // zwraca wartosc prawda jesli przekazany // argument to poprawny adres email 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") return true 15. Aby uruchomić weryfikację adresu email, konieczna jest modyfikacja funkcji validate() function validate(form) return ( checkstring(form.elements["f_imie"].value, 'Błędne imię') && checkstring(form.elements["f_nazwisko"].value,'błędne nazwisko') && checkemail(form.elements["f_email"].value) && checkstring(form.elements["f_kod"].value,'błędny kod pocztowy') && checkstring(form.elements["f_ulica"].value,'błędna ulica/osiedle') && checkstring(form.elements["f_miasto"].value,'błędne miasto') )

16. 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. Zwróć uwagę, aby nazwa pola do wyświetlania błędów różniła się od nazwy pola do wprowadzania danych tylko pierwszą literą. <table border=0> <tr> <td>imię</td> <td><input type=text name="f_imie"><span class="err" id="e_imie"/></td> </tr> 17. Dodaj w nagłówku regułę CSS do poprawnego formatowania komunikatu o błędzie <style> span.err color : red; font-weight : bold; padding-left : 5px </style> 18. 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() return true 19. Konieczna jest także modyfikacja funkcji validate() function validate(form) return ( checkstringandfocus(form.elements["f_imie"], 'Błędne imię') && checkstring(form.elements["f_nazwisko"].value,'błędne nazwisko') && checkemail(form.elements["f_email"].value) && checkstring(form.elements["f_kod"].value,'błędny kod pocztowy') && checkstring(form.elements["f_ulica"].value,'błędna ulica/osiedle') && checkstring(form.elements["f_miasto"].value,'błędne miasto') )

20. 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 = "" 21. Ostatnim krokiem tej części ćwiczenia jest wskazanie miejsca, w którym funkcja starttimer() ma zostać uruchomiona. Zmodyfikuj definicję funkcji checkstringandfocus() w następujący sposób. var errorfieldname = "e_" + obj.name.substr(2,obj.name.length) if ( iswhitespace(str) isempty(str)) document.getelementbyid(errorfieldname).innerhtml = msg starttimer(errorfieldname) obj.focus() 22. Uruchom formularz i przetestuj działanie mechanizmu raportowania błędów. 23. Kolejnym krokiem ćwiczenia będzie rozbudowanie formularza w taki sposób, aby pole Nazwisko panieńskie 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 radiowego kobieta/mężczyzna. W zależności od kierunku zmiany pole Nazwisko panieńskie 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.

24. Dodaj do pliku formularz.html tuż przed zamknięciem elementu body kod JavaScript 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> </body> 25. 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" style="visibility:visible;"> <input type=text name="f_nazwisko_p"> </span> 26. 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. Dotychczasowy kod: <input name="f_plec" value="f_k" checked type="radio"/> <input name="f_plec" value="f_m" type="radio"/> zastąp przez: <input name="f_plec" value="f_k" checked type="radio" onclick="showelement('nazwiskopanienskie')"/> <input name="f_plec" value="f_m" type="radio" onclick="hideelement('nazwiskopanienskie')"/>

27. Uruchom formularz w przeglądarce i sprawdź jego działanie. 28. Język JavaScript 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. // zwraca wartosc prawda jesli przekazany argument // to poprawny adres email 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)) return true; alert("podaj właściwy e-mail");

29. 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 <td><input type=text name="f_kod"></td> zastąp przez: <td width="200"> <input type=text name="f_kod" onkeyup="checkzipcoderegex(this);"> <b id="kod" class="none"></b> </td> 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. 30. Konieczne jest zdefiniowanie funkcji sprawdzającej wpisany tekst po każdym puszczeniu klawisza. Dodaj funkcję checkzipcoderegex() do pliku ze skryptami. Kod tej funkcji znajduje się poniżej. 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"; return true; document.getelementbyid("kod").innerhtml = "Źle"; document.getelementbyid("kod").classname = "red"; ; 31. W sekcji nagłówkowej dokumentu formularz.html dodaj do arkusza stylistycznego dodatkowe dwie reguły CSS <style type="text/css"> span.err color : red; font-weight : bold; padding-left : 5px.green color : green.red color : red </style>

32. W ciele funkcji validate() (plik form_check.js) zamień wywołanie funkcji checkstring(form.elements["f_kod"].value,' Błędny kod pocztowy') na checkzipcoderegex(form.elements["f_kod"]). Sprawdź działanie formularza. 33. JavaScript umożliwia łatwe iterowanie po elementach formularza. W sekcji nagłówkowej dokumentu formularz.html dodaj do arkusza stylistycznego dodatkowe dwie reguły CSS <style type="text/css"> span.err color : red; font-weight : bold; padding-left : 5px.green color : green.red color : red.correct border-style: dotted; border-color: green.wrong border-style: dotted; border-color: red </style> 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");

W ostatnim kroku w pliku formularz.html podmień wywołanie funkcji validate(form) w momencie kliknięcia przycisku Przeslij na wywołanie funkcji validate2(form). Przetestuj wprowadzone zmiany. 34. 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> <form name="dane_osobowe"> Aby uatrakcyjnić jej wygląd pokolorujemy co drugi wiersz. Dodaj do pliku ze skryptami poniższy kod, 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); a następnie w pliku formularz.html dodaj w sekcji script jej wywołanie. <script type="text/javascript"> var sib = document.getelementsbytagname("tr")[0]; alterrows(1, sib); 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.

35. W tym przykładzie pokażemy w jaki sposób można manipulować zawartością strony przy użyciu języka JavaScript. Wstaw poniższe funkcje do pliku ze skryptami. 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); Dwie pierwsze funkcje zwracają najbliższy element w przód lub w tył. Kolejna funkcja 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. 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ą. </table> <button onclick="swaprows(this)">swap</button> <form name="dane_osobowe"> 36. Kolejny przykład ilustruje wykorzystanie języka JavaScript do kontroli długości wprowadzanego tekstu. W pliku formularz.html wprowadź, bezpośrednio po polu typu memo, obszar do wyświetlania licznika znaków: <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> Dodaj do pliku form_check.js kod funkcji cnt(): function cnt(form, msg, maxsize) if (form.value.length > maxsize) form.value = form.value.substring(0,maxsize); msg.innerhtml = maxsize - form.value.length; Przetestuj wprowadzoną funkcjonalność.