Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Problem z dodaniem zdarzeń w skrypcie JS
sebap123
post
Post #1





Grupa: Zarejestrowani
Postów: 253
Pomógł: 1
Dołączył: 26.08.2009
Skąd: Szczecin

Ostrzeżenie: (10%)
X----


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.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 3)
kamil4u
post
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 )


--------------------
Go to the top of the page
+Quote Post
sebap123
post
Post #3





Grupa: Zarejestrowani
Postów: 253
Pomógł: 1
Dołączył: 26.08.2009
Skąd: Szczecin

Ostrzeżenie: (10%)
X----


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.

Cytat(sebap123 @ 22.09.2011, 12:54:24 ) *
(...)
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?
Go to the top of the page
+Quote Post
kamil4u
post
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.


--------------------
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 05:04