Strona 1 z 2

Obiekt Event

PostNapisane: 18 marca 2004, o 02:03
przez Seth_
Witam
Moj problem dotyczy skryptu ktory koloruje linki. Calosc znajduje sie na http://seth.ys.pl/skrypt/skrypt.txt . Dostaje komunikat "Wymagany jest obiekt". Wrzucilem wiec to wszystko do debuggera ktory wykazal bledy w liniach if ((srcElement.tagName == "A" && autoFade) || srcElement.className == "fade" || (sloppyClass &&
srcElement.className.indexOf("fade") != -1))
.
Podpatrzylem sobie srcElement i okazalo sie ze wynosi null . Czyli rozumiem skad sie bierze blad:nie ma obiektu. Jednak wydaje mi sie to niemozliwe bo w kodzie jest wyraznie document.onmouseover = domouseover; czyli jesli dobrze rozumiem to kazdy ruch myszki na dokumencie powoduje ze Event istnieje. Blad nie wyskakuje po konkretnym dzialaniu;raz jest a raz go nie ma;raz jest po sekundzie a raz po minucie.I co wiecej pokazuje mi sie on tylko na jednej stronie(ale sprawdzalem ją i nie ma tam zadnych niepokojacych rzeczy).
Wiec mam pytanie czy ktokolwiek wie o co tu moze chodzic? Czy jest mozliwe zeby zawartosc strony w jakis sposob powodowala ze Event "znika"?
Z gory dziekuje za wszelkie sugestie.

PostNapisane: 18 marca 2004, o 16:07
przez Wydra707

Re: Obiekt Event

PostNapisane: 18 marca 2004, o 16:13
przez lockoom

PostNapisane: 18 marca 2004, o 17:37
przez Seth_

PostNapisane: 18 marca 2004, o 20:08
przez lockoom

PostNapisane: 18 marca 2004, o 22:53
przez Seth_
Dzieki :) Wlasnie takiego kodu mi bylo trzeba. Z tym, ze zamiast onload = init; w skrypcie wstawilem wszedzie onload do <body> bo na niektorych podstronach kolorowanie nie dzialalo.
I teraz juz nie dostaje bledu ze wymagany jest obiekt ale ze "brak definicji 'ms__idX' ", gdzie X jest zupelnie dowolna liczba. I dzieje sie to przy najechaniu na emotikona. Debuger tym razem nie pokazuje zupelnie nic. Czyli zaczynam cos weszyc bo emotikon jest wstawiany do pola textowego funkcja javascriptu. Przejrzalem ta funkcje i jednak ciagle nie moge dostrzec co moze byc przyczyna konfliktu :( W skrypcie kolorowania linku jest cos takiego jak uniqueID ale nie jestem pewny czy komunikat wlasnie tego dotyczy. Niby to sie juz wszystko konkretyzuje i widac gdzie cos jest nie tak ale ciagle nie wiem co.Zalamac sie idzie

PostNapisane: 19 marca 2004, o 00:55
przez Seth_
Ok juz mam spokoj. Emoty dalem jako obrazki z onclickiem a nie jako linki. I to mi powinno wystarczyc mimo ze ciagle nie wiem czemu mi sie pokazywaly bledy :roll:

PostNapisane: 19 marca 2004, o 02:59
przez Wydra707
Przyczyną Twoich pierwszych kłopotów było (a może wciąż jest) pole NAME="znak". Błąd pojawiał się przy szybkim przesuwaniu nad nim kursora (dlaczego szybkim, napiszę za chwilę). Inny przypadek, to sytuacja, gdy kursor był nad treścią tego pola (zmienia się na kursor tekstowy) i wywoływałem okienko alertu. Trzeci przypadek to wywołanie nad treścią pola menu kontekstowego. Tu nie ma komunikatu błędu, ale zobacz gdzie pokazuje się menu!

Trafiłeś na specyficzną cechę obiektów INPUT z atrybutem DISABLED. Jeśli taki obiekt zawiera treść (VALUE), zachowuje się ona tak, jakby nie istniała na rysunku strony. Gdy nad treścią (znakami w polu) wywołasz niektóre zdarzenia, obiekt event nie będzie prawidłowo uaktualniony (srcElement=undefined). A zatem obiekt event istniał, tylko pusta była właściwość srcElement i stąd błąd.

Ponieważ uaktualnienie obiektu event wymaga czasu, błąd występował tylko przy szybkich ruchach kursora nad polem. Pole ma obramowanie i wąski padding. Gdy kursor przesuwa się wolno, parametry zdarzenia zostają odczytane na granicy pola (poza treścią pola) i wszystko jest OK. Gdy kursor porusza się szybko, zdąży przesunąć się nad treść zanim przeglądarka odczyta jego pozycję. Wtedy okazuje się, że obiekt pod kursorem nie istnieje i srcElement=undefined... Jeśli ustawisz temu polu padding:0px; border:none; błąd będzie występował zawsze przy wejściu nad pole od lewej i z góry.

Wszystkie te problemy wiążą się z bąblowaniem zdarzeń i jeśli przesunąłeś wywołanie funkcji z obiektu document do obiektów A, to błędy będą występowały rzadziej (pozostanie problem z menu kontekstowym).

Rozwiązaniem jest usunięcie atrybutu DISABLED. Ewentualnie objęcie pola kontenerem SPAN i wstawienie tam atrybutu:

<SPAN DISABLED><INPUT TYPE=...></SPAN>

Co do Twojego problemu z id to... jest już troszkę za późno, aby mysleć :-)

Pozdrawiam
Paweł Rajewski

PostNapisane: 19 marca 2004, o 15:50
przez Seth_

PostNapisane: 19 marca 2004, o 19:20
przez Wydra707

PostNapisane: 19 marca 2004, o 21:46
przez Seth_

PostNapisane: 20 marca 2004, o 21:31
przez lockoom
Jakbyś jeszcze poprawił to czym wcześniej pisałem "&raquo" na "&raquo;", bo to naprawdę w Operze i Mozilli psuje wygląd.

PostNapisane: 21 marca 2004, o 01:16
przez Seth_

PostNapisane: 21 marca 2004, o 17:47
przez lockoom
Temat mnie "troszkę" zainteresował i postanowiłem napisać własny skrypt. Mój jest oczywiście lepszy ;)
Oki, teraz serio Twój skrypt nie działa w alternatywnych przeglądarkach, mój działa w IE4+, Operze 6+ (5+? 4+?), Netscape 6+ i Mozilli. Co mi się nie podobało w tym użytym przez Ciebie to, oprócz tego o czym wspomniał Wydra i co naprawiłeś, to fakt, że kolor jest obliczany w momencie jego ustawiania. W moim skrypcie najpierw tworzona jest tablica zawierająca wszyskie stany pośrednie i później już tylko odwołuję się do jej elementów.

Skrypt można zobaczyć w działaniu tutaj.

Wszelkie uwagi oczywiście mile widziane.

/edit: Wersja 1.1 na serwerze :)

PostNapisane: 22 marca 2004, o 00:24
przez Seth_