Podstawy JS, cz. 2: JS a HTML |
2.1 Jak umieszcza się skrytpty w dokumencie HTML? |
Istnieje kilka sposobów, aby wstawić skrypt do swojej strony. W większości przypadków skrypt jest umieszczany w całości wewnątrz dokumentu HTML. A oto pierwszy sposób: |
2.1.1 W znacznikach SCRIPT |
Najprostszą metodą wstawiania skryptów jest umieszczenie poleceń pomiędzy znacznikami SCRIPT w taki sposób:
<script language="JavaScript" type="text/javascript">
<!--
Tutaj polecenia skryptu...
</script>
Atrybut LANGUAGE określa język, w jakim napisany został skrypt. Z innych języków mógłby to być np. VBscript (promowany przez Microsoft). Jeśli nie określi się tego atrybutu NN i IE uzna, że to JS.
Atrybut TYPE ma takie samo znaczenie (choć inaczej określa się w nim język), tylko, że jest ignorowany przez praktycznie wszystkie przeglądarki. ("z ostatniej chiwli": wygląda na to, że MSIE5 jednak honoruje ten atrybut) Jest za to wymagany przez specyfikację HTML
Cały skrypt jest objęty znakami komentarza (<!-- i --> ), co gwarantuje, że kod nie zostanie wyświetlony na ekranie nawet przez stare przeglądarki nie obsługujące JS.
Polecenia zawarte w skrypcie zostaną wykonane natychmiast, chyba że są to deklaracje funkcji. Jeżeli chcemy właśnie zdefiniować funckje, które będą wykorzystywane później, warto umieścić cały skrypt jeszcze w nagłówku, przed </HEAD> .
Możliwe jest jednak odroczenie wykonania skryptu do momentu załadowania całego dokumentu za pomocą dodatkowego atrybutu defer . Daje on oczekiwany efekt w przeglądarkach MSIE4+, ale w innych pojawiają się problemy. Dlatego radzę raczej unikać tego sposobu i wykorzystywać atrybut onload znacznika body (p. następny punkt).
[ Powrót na górę ]
|
2.1.2 Z atrybutem onClick itp. |
W zasadzie wszystkie elementy dokumentu HTML generują pewne zdarzenia, gdy wystąpią określone okoliczności. Z tymi zdarzeniami można powiązać pewne łańcuchy poleceń JS. Tak np. możemy chcieć, aby w momencie, gdy kursor myszki znajdzie się nad obrazkiem zmieniała się jego zawartość. Wygląda to tak:
<IMG SRC="coś tam" eventHandler="polecenie 1; polecenie 2; polecenie 3">
Oczywiście nie musi to być obrazek, może to byc równie dobrze link, przycisk albo po prostu kilka słów (chyba, że chcemy, aby skrypt działał w Netscape'ie - wtedy musi to być jeden z następujących tagów: A , AREA , INPUT , LAYER , ILAYER , body lub warstwa określona za pomocą stylów).
W miejsce eventHandler należy wstawić odpowiednie określenie zdarzenia. Oto lista najużyteczniejszych zdarzeń:
Event handler |
Opis |
onClick |
klinięcie myszką na dany element |
onFocus |
wybranie danego pola formularza |
onBlur |
odwrotne do onFocus |
onChange |
zmiana zawartości elementu formularza |
onSelect |
gdy zawartość pola formularza zostaje wybrana |
onMouseOver |
gdy kursor wejdzie nad element |
onMouseOut |
gdy kursor opuści obszar nad elementem |
onLoad |
gdy dokument jest ładowany (dotyczy BODY oraz obiektu window ) |
onUnload |
gdy dana strona jest opuszczana (dotyczy BODY oraz obiektu window ) |
Istnieje więcej zdarzeń, o których można przeczytać w bardziej szczegółwoych opisach JS (zob. linki).
Gdy poleceń jest więcej niz jedno, należy je odzielać średnikami. Można tu oczywiście wywołąc odpowiednią funkcję. Jeśli w poleceniach konieczne jest użycie cudzysłowów "" należy je zastąpić pojedynczymi apostrofami '' .
[ Powrót na górę ]
|
2.1.3 W znaczniku SCRIPT FOR="nazwa" EVENT="eventHandler" |
Skrytpy obsługujące określone zdarzenia można też wstawiać w następujący sposób:
<script for="nazwa" event="eventHandler" language="JavaScript"
type="text/javascript">
<!--
Polecenia...
</script>
Zasady określania zdarzeń są takie same, jak w poprzednim punkcie. W miejsce nazwy trzeba wpisać identyfikator (ID="nazwa" ) nadany elementowi, dla którego piszemy skrypt.
Uwaga! Ten sposób czasem zawodzi w Netscape'ie!
[ Powrót na górę ]
|
2.1.4 Z osobnego pliku |
Uwaga! Ten sposób wstawiania skryptów nie działa w IE3. Należy więc zastanowić się, czy bardziej zależy nam na tym, aby skrypty działały także w tej przeglądarce, czy też chcemy zmniejszyć ilość kodu, który odwiedzający naszą stronę musi ściągnąc z serwera. Niewielki udział IE3 pośród używanych obecnie przeglądarek oraz korzyści wynikające z możliwości przerzucenia powtarzającego się kodu JS do osobnego pliku w większości wypadków przemawiają za wyborem drugiej opcji. Tak też zrobiłem przygotowując tę stronę - dlatego przykłady skryptów nie będą działać w IE3.
Skrytpty mogą być umieszczone w osobnych plikach o rozszerzeniu js. Wtedy w znaczniku <SCRIPT> dodajemy atrybut SRC="url" , gdzie url to adres (względny lub absolutny) pliku z kodem JS. W tym pliku nie należy umieszczać żadnych znaczników HTML, gdyż spowoduje to błędy. Teoretycznie (zgodnie ze specyfikacją HTML 4.0) stronę kodową użytą w pliku ze skryptem określa atrybut CHARSET , np: CHARSET="iso-8859-2" . Jednak ani IE, ani NN nie respektują go i w wersjach dla Win95 przyjmują najczęściej jako stronę kodową windows-1250. Nie sprawdzałem, jak zachowują się przeglądarki na innych platformach systemowych. Radzę poeksperymentować, albo... nie używać polskich znaków.
Nie można pominąć znacznika końcowego </SCRIPT> . Między te znaczniki można wpisać polecenia, które zostaną wykonane tylko wtedy, jeśli podany plik nie będzie dostępny. Wyglądałoby to więc mniej więcej tak:
<script src="pliczek.js" language="JavaScript" type="text/javascript">
<!--
document.write("Oj, chyba mój pliczek gdzieś zniknął :(((")
</script>
Warto korzystać z możliwości podania poleceń wykonywanych w razie błędu przy przesyłaniu pliku ze skryptem do określenia pustych definicji funkcji, które w były tym pliku zawarte. Pozwoli to uniknąć komunikatów o błędzie typu "Oczekiwano obiektu", gdy funkcja taka zostanie wywołana na stronie - zamiast tego nie stanie się nic. Takie asekuracyjne podanie pustych definicji funkcji może wyglądać tak: (zakładam, że w pliku plik.js definiowane są funkcje hop() i siup() )
<script src="plik.js" language="JavaScript" type="text/javascript">
<!--
function hop() {}
function siup() {}
</script>
Warto tu jeszcze zwrócić uwagę, że czasami Netscape ma problemy z prawidłowym załadowaniem skryptów z osobnego pliku. Na szczęście zdarza się to tylko przy użyciu przycisku Reload w trakcie pracy z dokumentem na dysku lokalnym.
[ Powrót na górę ]
|
2.1.5 Poprzez protokół "javascript:" |
Przeglądarki pozwalają jeszcze na wywoływanie poleceń JS bezpośrednio z pasku adresu. Służy do tego "protokół" javascript: - jeśli podamy ciąg znaków poprzedzony tym przedrostkiem, zostanie on zinterpretowany jako polecenia JavaScriptu, a nie jako adres sieciowy. To samo dotyczy adresów podawanych jako cel odsyłaczy, dlatego możliwe jest takie rozwiązanie: (ten odsyłacz będzie działał identycznie, jak przycisk [Wstecz] przeglądarki)
<a href="javascript:history.back()">Wstecz</a>
[ Powrót na górę ]
|
|
|
|