Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JavaScript]Problem najprawdopodobniej z buforem zdarzeń w skrypcie
Forum PHP.pl > Forum > Przedszkole
sebap123
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ć.
CuteOne
removeEventSimple(resizeLink,'cick',dd.resizeObject) powinno być 'click' smile.gif
sebap123
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.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.