przez Wydra707 » 19 marca 2004, o 02:59
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