Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [JavaScript]Problem najprawdopodobniej z buforem zdarzeń w skrypcie
sebap123
post
Post #1





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

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


Mam problem z pewnym skryptem, a raczej z dwoma jego funkcjami. Wyglądają one następująco:
Kod
resizeObject: function(){
            var elementWidth = ddEl.offsetWidth;
            var elementHeight = dd.El.offsetHeight;
            var links = dd.El.getElementsByTagName('a');
            var keyLink = links[links.length-1];
            keyLink.style.display = "none";
            dd.El.style.border = '2px red dashed';
            var resizeLink = links[links.length-2];
            resizeLink.relatedElement = dd.El;
            removeEventSimple(resizeLink,'cick',dd.resizeObject);
            console.log('off - resize(837): '+dd.El.id);
            addEventSimple(resizeLink,'click',dd.endResizeObject);
            console.log('on - endResize(839): '+dd.El.id);
            resizeLink.style.marginLeft = elementWidth/2+'px';
            removeEventSimple(dd.El,'mousedown',dd.startDragMouse);
        },
        endResizeObject: function(){
            var links = dd.El.getElementsByTagName('a');
            var keyLink = links[links.length-1];
            keyLink.relatedElement = dd.El;
            keyLink.style.display = '';
            dd.El.style.border = '0px';
            var resizeLink = links[links.length-2];
            resizeLink.relatedElement = dd.El;
            removeEventSimple(resizeLink,'click',dd.endResizeObject);
            console.log('off - endResize(853): '+dd.El.id);
            addEventSimple(resizeLink,'click',dd.resizeObject);
            console.log('on - resize(855): '+dd.El.id);
            resizeLink.style.marginLeft = 0;
            addEventSimple(dd.El,'mousedown',dd.startDragMouse);
        },

Chodzi o to, że na obiekcie jest przycisk (link) który na początku skryptu ma przypisane zdarzenie click do funkcji resizeObject. Po kliknięciu powinien jednak to przypisanie kasować i przypisywać funkcje endResizeObject. Jednak tego nie robi. Przynajmniej ja tego nie zauważyłem. Zamiast tego - obserwując co się dzieje w debugerze zobaczyłem, że po zakończeniu funkcji resizeObject i ponownym kliknięciu na link znowu wykonuje ta samą funkcję - zupełnie nie uruchamia funkcji endResizeObjcet.
Wydaje mi się (jednak nie jestem ekspertem w JS), że może to być problem z pozostałością czegoś w buforze zdarzeń, ale wtedy chyba powinienem coś zobaczyć wykonując skrypt krok po kroku.
Bardzo proszę o jakąś podpowiedź, gdzie jest błąd, bo już pomału zaczyna mnie to denerwować.
Go to the top of the page
+Quote Post
CuteOne
post
Post #2





Grupa: Zarejestrowani
Postów: 2 958
Pomógł: 574
Dołączył: 23.09.2008
Skąd: wiesz, że tu jestem?

Ostrzeżenie: (0%)
-----


removeEventSimple(resizeLink,'cick',dd.resizeObject) powinno być 'click' (IMG:style_emoticons/default/smile.gif)

Ten post edytował CuteOne 30.09.2011, 11:47:24
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----


No i właśnie tak sądziłem, że musi być coś zupełnie głupiego. Jednak to prawda, że niektórych błędów samemu nie da się wypatrzyć. Jeszcze raz wielkie dzięki.
Jeszcze jedna sprawa, nie napisałem tego tutaj bo myślałem, że jak naprawię ten błąd, to naprawi się wszystko no ale się myliłem. Każdy obiekt jest dodawany w mniej więcej taki sposób:
Kod
newElement = document.createElement('div');
            newElementId = 'div'+i;
            newElement.setAttribute('id',newElementId);
            document.body.appendChild(newElement);
            newElement.style.position = 'absolute';
            newElement.style.width = "100px";
            newElement.style.height = "100px";
            newElement.style.left = positionX+'px';
            newElement.style.top = positionY+'px';
            newElement.style.background = "#E6E6E6";
            newElement.style.cursor = "move";

dd.initElement(newElement, container);

W funkcji dd.initElement (która jest wywoływana tylko i wyłącznie raz) w taki sposób przypisuję link do funkcji resizeElement:
Kod
var links = element.getElementsByTagName('a');
        var keyLink = links[links.length-1];
        keyLink.relatedElement = element;
        addEventSimple(keyLink,'click',dragDrop.startDragKeys);
                var resizeLink = links[links.length-2];
                resizeLink.relatedElement = element;
                addEventSimple(resizeLink,'click',dragDrop.resizeObject);

A potem są te dwie funkcje, które już napisałem. Moje pytanie, jest następujące - jaki może być powód tego, że dwa linki (na dwóch różnych obiektach) nagle się "zmieniają" i odnoszą się do jednego. Taka sytuacja pojawia się, gdy oba są aktywne, czyli po kliknięciu.
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 18.09.2025 - 06:04