![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 253 Pomógł: 1 Dołączył: 26.08.2009 Skąd: Szczecin Ostrzeżenie: (10%) ![]() ![]() |
Witam,
Mam pewien problem ze skryptem który aktualnie piszę. Posiadam takie oto dwie "uniwersalne funkcje: Kod function addEventSimple(obj,evt,fn) { if (obj.addEventListener) obj.addEventListener(evt,fn,false); else if (obj.attachEvent) obj.attachEvent('on'+evt,fn); } function removeEventSimple(obj,evt,fn) { if (obj.removeEventListener) obj.removeEventListener(evt,fn,false); else if (obj.detachEvent) obj.detachEvent('on'+evt,fn); Jak widać, jedna dodaje zdarzenie w zależności od tego czy przeglądarka obsługuje on coś tam czy bez on. Druga to usuwa. I właśnie z tymi funkcjami, a raczej z ich wykorzystaniem mam problem. Chodzi o to, że w niektórych momentach gdy je dodam do kodu to nie działają (albo nie zupełnie, albo w ogóle). Oto parę przykładów - nie wklejam całego kodu bo jest on dosyć długi i nie chcę zaśmiecać postu): Kod //1 //addEventSimple(el,'mousedown',DD.startDragMouse); el.onmousedown = DD.startDragMouse; //2 var links = el.getElementsByTagName('a'); var keyLink = links[links.length-1]; keyLink.relatedElement = el; addEventSimple(keyLink,'click',DD.startDragKeys); //3 var markerLink = links[links.length-2]; markerLink.relatedElement = element; addEventSimple(markerLink,'click',DD.editMarkers); //4 removeEventSimple(markerLink,'cick',DD.editMarkers); addEventSimple(markerLink,'click',DD.endEditMarkers); //5 removeEventSimple(markerLink,'click',DD.endEditMarkers); addEventSimple(markerLink,'click',DD.editMarkers); DD.deleteMarkers(); To jest parę przykładów. W takiej kolejności w jakiej zostały przedstawione występują w skrypcie, jednak najczęściej nie w tych samych metodach. Teraz opiszę każdy z elementów, bo tego tutaj brakuje: 1. W momencie gdy używam opcji, która jest aktualnie skomentowana wtedy nie działa mi jeden ze styli obiektu - wygląd kursora. Jeśli użyję wersji która jest aktualnie używam wszystko jest ok. 2. Jest to link na obiekcie, który uruchamia poruszanie klawiaturą - ta opcja działa (w obu przypadkach). 3. Również dodaję do obiektu link który uruchamia opcje związana z markerami - działają obie opcje *ten fragment jest bezpośrednio po zawartości 2) 4. Doszedłem do wniosku, że najpierw muszę usnąć jedną akcję, żeby dodać drugą (w sumie jest to logiczne) - nie jestem jednak pewien czy przypadkiem nie tutaj jest błąd gdzieś, bo bo wszystko niby działa, ale... 5. W tym fragmencie już nie usuwa markerów (czyli nie uruchamia całej funkcji deleteMarkers - co gorsza nie wyświetla mi żadnego błędu): funkcja ta wygląda tak: Kod deleteMarkers: function() { var marker; for(i=1;i<=8;i++) { marker = document.getElementById('m'+i+DD.El.id); if(marker != null) { DD.El.removeChild(marker); } } }, Jeśli natomiast zrobię coś takiego: Kod deleteMarkers: function() { var marker; for(i=1;i<=8;i++) { marker = document.getElementById('m'+i+DD.El.id); if(marker != null) { info.innerHTML = marker; } } }, Zgodnie z założeniem wyświetla mi ostatni marker. Ma ktoś może jakiś pomysł co robię źle w tym skrypcie? Dodam tylko, że to nie są wszystkie przypadki, ale wydaje mi się, że jak rozwiążę problem tego, że funkcja raz działa a raz nie to resztę już zrobię sam. |
|
|
![]() |
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 2 350 Pomógł: 512 Dołączył: 4.01.2009 Skąd: Wrocław / Świdnica Ostrzeżenie: (0%) ![]() ![]() |
Te funkcje "addEventListener" i "attachEvent" dodają zdarzenie, a nie nadpisują - dlatego czasem musisz usunąć zdarzenie.
Zobacz co pokazuje konsola błędów. Te funkcje działają zawsze, więc raczej gdzieś Ty popełniłeś błąd. Jak możesz to daj tu( http://jsfiddle.net/ ) proste przykłady, w których coś Ci nie działa - myślę, że wtedy łatwiej będzie Tobie pomóc( na krótkim kodzie ) -------------------- |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 253 Pomógł: 1 Dołączył: 26.08.2009 Skąd: Szczecin Ostrzeżenie: (10%) ![]() ![]() |
Ok, dzięki za nakierowanie. Tak właśnie coś przeczuwałem, że może gdzieś "zakrywam" jakieś zdarzenie. Popróbuję na kodzie który mam, bo aktualnie może być trudno go rozbić, a jak znowu zabraknie mi pomysłów to zrobię tak jak mówisz i zobaczę co się dzieje.
(...) Kod deleteMarkers: function() { var marker; for(i=1;i<=8;i++) { marker = document.getElementById('m'+i+DD.El.id); if(marker != null) { DD.El.removeChild(marker); } } }, Jeśli natomiast zrobię coś takiego: Kod deleteMarkers: function() { var marker; for(i=1;i<=8;i++) { marker = document.getElementById('m'+i+DD.El.id); if(marker != null) { info.innerHTML = marker; } } }, Zgodnie z założeniem wyświetla mi ostatni marker.(...) Mam jeszcze pytanie o jedną rzecz związaną z tym problemem. Wydaje mi się, że musi ona mieć coś wspólnego z resztą, tyle tylko, że nie wiem jakim cudem. Chodzi mi o opisanym wyżej przypadek.Jaki może być powód czegoś takiego? |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 2 350 Pomógł: 512 Dołączył: 4.01.2009 Skąd: Wrocław / Świdnica Ostrzeżenie: (0%) ![]() ![]() |
Nie wiem co to może być...
Zobacz konsolę błędów i/lub daj jakiś przykład live. -------------------- |
|
|
![]() ![]() |
![]() |
Aktualny czas: 22.08.2025 - 05:04 |