JavaScript IE getElementByTagName - Null oder kein Objekt

cuthbert

Captain
Registriert
Jan. 2007
Beiträge
3.112
ich bin gerad dabei, ein kleines script für eine tableiste zu schreiben. es gibt zwei bilder (pressed tab und unpressed tab) die gewechselt werden sollen, sobald man mit der maus über einen tab rüberfährt oder diesen drückt. im firefox und opera funktioniert das bereits ohne probleme. auch im ie funktioniert es, trotzdem spuckt der ie die im titel genannte fehlermeldung aus.

da ich mich mit javascript noch nicht wirklich auskenne, bin ich mit meinem latein aber schon am ende. ich weiß nicht, wieso der ie in der fettmarkierten zeile meint, dass getElementsByTagName(...)[...] null oder kein objekt sein soll.

Code:
unpressed = new Image();
unpressed.src ='p_unpressed_tab.gif';
pressed = new Image();
pressed.src ='p_pressed_tab.gif'

function Bildwechsel (bildnr,event,new_img) {
var NaviLeiste,img;
NaviLeiste=document.getElementById("navi_leiste");
img=NaviLeiste.getElementsByTagName("img")[bildnr];
if (event=="over") {
img.old_img=img.src;
img.src=pressed.src;
} else if (event=="out"){
if(img.old_img)img.src=img.old_img;
} else if (event=="click"){
img.old_img=pressed.src;
img.src=pressed.src;
for(i=0; i<=NaviLeiste.getElementsByTagName("img").length;i++){
if(i!=bildnr) {
[B]NaviLeiste.getElementsByTagName("img")[i].src= unpressed.src;[/B]
};	
};
}
}

könnt ihr mir vllt sagen, wo der fehler ist, bzw warum der ie das skript korrekt ausführt aber trotzdem eine fehlermeldung bringt.
 
Zuletzt bearbeitet:
Der Fehler liegt wahrscheinlich hier in der For-Schleife
for(i=0; i<=NaviLeiste.getElementsByTagName("img").length;i++)

getElementsByTagName liefert ein 0 basiertes Array zurück. Heißt wenn du 4 Bilder hast, ist die Lenge = 4, aber der Index läuft von 0-3, also darfst du die For-Schleife nur bis i<NaviLeiste.getElementsByTagName("img").length laufen lassen. Unterschied < nicht <= bei <= geht sie von 0-4 und an position 4 ist kein Element mehr.

Weiterer Tipp, für bessern Progstiel:
var imgArray = NaviLeiste.getElementsByTagName("img");
for(i=0; i<=imgArray.length;i++){
if(i!=bildnr) {
imgArray.src= unpressed.src;
};
};


Dann muss javaScriipt net alles mehrmals durchsuchen nach img-Elementen
 
ah vielen dank das wars. ich war so verzweifelt am suchen, dass ich den wald vor lauter bäumen nicht mehr gesehen hab :D.

danke auch für den zweiten tipp.
 
Zuletzt bearbeitet:
Zurück
Oben