Poważny błąd (nie wiem czy jedyny) jest tutaj, w linijce oznaczonej gwiazdką:
akapit.onmousemove = function(){
pokaz(evt,this); // *
}
Co to jest evt? Zapewne dostajesz błąd "evt is not defined", czy coś takiego. Ten parametr jest Ci jednak potrzebny w funkcji pokaz, ale nie możesz go sobie wziąć z kosmosu.
Okazuje się, że w większości przeglądarek funkcja podstawiona do onmousemove (lub onmouseover, -out itd.) dostaje za darmo pierwszy parametr oznaczający obiekt reprezentujący zdarzenie (np. ruch myszą).
Ty jednak do onmousemove podstawiasz funkcję, która nie interesuje się swoimi parametrami:
akapit.onmousemove = function() { // lista parametrów jest pusta
pokaz(evt,this);
}
Przeglądarka i tak da funkcji jeden parametr będący obiektem zdarzenia, ale ponieważ zrobiłeś pustą listę argumentów formalnych, nie możesz się dostać do tego zdarzenia przez nazwę.
Dopisz więc jeden argument do listy argumentów tej funkcji, którą podstawiasz do onmousemove. Możesz go nazwać jak chcesz, np. zdarzenie i przekazać go do funkcji pokaz:
akapit.onmousemove = function(zdarzenie) {
pokaz(zdarzenie, this);
}
Albo możesz nazwać go tak samo jak w funkcji pokaz, czyli evt:
akapit.onmousemove = function(evt) {
pokaz(evt, this);
}
Chcę po prostu zaznaczyć, że evt to nie jest żadna specjalna nazwa, dlatego na początku sugerowałem nazwać parametr "zdarzenie".
Jeszcze jeden szkopuł: IE nie przekazuje tego parametru. W IE do bieżącego zdarzenia możesz się dostać używając globalnego obiektu window.event (lub po prostu event). Tutaj nazwa ma już znaczenie.
Jak zadowolić zarówno IE, jak i inne przeglądarki? Zanim przekażesz evt do funkcji pokaz, sprawdź czy evt ma wartość prawdziwą. Jeśli będzie obiektem zdarzenia, to będzie miało taką wartość (tak będzie w Firefoksie, Operze, Safari itd.). Jeśli nIE, to znaczy, że jesteśmy w IE, więc musimy podstawić wartość window.event. W sumie:
akapit.onmousemove = function(evt) {
if (!evt) {
evt = window.event;
}
pokaz(evt, this);
}
Ze względu na fajne własności operatora || możesz to wszystko zapisać tak króciutko (efekt będzie taki sam, jak powyżej):
akapit.onmousemove = function(evt) {
pokaz(evt || window.event, this);
}
Operator || działa w JavaScripcie tak, że jeśli napiszesz:
A || B
...to jeśli A jest prawdziwe (jest obiektem, nie-pustym stringiem, liczbą różną od zera itd.), to zwracane jest A. W przeciwnym wypadku zwracane jest B. Czyli np. mając takie coś:
function(evt) {
var zdarzenie = evt || window.event; // *
pokaz(zdarzenie);
}
W linijce oznaczonej * prosimy, by do zmiennej zdarzenie podstawić:
a) wartość evt, jeśli wartość ta jest prawdziwa (czyli jeśli evt zostało przekazane funkcji)
b) wartość window.event w przeciwnym wypadku
Wyniku działania operatora || nie trzeba podstawiać do zmiennej, można od razu przekazać do funkcji pokaz, stąd skrócony zapis:
function(evt) {
pokaz(evt || window.event);
}
Nie mam pojęcia, czy to zadziała bo nie wiem, czy to był jedyny błąd. W razie czego nie płacz ;), tylko odpal konsolę błędów i zobacz komunikaty o błędach JavaScript. W Firefoksie Narzędzia->Konsola błędów, inne przeglądarki też to mają. Najpierw wyczyść konsolę, bo zapewne będzie zapełniona błędami pochodzącymi z różnych stron, które przeglądałeś. Po wyczyszczeniu odśwież swoją stronę -- jeśli wyświetli się jakiś błąd, to przeczytaj komunikat i zrób co trzeba.