# "... ist Null oder kein Objekt" HILFE!



## ollek81 (16. September 2002)

Tach!!
Ich hab da ein Problem:

Wieso läuft folgendes nicht??


```
<script language="JavaScript" type="text/JavaScript">
<!--
	function BildWechsel(obj) {
		var BildListe = new Array(2);
		BildListe[0] = Homeac;
		BildListe[1] = Ueberac;
						
		for (var i = 0; i < BildListe.length; i++) {
			if (obj != BildListe[i]) {
				document.all.BildListe[i].className = 'Unsichtbar';
			}
			else {
				document.all.BildListe[i].className = 'Sichtbar';
			}
		}
	}
//-->
</script>
</head>
```

Homeac und Ueberac sind ID's und Namen von Bildern in diesem Frame.
"obj" wird aus einem anderen Frame übergeben´und enthält entweder 'Homeac' oder 'Ueberac'.
Der Explorer gibt immer die Fehlermeldung, dass "document.all.BildListe" Null oder kein Objekt wäre.
Ich kann Homeac und Ueberac bei der Zuweisung auch in "" oder '' setzen. Bringt genau das selbe Ergebnis.
Normalerweise sind da noch ein paar mehr Bilder. Deswegen die evtl. etwas umständliche function.

Wo ist mein Denkfehler?
Kann mir jemand weiter helfen??

Würde mich sehr freuen.

Ollek81


----------



## THE REAL TOOLKIT (16. September 2002)

wie rufst du denn die funktion auf?


----------



## Adam Wille (16. September 2002)

Hoi,

```
BildListe[0] = Homeac; 
BildListe[1] = Ueberac;
```
ist, wie du schon sagtest, in dem Zusammenhang unsinnig, da die Variablen Homeac und Ueberac ja nicht als solche existieren, sondern lediglich Bilder mit dieser ID.

-> in "" setzen!

Da das, wie du aber auch schriebst, nicht zum gewünschten Erfolg führt, würde ich vielleicht den Bildern noch ein name-Attribut des gleichen Wertes geben, vielleicht sind sie dann für den Browser eindeutiger identifizierbar?!

Das Script an sich sieht mir nicht unbedingt fehlerbehaftet aus, allerdings weiß ich jetzt auch nicht, was .className erreicht, müsste ich nochmal in SelfHTML nachschlagen...

Geist


----------



## ollek81 (16. September 2002)

Der Gute Geist mal wieder!! 
Ich hab den Bildern ja den Namen UND die ID gegeben. Beides mal das gleiche. Sowas hatte ich mir nämlich schon gedacht. Ist doch einfach ID="Homeac", oder?

@ The Real Toolkit: Wenn's dir weiter hilft: 
<body onLoad="parent.Navigation.BildWechsel('Homeac')".....>
Das steht im Quelltext von meinem Textframe.

Der ruft die Funktion ja auf! Das hab ich nach ner Stunde rumprobieren ja hinbekommen.

.className setzt übrigens das CSS für ein Objekt fest. (Hab ich hier aus nem Beitrag) 

Ollek81


----------



## Adam Wille (16. September 2002)

So, hab' mir das Problem nochmal angesehn und dabei festgestellt,
dass selbst bei scheinbar völlig gleichem Inhalt des Arrayelements BildLeiste[i] und der Element-id des Objekts im HTML-Dokument kein Gleichsetzen in dem Sinne erfolgen kann.

Heißt:

Auch wenn 
	
	
	



```
BildLeiste[i] = "Homeac"
```
 ist und du per 
	
	
	



```
document.all.BildLeiste[i]
```
 versuchst,
ein Seitenelement anzusprechen, welches "Homeac" als id besitzt, wirst du nicht erfolgreich sein - ich schätze mal, weil die Inhaltstypen unterschiedlicher Natur sind.

Irgendwie kann jedenfalls der Browser diesen String des Arrayelements nicht als String in deine JavaScript-Zeile einfügen.

Von daher würde ich an der Stelle eben über die umständliche Variante gehen und halt eine etwas ausführlichere if-Abfrage formulieren á la:

```
if (obj == BildListe[0]) {
	document.all.zugehörige_id.className = 'Sichtbar';
} else if (obj == BildLeiste[1]) {
	document.all.zugehörige_id.className = 'Sichtbar';
} else if ...
```
hth,
Geist - nicht ganz so der JS-Experte


----------



## ollek81 (16. September 2002)

So, habs!! 
Das ganze "ge-if-e" war mir zu viel!
Wie ich denke einfacher:

```
<script language="JavaScript" type="text/JavaScript">
<!--
	function BildWechsel(obj) {
		var BildListeV = new Array(6);		//Zum Vergleichen, weil Strings übergeben werden
		BildListeV[0] = "document.all.Homeac"; 
		BildListeV[1] = "document.all.Ueberac";
		BildListeV[2] = "document.all.Serviceac";
		BildListeV[3] = "document.all.Lieferac";
		BildListeV[4] = "document.all.Kontaktac";
		BildListeV[5] = "document.all.Newsac";
		
		var BildListeO = new Array(6);		//Zum CSS ändern, weil das hier Objekte sind
		BildListeO[0] = document.all.Homeac;
		BildListeO[1] = document.all.Ueberac;
		BildListeO[2] = document.all.Serviceac;
		BildListeO[3] = document.all.Lieferac;
		BildListeO[4] = document.all.Kontaktac;
		BildListeO[5] = document.all.Newsac;
						
		for (var i = 0; i < BildListeV.length; i++) {
			if (obj != BildListeV[i]) {
				BildListeO[i].className = 'Unsichtbar';
			}
			else {
				BildListeO[i].className = "Sichtbar";
			}
		}
	}
//-->
</script>
```

Hab jetzt zwei Arrays. Einmal mit Strings zum vergleichen, da leider nur Strings und keine Objekte übergeben werden können
und einmal mit den Objekten, die angesprochen werden müssen.

Etwas umständlich, aber auf jeden Fall läuft es so..

Thx für die Hilfe!!

Ollek81


----------

