Podstawy programowania w JavaScript - Programowanie
Transkrypt
Podstawy programowania w JavaScript - Programowanie
Podstawy programowania w języku języku JavaScript Część trzecia DOM — Document Object Model Autor Roman Simiński Kontakt [email protected] www.us.edu.pl/~siminski Niniejsze opracowanie zawiera skrót treści wykładu, lektura tych materiałów nie zastąpi uważnego w nim uczestnictwa. Opracowanie to jest chronione prawem autorskim. Wykorzystywanie jakiegokolwiek fragmentu w celach innych niż nauka własna jest nielegalne. Dystrybuowanie tego opracowania lub jakiejkolwiek jego części oraz wykorzystywanie zarobkowe bez zgody autora jest zabronione. Podstawy programowania w JavaScript DOM — Document Object Model Co to takiego DOM? DOM — Document Object Model — to specyfikacja określająca anatomię dokumentu wizualizowanego przez przeglądarkę oraz metody dostępu i modyfikowania elementów takiego dokumentu. DOM jest niezależny od języka JavaScript, dostęp i manipulowanie elementami strony (dokumentu) wizualizowanej w przeglądarce może być realizowany z wykorzystaniem innych języków programowania (np. VBScript firmy Microsoft). O ile Microsoft oraz twórcy innych przeglądarek zwykle dbają o zgodność własnych implementacji ECMAScript (czyli własnych JavaScriptów) ze standardem, o tyle DOM nie w każdej przeglądarce jest taki sam. Standard DOM został określony i jest wspierany przez konsorcjum W3C: „The W3C Document Object Model (DOM) is a platform and languageneutral interface that allows programs and scripts to dynamically access and update the content, structure, and style of a document” Copyright © Roman Simiński Strona : 2 Podstawy programowania w JavaScript DOM — Document Object Model Co DOM standaryzuje? DOM jest podzielony na 3 poziomy: Core DOM — standard dla każdego dokumentu z określoną strukturą, XML DOM - standard dla dokumentów XML, HTML DOM – standard dla dokumentów HTML. HTML HTML DOM DOM definiuje definiuje obiekty obiekty występujące występujące w w dokumencie dokumencie HTML, HTML, ich ich właściwości właściwości oraz oraz metody metody dostępu dostępu do do tych tych obiektów obiektów ii właściwości. właściwości. HTML HTML DOM DOM to to standard standard określający określający jak jak pobierać, pobierać, zmieniać, zmieniać, dodawać dodawać ii usuwać usuwać elementy elementy dokumentu dokumentu HTML. HTML. Copyright © Roman Simiński Strona : 3 Podstawy programowania w JavaScript DOM — Document Object Model DOM dzieli elementy dokumentu na cztery klasy Obiekty (ang. objects) — pojemniki reprezentujące określone elementy strony, zawierające właściwości oraz metody . Właściwości (ang. properties) — za ich pośrednictwem których można odczytywać i (choć nie zawsze) modyfikować określone cechy obiektów. Modyfikacja właściwości zwykle prowadzi do natychmiastowej zmiany zawartości ekranu przeglądarki. Metody (ang. methods) — przeznaczone są do wykonywania akcji dla obiektów te metody posiadających. Metody oga mieć charakter funkcyjny i udostępniać rezultat. Zdarzenia (ang. events) — wiążą akcję wykonywaną na danym obiekcie przez użytkownika lub samą przeglądarkę, z wykonaniem określonego fragmentu kodu programu. Copyright © Roman Simiński Strona : 4 Podstawy programowania w JavaScript DOM — Document Object Model Elementy DOM przyjmują postać drzewa Dokument HTML jest reprezentowany w postaci drzewa. Elementy dokumentu HTML stanowią węzły (ang. nodes) tego drzewa, zależności pomiędzy elementami są reprezentowane poprzez połączenia pomiędzy węzłami drzewa. Elementy dokumentu HTML są reprezentowane w postaci drzewa. Drzewo dokumentu HTML posiada swój korzeń, oraz liście, czyli elementy na najniższym poziomie hierarchii, nie posiadające podelementów. Copyright © Roman Simiński Strona : 5 Podstawy programowania w JavaScript DOM — Document Object Model Drzewo przykładowego dokumentu — struktura HTML <html> <html> <head> <head> <title>DOM <title>DOM ii JavaScript</title> JavaScript</title> </head> </head> <body> <body> <h1>DOM</h1> <h1>DOM</h1> <p>Document <p>Document Object Object Model</p> Model</p> </body> </body> </html> </html> html head head title Copyright © Roman Simiński body h1 p Strona : 6 Podstawy programowania w JavaScript DOM — Document Object Model Drzewo przykładowego dokumentu — struktura HTML, zależności <html> <html> <head> <head> <title>DOM <title>DOM ii JavaScript</title> JavaScript</title> </head> </head> <body> <body> <h1>DOM</h1> <h1>DOM</h1> <p>Document <p>Document Object Object Model</p> Model</p> </body> </body> </html> </html> html Korzeń Korzeń dokumentu dokumentu head head body title h1 p Liście Liście Copyright © Roman Simiński Strona : 7 Podstawy programowania w JavaScript DOM — Document Object Model Drzewo przykładowego dokumentu — struktura HTML, zależności <html> <html> <head> <head> <title>DOM <title>DOM ii JavaScript</title> JavaScript</title> </head> </head> <body> <body> <h1>DOM</h1> <h1>DOM</h1> <p>Document <p>Document Object Object Model</p> Model</p> </body> </body> </html> </html> Pierwszy Pierwszy potomek potomek html html html Drugi Drugi potomek potomek html html head head title Copyright © Roman Simiński body h1 p Strona : 8 Podstawy programowania w JavaScript DOM — Document Object Model Drzewo przykładowego dokumentu — struktura HTML, zależności <html> <html> <head> <head> <title>DOM <title>DOM ii JavaScript</title> JavaScript</title> </head> </head> <body> <body> <h1>DOM</h1> <h1>DOM</h1> <p>Document <p>Document Object Object Model</p> Model</p> </body> </body> </html> </html> Rodzic Rodzic head head html Rodzic Rodzic body body head head title Copyright © Roman Simiński body h1 p Strona : 9 Podstawy programowania w JavaScript DOM — Document Object Model Drzewo przykładowego dokumentu — struktura HTML, zależności <html> <html> <head> <head> <title>DOM <title>DOM ii JavaScript</title> JavaScript</title> </head> </head> <body> <body> <h1>DOM</h1> <h1>DOM</h1> <p>Document <p>Document Object Object Model</p> Model</p> </body> </body> </html> </html> html head head title Copyright © Roman Simiński Rodzeństwo Rodzeństwo body h1 p Strona : 10 Podstawy programowania w JavaScript DOM — Document Object Model Elementy drzewa hierarchii dokumentu Dziecko (ang. child) — element będący o jeden szczebel niżej w drzewie w stosunku do danego elementu. Potomek (ang. descendant) — element będący o jeden lub więcej szczebli niżej w drzewie w stosunku do danego elementu. Rodzic (ang. parent) — element o jeden szczebel wyżej w drzewie w stosunku do danego elementu. Przodek (ang. ancestor) — element będący o jeden lub więcej szczebli wyżej w drzewie w stosunku do danego elementu. Brat (ang. sibling) — element mający tego samego rodzica, co inny element; jeśli znajduje się obok niego, to jest to brat przylegający (ang. adjacent sibling). Copyright © Roman Simiński Strona : 11 Podstawy programowania w JavaScript DOM — Document Object Model Elementy dokumentu HTML <p>Document <p>Document Object Object Model</p> Model</p> Copyright © Roman Simiński p Element Element Document Object Model Zawartość Zawartość elementu elementu Strona : 12 Podstawy programowania w JavaScript DOM — Document Object Model Elementy dokumentu HTML a obiekty DOM <p>Document <p>Document Object Object Model</p> Model</p> Copyright © Roman Simiński p Węzeł Węzeł elementu elementu (element (element node) node) Document Object Model Węzeł Węzeł tekstu tekstu (text (text node) node) Strona : 13 Podstawy programowania w JavaScript DOM — Document Object Model Struktura dokumentu HTML a DOM <html> <html> <head> <head> <title>DOM <title>DOM ii JavaScript</title> JavaScript</title> </head> </head> <body> <body> <h1>DOM</h1> <h1>DOM</h1> <p>Document <p>Document Object Object Model</p> Model</p> </body> </body> </html> </html> html węzeł elementu węzeł tekstu head head Copyright © Roman Simiński body title h1 p DOM DOM i JavaScript DOM DOM Document Object Model Strona : 14 Podstawy programowania w JavaScript DOM — Document Object Model Struktura dokumentu HTML a obiekty i właściwości DOM <a <a href=”Adres href=”Adres URL” URL” title=”Tytuł”>Odsyłacz title=”Tytuł”>Odsyłacz <strong>hipertekstowy</strong></a> <strong>hipertekstowy</strong></a> węzeł elementu element: element: a węzeł tekstu węzeł atrubutu attribute: href attribute: attribute: title text: Adres Adres URL text: text: Tytuł text: text: Odsyłacz Odsyłacz element: element: strong text: hipertekstowy Copyright © Roman Simiński Strona : 15 Podstawy programowania w JavaScript DOM — Document Object Model Obiekty window i document Obiekt window — bazowy obiekt w DOM, reprezentuje okno przeglądarki, posiada właściwości i metody. Funkcje alert(), setInterval(), clearInterval(), confirm(), open() to tak naprawę metody obiektu window. Formalnie np. wywołanie funkcji alert() powinno wyglądać tak: window.alert( window.alert( "alert "alert to to metod metod obiektu obiektu window" window" ); ); Obiekt window posiada właściwość document — jest to obiekt reprezentujący dokument HTML wyświetlany przez przeglądarkę. Obiekt document — zawiera informacje o aktualnym dokumencie HTML i pozwala na dostęp do wszystkicj elementów strony. Formalnie, odwołanie do obiektu document powinno wyglądać tak: window.document.write( window.document.write( "document "document to to wła właśściwo ciwośśćć obiektu obiektu window" window" ); ); Copyright © Roman Simiński Strona : 16 Podstawy programowania w JavaScript DOM — Document Object Model Obiekt window i document — właściwości i metody Obiekt window — dokładny opis właściwości i metod dostępny np.: http://www.w3schools.com/htmldom/dom_obj_window.asp Obiekt document — dokładny opis właściwości i metod dostępny np.: http://www.w3schools.com/htmldom/dom_obj_document.asp Copyright © Roman Simiński Strona : 17 Podstawy programowania w JavaScript DOM — Document Object Model Obiekt document — kolekcje obiektów na stronie Kolekcja anchors[] — referencja do tablicy obiektów reprezentujących elementy ze znacznikiem a name i a id występujące na stronie. Kolekcja forms[] — referencja do tablicy obiektów reprezentujących formularze występujące na stronie. Kolekcja images[] — referencja do tablicy obiektów reprezentujących obrazy występujące na stronie (img). Kolekcja links[] — referencja do tablicy obiektów reprezentujących łączniki i hiperłącza występujące na stronie (a href). Każda Każda zz kolekcji kolekcji posiada posiada właściwość właściwość length length pozwalającą pozwalającą na na określenia określenia liczby liczby elementów elementów danego danego typu typu w w bieżącym bieżącym dokumencie. dokumencie. Copyright © Roman Simiński Strona : 18 Podstawy programowania w JavaScript DOM — Document Object Model Obiekt document — kolekcje obiektów na stronie Ile jest obiektów poszczególnych typów w bieżącym dokumencie: window.document.write( window.document.write( window.document.write( window.document.write( window.document.write( window.document.write( window.document.write( window.document.write( "Kotwice: ++ window.document.anchors.length "Kotwice: "" window.document.anchors.length ++ "" "" ); ); "Obrazki: " + window.document.images.length + " " ); "Obrazki: " + window.document.images.length + " " ); "Formularze: "Formularze: "" ++ window.document.forms.length window.document.forms.length ++ "" "" ); ); "Ł ++ window.document.links.length "Łąącza: cza: "" window.document.links.length ++ "" "" ); ); Ponieważ obiekt window jest domyślny, można używać wersji skróconej: document.write( document.write( document.write( document.write( document.write( document.write( document.write( document.write( Copyright © Roman Simiński "Kotwice: ++ document.anchors.length "Kotwice: "" document.anchors.length ++ "" "" ); ); "Obrazki: ++ document.images.length "Obrazki: "" document.images.length ++ "" "" ); ); "Formularze: " + document.forms.length + "" ); "Formularze: " + document.forms.length + "" ); "Ł ++ document.links.length "Łąącza: cza: "" document.links.length ++ "" "" ); ); Strona : 19 Podstawy programowania w JavaScript DOM — Document Object Model Jak odwoływać się do elementów drzewa — getElementsByTagName Odwołanie wg nazwy znacznika — getElementsByTagName <body> <body> <p>Paragraf <p>Paragraf pierwszy</p> pierwszy</p> <p>Paragraf <p>Paragraf drugi</p> drugi</p> <p>Paragraf <p>Paragraf trzeci</p> trzeci</p> </body> </body> document.getElementsByTagName( document.getElementsByTagName( 'p' 'p' )[ )[ 00 ]] document.getElementsByTagName( document.getElementsByTagName( 'p' 'p' )[ )[ 11 ]] document.getElementsByTagName( document.getElementsByTagName( 'p' 'p' )[ )[ 22 ]] liczba elementów danego znacznika w dokumencie — length document.getElementsByTagName( document.getElementsByTagName( 'p' 'p' ).length ).length Copyright © Roman Simiński Strona : 20 Podstawy programowania w JavaScript DOM — Document Object Model Jak odwoływać się do elementów drzewa — getElementById Odwołanie wg nazwy znacznika — getElementById <body> <body> <p <p id="pierwszy">Paragraf id="pierwszy">Paragraf pierwszy</p> pierwszy</p> <p <p id="drugi">Paragraf id="drugi">Paragraf drugi</p> drugi</p> <p <p id="trzeci">Paragraf id="trzeci">Paragraf trzeci</p> trzeci</p> </body> </body> document.getElementById( document.getElementById( "pierwszy" "pierwszy" )) document.getElementById( document.getElementById( "drugi" "drugi" )) document.getElementById( document.getElementById( "trzeci" "trzeci" )) Copyright © Roman Simiński Strona : 21 Podstawy programowania w JavaScript DOM — Document Object Model Jak odwołać się do tekstu znacznika — innerHTML Właściwość innerHTML — ta właściwość nie występuje w standardzie W3C ale działa. <body> <body> <p <p id="pierwszy">Paragraf id="pierwszy">Paragraf pierwszy</p> pierwszy</p> <p <p id="drugi">Paragraf id="drugi">Paragraf drugi</p> drugi</p> <p <p id="trzeci">Paragraf id="trzeci">Paragraf trzeci</p> trzeci</p> </body> </body> var var tekst tekst == document.getElementById( document.getElementById( "pierwszy" "pierwszy" ).innerHTML; ).innerHTML; alert( alert( "Paragraf "Paragraf 1: 1: "" ++ tekst tekst ); ); tekst tekst == document.getElementById( document.getElementById( "drugi" "drugi" ).innerHTML; ).innerHTML; alert( alert( "Paragraf "Paragraf 2: 2: "" ++ tekst tekst ); ); tekst tekst == document.getElementById( document.getElementById( "trzeci" "trzeci" ).innerHTML; ).innerHTML; alert( alert( "Paragraf "Paragraf 3: 3: "" ++ tekst tekst ); ); Copyright © Roman Simiński Strona : 22 Podstawy programowania w JavaScript DOM — Document Object Model Jak odwołać się do tekstu znacznika — nodeValue Właściwość nodeValue — ta właściwość określa wartość wierzchołka. <body> <body> <p <p id="pierwszy">Paragraf id="pierwszy">Paragraf pierwszy</p> pierwszy</p> <p <p id="drugi">Paragraf id="drugi">Paragraf drugi</p> drugi</p> <p <p id="trzeci">Paragraf id="trzeci">Paragraf trzeci</p> trzeci</p> </body> </body> element: element: p text: Paragraf pierwszy var var tekst tekst == document.getElementById( document.getElementById( "pierwszy" "pierwszy" ).firstChild.nodeValue; ).firstChild.nodeValue; alert( alert( "Paragraf "Paragraf 1: 1: "" ++ tekst tekst ); ); tekst tekst == document.getElementById( document.getElementById( "drugi" "drugi" ).firstChild.nodeValue; ).firstChild.nodeValue; alert( alert( "Paragraf "Paragraf 2: 2: "" ++ tekst tekst ); ); tekst tekst == document.getElementById( document.getElementById( "trzeci" "trzeci" ).firstChild.nodeValue; ).firstChild.nodeValue; alert( alert( "Paragraf "Paragraf 3: 3: "" ++ tekst tekst ); ); Copyright © Roman Simiński Strona : 23 Podstawy programowania w JavaScript DOM — Document Object Model Po elementach danego typu można iterować <body> <body> <p <p id="pierwszy">Paragraf id="pierwszy">Paragraf pierwszy</p> pierwszy</p> <p <p id="drugi">Paragraf id="drugi">Paragraf drugi</p> drugi</p> <p id="trzeci">Paragraf <p id="trzeci">Paragraf trzeci</p> trzeci</p> </body> </body> Niespecjalnie optymalna iteracja: for( for( var var ii == 0; 0; ii << document.getElementsByTagName( document.getElementsByTagName( 'p' 'p' ).length; ).length; i++ i++ )) {{ var var tekst tekst == window.document.getElementsByTagName( window.document.getElementsByTagName( 'p' 'p' )[ )[ ii ].innerHTML; ].innerHTML; window.alert( window.alert( "Paragraf "Paragraf "" ++ (( ii ++ 11 )) ++ ": ": "" ++ tekst tekst ); ); }} Lepsza wersja iteracji: var var nodes nodes == window.document.getElementsByTagName( window.document.getElementsByTagName( 'p' 'p' for( for( var var ii == 0; 0; ii << nodes.length; nodes.length; i++ i++ )) {{ var var tekst tekst == nodes[ nodes[ ii ].innerHTML; ].innerHTML; window.alert( window.alert( "Paragraf "Paragraf "" ++ (( ii ++ 11 )) ++ ": ": "" ++ tekst tekst }} Copyright © Roman Simiński ); ); ); ); Strona : 24 Podstawy programowania w JavaScript DOM — Document Object Model Iteracja po hiperłączach dokumentu <body> <body> <h2>Moje <h2>Moje ulubione ulubione strony</h2> strony</h2> <a <a <a <a <a <a href="http://www.cplusplus.com/">O href="http://www.cplusplus.com/">O jjęęzyku zyku C++</a><br C++</a><br /> /> href="http://gcc.gnu.org/">O kompilatorze GCC</a><br /> href="http://gcc.gnu.org/">O kompilatorze GCC</a><br /> href="http://www.codeblocks.org/">O href="http://www.codeblocks.org/">O śśrodowisku rodowisku Code::Blocks</a><br Code::Blocks</a><br /> /> <input <input type="button" type="button" value="Poka value="Pokażż ich ich adresy" adresy" onclick="pokazURL()"> onclick="pokazURL()"> <p <p id="w"></p> id="w"></p> </body> </body> function function pokazURL() pokazURL() {{ var var ww == document.getElementById( document.getElementById( "w" "w" ); ); w.innerHTML w.innerHTML == ""; ""; }} for( for( ii == 0; 0; ii {{ w.innerHTML w.innerHTML w.innerHTML w.innerHTML }} Copyright © Roman Simiński << document.links.length; document.links.length; ++i ++i )) += += document.links[ document.links[ ii ].innerHTML ].innerHTML ++ ": ": "; "; += += document.links[ document.links[ ii ].href ].href ++ "<br "<br \/>"; \/>"; Strona : 25 Podstawy programowania w JavaScript DOM — Document Object Model Pobieranie informacji z elementów typu input <body> <body> <input id="t1" <input type="text" type="text" id="t1" value="Warto value="Wartośśćć pola" pola" /> /> <input <input type="button" type="button" id="b1" id="b1" value="Warto value="Wartośśćć przycisku" przycisku" <p id="p1"></p> <p id="p1"></p> /> /> <script <script type="text/javascript"> type="text/javascript"> var var s1 s1 == "Pole "Pole tekstowe: tekstowe: "" ++ document.getElementById( document.getElementById( "t1" "t1" ).value; ).value; var var s2 s2 == "Przycisk: "Przycisk: "" ++ document.getElementById( document.getElementById( "b1" "b1" ).value; ).value; document.getElementById( document.getElementById( "p1" "p1" ).innerHTML ).innerHTML == s1 s1 ++ "<br\/>" "<br\/>" ++ s2; s2; </script> </script> </body> </body> Copyright © Roman Simiński Strona : 26 Podstawy programowania w JavaScript DOM — Document Object Model Pobieranie informacji z elementów typu input — przykład Zadaniem skryptu na stronie WWW jest obliczanie, ile średnio litrów paliwa spala pojazd na trasie 100 km. Wartość ta — zwana dalej średnim spalaniem — obliczana jest na podstawie ilości zużytego przez pojazd paliwa oraz liczby przejechanych kilometrów. przejechany dystans [km] — ilość paliwa [litry] 100 [km] — x [litry] spalanie = ( 100 * ilość paliwa ) / przejechany dystans Copyright © Roman Simiński Strona : 27 Podstawy programowania w JavaScript DOM — Document Object Model Pobieranie informacji z elementów typu input — przykład Komunikacja: <html> <html> <head> <head> </head> </head> Elementy Elementy typu typu input, input, zz których których będą będą pobrane pobrane dane dane <body> <body> <h2>Obliczanie <h2>Obliczanie śśredniego redniego spalania spalania na na 100 100 km</h2> km</h2> <p>Paliwo <p>Paliwo :: <input <input type="text" type="text" id="p" id="p" /> /> [litry]</p> [litry]</p> <p>Dystans: <p>Dystans: <input <input type="text" type="text" id="d" id="d" /> /> [kilometry]</p> [kilometry]</p> <input <input type="button" type="button" value="Oblicz" value="Oblicz" onclick="spalanie()" onclick="spalanie()" /> /> <p <p id="w"></p> id="w"></p> </body> </body> </html> </html> Copyright © Roman Simiński Strona : 28 Podstawy programowania w JavaScript DOM — Document Object Model Pobieranie informacji z elementów typu input — przykład Komunikacja: <html> <html> <head> <head> </head> </head> Paragraf Paragraf przewidziany przewidziany dla dla wyniku, wyniku, na na starcie starcie pusty pusty <body> <body> <h2>Obliczanie <h2>Obliczanie śśredniego redniego spalania spalania na na 100 100 km</h2> km</h2> <p>Paliwo <p>Paliwo :: <input <input type="text" type="text" id="p" id="p" /> /> [litry]</p> [litry]</p> <p>Dystans: <p>Dystans: <input <input type="text" type="text" id="d" id="d" /> /> [kilometry]</p> [kilometry]</p> <input <input type="button" type="button" value="Oblicz" value="Oblicz" onclick="spalanie()" onclick="spalanie()" /> /> <p <p id="w"></p> id="w"></p> </body> </body> </html> </html> Copyright © Roman Simiński Strona : 29 Podstawy programowania w JavaScript DOM — Document Object Model Pobieranie informacji z elementów typu input — przykład Komunikacja: <html> <html> <head> <head> </head> </head> Funkcja Funkcja obliczająca obliczająca średnie średnie spalanie, spalanie, aktywowana aktywowana naciśnięciem naciśnięciem przycisku przycisku Oblicz Oblicz <body> <body> <h2>Obliczanie <h2>Obliczanie śśredniego redniego spalania spalania na na 100 100 km</h2> km</h2> <p>Paliwo <p>Paliwo :: <input <input type="text" type="text" id="p" id="p" /> /> [litry]</p> [litry]</p> <p>Dystans: <p>Dystans: <input <input type="text" type="text" id="d" id="d" /> /> [kilometry]</p> [kilometry]</p> <input <input type="button" type="button" value="Oblicz" value="Oblicz" onclick="spalanie()" onclick="spalanie()" /> /> <p <p id="w"></p> id="w"></p> </body> </body> </html> </html> Copyright © Roman Simiński Strona : 30 Podstawy programowania w JavaScript DOM — Document Object Model Pobieranie informacji z elementów typu input — przykład Akcja: <html> <html> <head> <head> <script <script type="text/javascript"> type="text/javascript"> function function spalanie() spalanie() {{ var var pp == Number( Number( document.getElementById( document.getElementById( "p" "p" var d = Number( document.getElementById( "d" var d = Number( document.getElementById( "d" var var out out == document.getElementById( document.getElementById( "w" "w" ); ); Pobranie Pobranie wartości wartości zz pól pól wejściowych wejściowych próba próba (!) (!) zamiany zamiany na na liczby liczby ).value ).value ).value ).value ); ); ); ); if( if( dd != != 00 )) out.innerHTML out.innerHTML == "Spalanie: "Spalanie: "" ++ (( pp ** 100 100 )) // dd ++ "" l/100km"; l/100km"; else else out.innerHTML out.innerHTML == "Dystans "Dystans musi musi być być liczba liczba dodatni dodatniąą!"; !"; }} </script> </script> </head> </head> <body> <body> <h2>Obliczanie <h2>Obliczanie śśredniego redniego spalania spalania na na 100 100 km</h2> km</h2> <p>Paliwo <p>Paliwo :: <input <input type="text" type="text" id="p" id="p" /> /> [litry]</p> [litry]</p> <p>Dystans: <p>Dystans: <input <input type="text" type="text" id="d" id="d" /> /> [kilometry]</p> [kilometry]</p> <input type="button" value="Oblicz" onclick="spalanie()" <input type="button" value="Oblicz" onclick="spalanie()" /> /> <p <p id="w"></p> id="w"></p> </body> </body> </html> </html> Copyright © Roman Simiński Strona : 31 Podstawy programowania w JavaScript DOM — Document Object Model Pobieranie informacji z elementów typu input — przykład Akcja: <html> <html> <head> <head> <script <script type="text/javascript"> type="text/javascript"> function function spalanie() spalanie() {{ var var pp == Number( Number( document.getElementById( document.getElementById( "p" "p" var d = Number( document.getElementById( "d" var d = Number( document.getElementById( "d" var var out out == document.getElementById( document.getElementById( "w" "w" ); ); Pobranie Pobranie referencji referencji do do paragrafu paragrafu prezentacji prezentacji wyników wyników ).value ).value ).value ).value ); ); ); ); if( if( dd != != 00 )) out.innerHTML out.innerHTML == "Spalanie: "Spalanie: "" ++ (( pp ** 100 100 )) // dd ++ "" l/100km"; l/100km"; else else out.innerHTML out.innerHTML == "Dystans "Dystans musi musi być być liczba liczba dodatni dodatniąą!"; !"; }} </script> </script> </head> </head> <body> <body> <h2>Obliczanie <h2>Obliczanie śśredniego redniego spalania spalania na na 100 100 km</h2> km</h2> <p>Paliwo <p>Paliwo :: <input <input type="text" type="text" id="p" id="p" /> /> [litry]</p> [litry]</p> <p>Dystans: <p>Dystans: <input <input type="text" type="text" id="d" id="d" /> /> [kilometry]</p> [kilometry]</p> <input type="button" value="Oblicz" onclick="spalanie()" <input type="button" value="Oblicz" onclick="spalanie()" /> /> <p <p id="w"></p> id="w"></p> </body> </body> </html> </html> Copyright © Roman Simiński Strona : 32 Podstawy programowania w JavaScript DOM — Document Object Model Pobieranie informacji z elementów typu input — przykład Akcja: <html> <html> <head> <head> <script <script type="text/javascript"> type="text/javascript"> function function spalanie() spalanie() {{ var var pp == Number( Number( document.getElementById( document.getElementById( "p" "p" var d = Number( document.getElementById( "d" var d = Number( document.getElementById( "d" var var out out == document.getElementById( document.getElementById( "w" "w" ); ); Zabezpieczenie Zabezpieczenie przed przed dzieleniem dzieleniem przez przez zero, zero, obliczenia, obliczenia, wstawienie wstawienie wyniku wyniku do do par. par. wyjściowego wyjściowego ).value ).value ).value ).value ); ); ); ); if( if( dd != != 00 )) out.innerHTML out.innerHTML == "Spalanie: "Spalanie: "" ++ (( pp ** 100 100 )) // dd ++ "" l/100km"; l/100km"; else else out.innerHTML out.innerHTML == "Dystans "Dystans musi musi być być liczba liczba dodatni dodatniąą!"; !"; }} </script> </script> </head> </head> <body> <body> <h2>Obliczanie <h2>Obliczanie śśredniego redniego spalania spalania na na 100 100 km</h2> km</h2> <p>Paliwo <p>Paliwo :: <input <input type="text" type="text" id="p" id="p" /> /> [litry]</p> [litry]</p> <p>Dystans: <p>Dystans: <input <input type="text" type="text" id="d" id="d" /> /> [kilometry]</p> [kilometry]</p> <input type="button" value="Oblicz" onclick="spalanie()" <input type="button" value="Oblicz" onclick="spalanie()" /> /> <p <p id="w"></p> id="w"></p> </body> </body> </html> </html> Copyright © Roman Simiński Strona : 33 Podstawy programowania w JavaScript DOM — Document Object Model Pobieranie informacji z elementów typu input — przykład Weryfikacja danych: Pobierz Pobierz dane dane jako jako łańcuchy łańcuchy znaków znaków <script <script type="text/javascript"> type="text/javascript"> function function spalanie() spalanie() {{ var var pp == document.getElementById( document.getElementById( "p" "p" ).value; ).value; var var dd == document.getElementById( document.getElementById( "d" "d" ).value; ).value; var var out out == document.getElementById( document.getElementById( "w" "w" ); ); if( if( isNaN( isNaN( pp )) || || out.innerHTML out.innerHTML == else else {{ if( if( dd != != 00 )) out.innerHTML out.innerHTML else else out.innerHTML out.innerHTML }} isNaN( isNaN( dd )) )) "Dystans "Dystans ii ilo ilośśćć paliwa paliwa musz musząą być być liczbami!"; liczbami!"; == "Spalanie: "Spalanie: "" ++ (( pp ** 100 100 )) // dd ++ "" l/100km"; l/100km"; == "Dystans "Dystans musi musi być być liczba liczba dodatni dodatniąą!"; !"; }} </script> </script> Copyright © Roman Simiński Strona : 34 Podstawy programowania w JavaScript DOM — Document Object Model Pobieranie informacji z elementów typu input — przykład Weryfikacja danych: Sprawdź Sprawdź czy czy dane dane są są liczbami liczbami <script <script type="text/javascript"> type="text/javascript"> function function spalanie() spalanie() {{ var var pp == document.getElementById( document.getElementById( "p" "p" ).value; ).value; var var dd == document.getElementById( document.getElementById( "d" "d" ).value; ).value; var var out out == document.getElementById( document.getElementById( "w" "w" ); ); if( if( isNaN( isNaN( pp )) || || out.innerHTML out.innerHTML == else else {{ if( if( dd != != 00 )) out.innerHTML out.innerHTML else else out.innerHTML out.innerHTML }} isNaN( isNaN( dd )) )) "Dystans "Dystans ii ilo ilośśćć paliwa paliwa musz musząą być być liczbami!"; liczbami!"; == "Spalanie: "Spalanie: "" ++ (( pp ** 100 100 )) // dd ++ "" l/100km"; l/100km"; == "Dystans "Dystans musi musi być być liczba liczba dodatni dodatniąą!"; !"; }} </script> </script> Copyright © Roman Simiński Strona : 35 Podstawy programowania w JavaScript DOM — Document Object Model Pobieranie informacji z elementów typu input — przykład Wynik z wieloma miejscami po przecinku: <script <script type="text/javascript"> type="text/javascript"> function function spalanie() spalanie() {{ var var pp == document.getElementById( document.getElementById( "p" "p" ).value; ).value; var var dd == document.getElementById( document.getElementById( "d" "d" ).value; ).value; var var out out == document.getElementById( document.getElementById( "w" "w" ); ); if( if( isNaN( isNaN( pp )) || || out.innerHTML out.innerHTML == else else {{ if( if( dd != != 00 )) out.innerHTML out.innerHTML else else out.innerHTML out.innerHTML }} isNaN( isNaN( dd )) )) "Dystans "Dystans ii ilo ilośśćć paliwa paliwa musz musząą być być liczbami!"; liczbami!"; == "Spalanie: "Spalanie: "" ++ (( pp ** 100 100 )) // dd ++ "" l/100km"; l/100km"; == "Dystans "Dystans musi musi być być liczba liczba dodatni dodatniąą!"; !"; }} </script> </script> Copyright © Roman Simiński Strona : 36 Podstawy programowania w JavaScript DOM — Document Object Model Pobieranie informacji z elementów typu input — przykład Ustalenie liczby miejsc po przecinku: <script <script type="text/javascript"> type="text/javascript"> function function spalanie() spalanie() {{ var var pp == document.getElementById( document.getElementById( "p" "p" ).value; ).value; var var dd == document.getElementById( document.getElementById( "d" "d" ).value; ).value; var var out out == document.getElementById( document.getElementById( "w" "w" ); ); if( if( isNaN( isNaN( pp )) || || out.innerHTML out.innerHTML == else else {{ if( if( dd != != 00 )) {{ var var wynik wynik == (( out.innerHTML out.innerHTML }} else else out.innerHTML out.innerHTML }} isNaN( isNaN( dd )) )) "Dystans "Dystans ii ilo ilośśćć paliwa paliwa musz musząą być być liczbami!"; liczbami!"; pp ** 100 100 )) // d; d; == "Spalanie: "Spalanie: "" ++ wynik.toFixed( wynik.toFixed( 22 )) ++ "" l/100km"; l/100km"; == "Dystans "Dystans musi musi być być liczba liczba dodatni dodatniąą!"; !"; }} </script> </script> Copyright © Roman Simiński Strona : 37 Podstawy programowania w JavaScript DOM — Document Object Model Pobieranie informacji z elementów typu input — przykład Ustalenie liczby miejsc po przecinku: <script <script type="text/javascript"> type="text/javascript"> function function spalanie() spalanie() {{ var var pp == document.getElementById( document.getElementById( "p" "p" ).value; ).value; var var dd == document.getElementById( document.getElementById( "d" "d" ).value; ).value; var var out out == document.getElementById( document.getElementById( "w" "w" ); ); if( if( isNaN( isNaN( pp )) || || out.innerHTML out.innerHTML == else else {{ if( if( dd != != 00 )) {{ var var wynik wynik == (( out.innerHTML out.innerHTML }} else else out.innerHTML out.innerHTML }} isNaN( isNaN( dd )) )) "Dystans "Dystans ii ilo ilośśćć paliwa paliwa musz musząą być być liczbami!"; liczbami!"; Math.abs( Math.abs( pp )) ** 100 100 )) // Math.abs( Math.abs( dd ); ); == "Spalanie: "Spalanie: "" ++ wynik.toFixed( wynik.toFixed( 22 )) ++ "" l/100km"; l/100km"; == "Dystans "Dystans nie nie mo możżee być być zerowy!"; zerowy!"; }} </script> </script> Copyright © Roman Simiński Strona : 38 Podstawy programowania w JavaScript DOM — Document Object Model Manipulowanie zawartością elementów „Czyszczenie” elementów dokumentu — dodatkowy przycisk: <body> <body> <h2>Obliczanie <h2>Obliczanie śśredniego redniego spalania spalania na na 100 100 km</h2> km</h2> <p>Paliwo <p>Paliwo :: <input <input type="text" type="text" id="p" id="p" /> /> [litry]</p> [litry]</p> <p>Dystans: <p>Dystans: <input <input type="text" type="text" id="d" id="d" /> /> [kilometry]</p> [kilometry]</p> <input <input type="button" type="button" value="Oblicz" value="Oblicz" onclick="spalanie()"/> onclick="spalanie()"/> <input <input type="button" type="button" value="Wyczy value="Wyczyśść" ć" onclick="czyszczenie()"/> onclick="czyszczenie()"/> <p <p id="w"></p> id="w"></p> </body> </body> Copyright © Roman Simiński Strona : 39 Podstawy programowania w JavaScript DOM — Document Object Model Manipulowanie zawartością elementów „Czyszczenie” elementów dokumentu — funkcja obsługi zdarzenia: <script <script type="text/javascript"> type="text/javascript"> .. .. .. function function czyszczenie() czyszczenie() {{ document.getElementById( document.getElementById( document.getElementById( document.getElementById( document.getElementById( document.getElementById( }} "p" "p" "d" "d" "w" "w" ).value ).value == ""; ""; ).value ).value == ""; ""; ).innerHTML ).innerHTML == ""; ""; </script> </script> Copyright © Roman Simiński Strona : 40 Podstawy programowania w JavaScript DOM — Document Object Model Manipulowanie zawartością elementów „Czyszczenie” z ustawieniem focusa i zaznaczenia na edytorze paliwa: function function czyszczenie() czyszczenie() {{ document.getElementById( document.getElementById( "p" "p" ).value ).value == ""; ""; }} document.getElementById( document.getElementById( document.getElementById( document.getElementById( "d" "d" "w" "w" ).value ).value == ""; ""; ).innerHTML ).innerHTML == ""; ""; function function czyszczenie() czyszczenie() {{ var var pEdit pEdit == document.getElementById( document.getElementById( "p" "p" ); ); pEdit.value pEdit.value == ""; ""; pEdit.focus(); pEdit.focus(); }} document.getElementById( document.getElementById( document.getElementById( document.getElementById( "d" "d" "w" "w" ).value ).value == ""; ""; ).innerHTML ).innerHTML == ""; ""; Metody focus() i blur() odpowiednio ustawiają i usuwają zogniskowanie na elemencie. Metod select() pozwala na ustawienie zaznaczenia tekstu w polu edycyjnym, jednocześnie ustawiane jest zogniskowanie. Copyright © Roman Simiński Strona : 41 Podstawy programowania w JavaScript DOM — Document Object Model Manipulowanie zawartością elementów Ustawianie zogniskowania na po załadowaniu treści strony: .. .. .. <body <body onLoad='document.getElementById( onLoad='document.getElementById( .. .. .. <h2>Obliczanie <h2>Obliczanie śśredniego redniego spalania spalania na na .. .. .. "p" "p" ).focus()'> ).focus()'> 100 100 km</h2> km</h2> lub .. .. .. <body <body onLoad="document.getElementById( onLoad="document.getElementById( .. .. .. <h2>Obliczanie <h2>Obliczanie śśredniego redniego spalania spalania na na .. .. .. Copyright © Roman Simiński 'p' 'p' ).focus()"> ).focus()"> 100 100 km</h2> km</h2> Strona : 42 Podstawy programowania w JavaScript DOM — Document Object Model Rozwojowy element — koszt przejechania jednego kilometra Na razie totalny badziew — szacowanie w oparciu o stałą cenę paliwa :-/ .. .. .. Żeby Żeby to to miało miało sens, sens, ta ta cena cena powinna powinna if( if( isNaN( isNaN( pp )) || || isNaN( isNaN( dd )) )) dotyczyć dotyczyć odpowiedniego odpowiedniego paliwa paliwa ii być być aktualna aktualna out.innerHTML = "Dystans i ilo ś ć paliwa musz ą być liczbami!"; out.innerHTML = "Dystans i ilość paliwa muszą być liczbami!"; else else {{ if( if( dd != != 00 )) {{ var var wynik wynik == (( Math.abs( Math.abs( pp )) ** 100 100 )) // Math.abs( Math.abs( dd ); ); var var kilometr kilometr == (( wynik wynik // 100 100 )) ** 5.03 5.03 ;; wynik wynik == wynik.toFixed( wynik.toFixed( 22 ); ); kilometr = kilometr.toFixed( kilometr = kilometr.toFixed( 22 ); ); out.innerHTML out.innerHTML == "Spalanie: "Spalanie: "" ++ wynik wynik ++ "" l/100km<\/br>"; l/100km<\/br>"; out.innerHTML += "Szacunkowy koszt przejazdu out.innerHTML += "Szacunkowy koszt przejazdu 1km 1km to: to: "" ++ kilometr kilometr ++ "zł"; "zł"; }} else else out.innerHTML out.innerHTML == "Dystans "Dystans nie nie moze moze byc byc zerowy!"; zerowy!"; }} .. .. .. Copyright © Roman Simiński Strona : 43 Podstawy programowania w JavaScript DOM — Document Object Model Rozwojowy element — koszt przejechania jednego kilometra Wprowadzamy wybór rodzaju paliwa (olej napędowy, benzyna, gaz) <body> <body> <h2>Obliczanie <h2>Obliczanie śśredniego redniego spalania spalania na na 100 100 km</h2> km</h2> <p>Paliwo : <input type="text" id="p" /> <p>Paliwo : <input type="text" id="p" /> [litry]</p> [litry]</p> <p>Dystans: <input type="text" id="d" /> [kilometry]</p> <p>Dystans: <input type="text" id="d" /> [kilometry]</p> <p> <p> <input <input <input <input <input <input </p> </p> type="radio" type="radio" type="radio" type="radio" type="radio" type="radio" id="r_on" id="r_on" id="r_et" id="r_et" id="r_lpg" id="r_lpg" <input <input type="button" type="button" <input type="button" <input type="button" <p <p id="w"></p> id="w"></p> </body </body name="paliwo" name="paliwo" name="paliwo" name="paliwo" name="paliwo" name="paliwo" value="on" value="on" />olej />olej nap napęędowy dowy value="et" value="et" checked="checked" checked="checked" />benzyna />benzyna value="lpg" value="lpg" />gaz />gaz value="Oblicz" value="Oblicz" onclick="spalanie()"/> onclick="spalanie()"/> value="Wyczy ś ć" value="Wyczyść" onclick="czyszczenie()"/> onclick="czyszczenie()"/> Ten Ten przycisk przycisk będzie będzie domyślnie domyślnie zaznaczony. zaznaczony. Uwaga, Uwaga, są są kontrowersje kontrowersje związane związane zz wartością wartością przypisywaną przypisywaną do do atrybutu atrybutu checked, checked, przedstawione przedstawione rozwiązanie rozwiązanie jest jest zgodne zgodne zz W3C. W3C. W W ramach ramach grupy grupy przycisków przycisków oo tej tej samej samej wartości wartości atrybutu atrybutu name name tylko tylko jeden jeden przycisk przycisk może może być być zaznaczony. zaznaczony. Pozwala Pozwala to to na na stosowanie stosowanie wielu wielu różnych różnych grup grup przycisków przycisków radiowych. radiowych. Copyright © Roman Simiński Strona : 44 Podstawy programowania w JavaScript DOM — Document Object Model Rozwojowy element — koszt przejechania jednego kilometra Poprawka funkcji czyszczenia pól wprowadzania danych function function czyszczenie() czyszczenie() {{ document.getElementById( document.getElementById( document.getElementById( document.getElementById( document.getElementById( document.getElementById( }} document.getElementById( document.getElementById( document.getElementById( document.getElementById( document.getElementById( document.getElementById( "p" "p" "d" "d" "w" "w" ).value ).value == ""; ""; ).value = ""; ).value = ""; ).innerHTML ).innerHTML == ""; ""; "r_on" "r_on" "r_et" "r_et" "r_lpg" "r_lpg" ).checked ).checked ).checked ).checked ).checked ).checked == == == false; false; true; true; false; false; Dla Dla elementów elementów wejściowych wejściowych typu typu radio radio ii checkbox checkbox DOM DOM przewiduje przewiduje możliwość możliwość manipulowania manipulowania właściwością właściwością checked, checked, traktowaną traktowaną jako jako wartość wartość bool. bool. Inne właściwości obiektu typu przycisk radiowy (wg W3C): Copyright © Roman Simiński Strona : 45 Podstawy programowania w JavaScript DOM — Document Object Model Rozwojowy element — koszt przejechania jednego kilometra Poprawka funkcji obliczania średniego spalania: .. .. .. Wywołanie Wywołanie funkcji funkcji odpowiedzialnej odpowiedzialnej za za if( if( isNaN( isNaN( pp )) || || isNaN( isNaN( dd )) )) wyznaczenie wyznaczenie ceny ceny właściwej właściwej dla dla danego danego paliwa paliwa out.innerHTML = "Dystans i ilo ś ć paliwa musz ą być liczbami!"; out.innerHTML = "Dystans i ilość paliwa muszą być liczbami!"; else else {{ if( if( dd != != 00 )) {{ var var wynik wynik == (( Math.abs( Math.abs( pp )) ** 100 100 )) // Math.abs( Math.abs( dd ); ); var var kilometr kilometr == (( wynik wynik // 100 100 )) ** ustalCene() ustalCene() ;; wynik wynik == wynik.toFixed( wynik.toFixed( 22 ); ); kilometr = kilometr.toFixed( kilometr = kilometr.toFixed( 22 ); ); out.innerHTML out.innerHTML == "Spalanie: "Spalanie: "" ++ wynik wynik ++ "" l/100km<\/br>"; l/100km<\/br>"; out.innerHTML += "Szacunkowy koszt przejazdu out.innerHTML += "Szacunkowy koszt przejazdu 1km 1km to: to: "" ++ kilometr kilometr ++ "zł"; "zł"; }} else else out.innerHTML out.innerHTML == "Dystans "Dystans nie nie moze moze byc byc zerowy!"; zerowy!"; }} .. .. .. Copyright © Roman Simiński Strona : 46 Podstawy programowania w JavaScript DOM — Document Object Model Rozwojowy element — koszt przejechania jednego kilometra Funkcja wyznaczania ceny, badziewiarskie wersje w amatorskiej odsłonie: function function ustalCene() ustalCene() {{ if( if( document.getElementById( document.getElementById( return return 4.50; 4.50; if( if( document.getElementById( document.getElementById( return return 4.60; 4.60; if( document.getElementById( if( document.getElementById( return return 2.50; 2.50; }} "r_on" "r_on" ).checked ).checked )) "r_et" "r_et" ).checked ).checked )) "r_lpg" "r_lpg" ).checked ).checked )) function function ustalCene() ustalCene() {{ var var on on == document.getElementById( document.getElementById( var var et et == document.getElementById( document.getElementById( var lpg = document.getElementById( var lpg = document.getElementById( }} "r_on" "r_on" ); ); "r_et" "r_et" ); ); "r_lpg" "r_lpg" ); ); if( if( on.checked on.checked )) return return 4.50; 4.50; if( if( et.checked et.checked )) return return 4.60; 4.60; if( if( lpg.checked lpg.checked )) return return 2.50; 2.50; Copyright © Roman Simiński Strona : 47 Podstawy programowania w JavaScript DOM — Document Object Model Rozwojowy element — koszt przejechania jednego kilometra Poprawiamy interfejs i przypisujemy ceny do przycisków radiowych: .. .. .. <h2>Obliczanie <h2>Obliczanie śśredniego redniego spalania spalania na na 100 100 km</h2> km</h2> <p>Paliwo <p>Paliwo :: <input <input type="text" type="text" id="p" id="p" /> /> [litry]</p> [litry]</p> Formularz Formularz oo nazwie nazwie wybieraczPaliwa wybieraczPaliwa <p>Dystans: <p>Dystans: <input <input type="text" type="text" id="d" id="d" /> /> [kilometry]</p> [kilometry]</p> <form <form name="wybieraczPaliwa"> name="wybieraczPaliwa"> <input <input type="radio" type="radio" id="r_on" id="r_on" name="paliwo" name="paliwo" value="4.50" value="4.50" />olej />olej nap napęędowy dowy <input <input type="radio" type="radio" id="r_et" id="r_et" name="paliwo" name="paliwo" value="4.60" value="4.60" checked checked == "checked" "checked" />benzyna />benzyna <input <input type="radio" type="radio" id="r_lpg" id="r_lpg" name="paliwo" name="paliwo" value="2.50" value="2.50" />gaz />gaz </form> </form> <input <input type="button" type="button" value="Oblicz" value="Oblicz" onclick="spalanie()"/> onclick="spalanie()"/> <input <input type="button" type="button" value="Wyczy value="Wyczyśść" ć" onclick="czyszczenie()"/> onclick="czyszczenie()"/> <p <p id="w"></p> id="w"></p> .. .. .. Copyright © Roman Simiński Cena Cena jako jako wartość wartość zapisane zapisane w w obiekcie obiekcie przycisku przycisku radiowego radiowego Strona : 48 Podstawy programowania w JavaScript DOM — Document Object Model Rozwojowy element — koszt przejechania jednego kilometra Funkcja wyznaczania ceny, dalej badziew, ale w nieamatorskiej odsłonie: function function ustalCene() ustalCene() {{ for( for( ii == 0; 0; ii << document.wybieraczPaliwa.paliwo.length; document.wybieraczPaliwa.paliwo.length; ++i ++i )) if( if( document.wybieraczPaliwa.paliwo[ document.wybieraczPaliwa.paliwo[ ii ].checked ].checked )) return return Number( Number( document.wybieraczPaliwa.paliwo[ document.wybieraczPaliwa.paliwo[ ii ].value ].value ); ); }} Dla elementów formularza o tych samych nazwa tworzona jest tablica odpowiadających im obiektów: document.wybieraczPaliwa.paliwo document.wybieraczPaliwa.paliwo // // Dla Dla formularza formularza oo nazwie nazwie wybieraczPaliwa wybieraczPaliwa Liczba elementów w takiej tablicy: document.wybieraczPaliwa.paliwo.length document.wybieraczPaliwa.paliwo.length Dostęp do i-tego elementu tablicy: document.wybieraczPaliwa.paliwo[ document.wybieraczPaliwa.paliwo[ ii ]] Copyright © Roman Simiński Strona : 49 Podstawy programowania w JavaScript DOM — Document Object Model Rozwojowy element — koszt przejechania jednego kilometra Czasem inikatowa identyfikacja elementów nie jest konieczna: function function czyszczenie() czyszczenie() {{ document.getElementById( document.getElementById( document.getElementById( document.getElementById( document.getElementById( document.getElementById( }} document.getElementById( document.getElementById( document.getElementById( document.getElementById( document.getElementById( document.getElementById( "p" "p" "d" "d" "w" "w" "r_on" "r_on" "r_et" "r_et" "r_lpg" "r_lpg" function function czyszczenie() czyszczenie() {{ document.getElementById( document.getElementById( document.getElementById( document.getElementById( document.getElementById( document.getElementById( }} ).value ).value == ""; ""; ).value ).value == ""; ""; ).innerHTML ).innerHTML == ""; ""; "p" "p" "d" "d" "w" "w" ).checked ).checked ).checked ).checked ).checked ).checked == == == false; false; true; true; false; false; ).value ).value == ""; ""; ).value ).value == ""; ""; ).innerHTML ).innerHTML == ""; ""; for( for( ii == 0; 0; ii << document.wybieraczPaliwa.paliwo.length; document.wybieraczPaliwa.paliwo.length; ++i ++i document.wybieraczPaliwa.paliwo[ i ].checked = false; document.wybieraczPaliwa.paliwo[ i ].checked = false; document.wybieraczPaliwa.paliwo[ document.wybieraczPaliwa.paliwo[ 11 ].checked ].checked == true; true; Copyright © Roman Simiński )) Strona : 50 Podstawy programowania w JavaScript DOM — Document Object Model Rozwojowy element — koszt przejechania jednego kilometra Wtedy można zrezygnować z stosowania id: .. .. .. <form <form name="wybieraczPaliwa"> name="wybieraczPaliwa"> <input <input type="radio" type="radio" id="r_on" id="r_on" name="paliwo" name="paliwo" value="4.50" value="4.50" />olej />olej nap napęędowy dowy <input <input type="radio" type="radio" id="r_et" id="r_et" name="paliwo" name="paliwo" value="4.60" value="4.60" checked checked == "checked" "checked" />benzyna />benzyna <input <input type="radio" type="radio" id="r_lpg" id="r_lpg" name="paliwo" name="paliwo" value="2.50" value="2.50" />gaz />gaz </form> </form> .. .. .. .. .. .. <form <form name="wybieraczPaliwa"> name="wybieraczPaliwa"> <input <input type="radio" type="radio" name="paliwo" name="paliwo" value="4.50" value="4.50" />olej />olej nap napęędowy dowy <input <input type="radio" type="radio" name="paliwo" name="paliwo" value="4.60" value="4.60" checked checked == "checked" "checked" />benzyna />benzyna <input <input type="radio" type="radio" name="paliwo" name="paliwo" value="2.50" value="2.50" />gaz />gaz </form> </form> .. .. .. Copyright © Roman Simiński Strona : 51 Podstawy programowania w JavaScript DOM — Document Object Model Rozwojowy element — koszt przejechania jednego kilometra Dlaczego ta funkcja jest dalej badziewiasta? function function ustalCene() ustalCene() {{ for( for( ii == 0; 0; ii << document.wybieraczPaliwa.paliwo.length; document.wybieraczPaliwa.paliwo.length; ++i ++i )) if( if( document.wybieraczPaliwa.paliwo[ document.wybieraczPaliwa.paliwo[ ii ].checked ].checked )) return return Number( Number( document.wybieraczPaliwa.paliwo[ document.wybieraczPaliwa.paliwo[ ii ].value ].value ); ); }} Dlatego, że ceny paliw są i tak na stałe wpisane w kod: .. .. .. <form <form name="wybieraczPaliwa"> name="wybieraczPaliwa"> <input <input type="radio" type="radio" name="paliwo" name="paliwo" value="4.50" value="4.50" />olej />olej nap napęędowy dowy <input <input type="radio" type="radio" name="paliwo" name="paliwo" value="4.60" value="4.60" checked checked == "checked" "checked" />benzyna />benzyna <input <input type="radio" type="radio" name="paliwo" name="paliwo" value="2.50" value="2.50" />gaz />gaz </form> </form> .. .. .. Ceny Ceny paliw paliw powinny powinny być być uzyskiwane uzyskiwane samoczynnie samoczynnie od od odpowiedniej odpowiedniej usługi usługi sieciowej, sieciowej, oferującej oferującej aktualne aktualne ceny ceny paliw. paliw. Copyright © Roman Simiński Strona : 52 Podstawy programowania w JavaScript DOM — Document Object Model Odwołania tablicowe działają nie tylko dla przycisków radiowych Załóżmy obsługę wyboru nierozłącznych preferencji przed wysłaniem: Być Być może może całkiem całkiem sporo sporo pół pół znacznikowych znacznikowych <body> <body> <h2>Zaznacz <h2>Zaznacz swoje swoje hobby</h2> hobby</h2> <form <form name="wybieraczHobby"> name="wybieraczHobby"> <input <input type="checkbox" type="checkbox" name="hobby" name="hobby" <input <input type="checkbox" type="checkbox" name="hobby" name="hobby" <input <input type="checkbox" type="checkbox" name="hobby" name="hobby" <input type="checkbox" name="hobby" <input type="checkbox" name="hobby" <input <input type="button" type="button" <input <input type="button" type="button" <input <input type="button" type="button" </form> </form> <p <p id="wybor"></p> id="wybor"></p> </body> </body> value="narty" value="narty" value="rower" value="rower" value="rolki" value="rolki" value="tenis" value="tenis" value="Wyczy value="Wyczyśść" ć" value="Wszystko" value="Wszystko" value="Potwierd value="Potwierdźź"" />Narty />Narty />Rower<br />Rower<br /> /> />Rolki />Rolki />Tenis<br />Tenis<br /> /> onclick=" onclick="wyczysc()"/> wyczysc()"/> onclick="wszystko()"/> onclick="wszystko()"/> onclick=" onclick="potwierdzenie()"/> potwierdzenie()"/> Obsługa Obsługa przed przed wysłaniem wysłaniem Copyright © Roman Simiński Strona : 53 Podstawy programowania w JavaScript DOM — Document Object Model Odwołania tablicowe działają nie tylko dla przycisków radiowych Taka sobie prymitywna wersja: function function potwierdzenie() potwierdzenie() {{ var var napis napis == "Zazaczone "Zazaczone hobby: hobby: "; "; for( for( ii == 0; 0; ii << document.wybieraczHobby.hobby.length; document.wybieraczHobby.hobby.length; if( if( document.wybieraczHobby.hobby[ document.wybieraczHobby.hobby[ ii ].checked ].checked )) napis napis += += document.wybieraczHobby.hobby[ document.wybieraczHobby.hobby[ ii ].value ].value }} ++i ++i )) ++ '' '; '; document.getElementById( document.getElementById( "wybor" "wybor" ).innerHTML ).innerHTML == napis; napis; function function wyczysc() wyczysc() {{ for( for( ii == 0; 0; ii << document.wybieraczHobby.hobby.length; document.wybieraczHobby.hobby.length; ++i ++i document.wybieraczHobby.hobby[ i ].checked = false; document.wybieraczHobby.hobby[ i ].checked = false; document.getElementById( document.getElementById( "wybor" "wybor" ).innerHTML ).innerHTML == ""; ""; }} function function wszystko() wszystko() {{ for( for( ii == 0; 0; ii << document.wybieraczHobby.hobby.length; document.wybieraczHobby.hobby.length; ++i ++i document.wybieraczHobby.hobby[ document.wybieraczHobby.hobby[ ii ].checked ].checked == true; true; document.getElementById( "wybor" ).innerHTML = ""; document.getElementById( "wybor" ).innerHTML = ""; }} Copyright © Roman Simiński )) )) Strona : 54 Podstawy programowania w JavaScript DOM — Document Object Model Odwołania tablicowe działają nie tylko dla przycisków radiowych Wersja reagująca na zaznaczenie każdego pola znacznikowego: <body> <body> <h2>Zaznacz <h2>Zaznacz swoje swoje hobby</h2> hobby</h2> <form <form name="wybieraczHobby"> name="wybieraczHobby"> <input <input type="checkbox" type="checkbox" name="hobby" name="hobby" value="narty" value="narty" onclick="ustawWybor()" onclick="ustawWybor()" />Narty />Narty <input type="checkbox" name="hobby" value="rower" onclick="ustawWybor()"/>Rower<br <input type="checkbox" name="hobby" value="rower" onclick="ustawWybor()"/>Rower<br /> /> <input type="checkbox" name="hobby" value="rolki" onclick="ustawWybor()"/>Rolki <input type="checkbox" name="hobby" value="rolki" onclick="ustawWybor()"/>Rolki <input <input type="checkbox" type="checkbox" name="hobby" name="hobby" value="tenis" value="tenis" onclick="ustawWybor()"/>Tenis<br onclick="ustawWybor()"/>Tenis<br /> /> <input value="Wyczy onclick=" <input type="button" type="button" value="Wyczyśść" ć" onclick="ustaw( ustaw( false false )"/> )"/> <input type="button" value="Wszystko" onclick="ustaw( true )"/> <input type="button" value="Wszystko" onclick="ustaw( true )"/> <input type="button" value="Potwierd <input type="button" value="Potwierdźź"" onclick=" onclick="potwierdzenie()"/> potwierdzenie()"/> </form> </form> <p <p id="wybor"></p> id="wybor"></p> </body> </body> Copyright © Roman Simiński Strona : 55 Podstawy programowania w JavaScript DOM — Document Object Model Odwołania tablicowe działają nie tylko dla przycisków radiowych Wersja reagująca na zaznaczenie każdego pola znacznikowego: function function potwierdzenie() potwierdzenie() {{ var var komunikat komunikat == document.getElementById( document.getElementById( "wybor" "wybor" ).innerHTML; ).innerHTML; if( komunikat == "" ) if( komunikat == "" ) komunikat komunikat == "Nie "Nie lubisz lubisz żżadnych adnych zz tych tych rzeczy..." rzeczy...";; alert( alert( komunikat komunikat ); ); }} function function ustawWybor() ustawWybor() {{ var var napis napis == ""; ""; for( for( ii == 0; 0; ii << document.wybieraczHobby.hobby.length; document.wybieraczHobby.hobby.length; ++i ++i )) if( document.wybieraczHobby.hobby[ i ].checked ) if( document.wybieraczHobby.hobby[ i ].checked ) napis napis += += document.wybieraczHobby.hobby[ document.wybieraczHobby.hobby[ ii ].value ].value ++ '' '; '; }} if( if( napis napis != != "" "" )) napis napis == "Zazaczone "Zazaczone hobby: hobby: "" ++ napis; napis; document.getElementById( document.getElementById( "wybor" "wybor" ).innerHTML ).innerHTML == napis; napis; function function ustaw( ustaw( naTak naTak )) {{ for( for( ii == 0; 0; ii << document.wybieraczHobby.hobby.length; document.wybieraczHobby.hobby.length; ++i ++i )) document.wybieraczHobby.hobby[ i ].checked = naTak; document.wybieraczHobby.hobby[ i ].checked = naTak; ustawWybor(); ustawWybor(); }} Copyright © Roman Simiński Strona : 56