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