JavaScript  

 

w przykładach                

http://javascript.jest.o.k.pl

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, bodylub 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ę ]

 


Valid HTML 4.0!

© 1998-2000 Maciej Szczepaniak