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);
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();
//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);
}
}
},
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;
}
}
},
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.