Variableninhalte verloren?
Johannes Vogel
Hi ihr alle
Ich hab ein interessantes Problem in JavaScript. Schon vor einigen Wochen habe ich dieses an dieser Stelle angebracht, leider konnte es damals noch niemand loesen und es interessierte sich auch kaum einer genauer dafuer :-( Hier ist also die Herausforderungen fuer alle die, die mal wieder beweisen moechten, dass sie die besten auf dem Web sind! :-)
Nun, weil ich es wirklich oberst merkwuerdig finde, habe ich euch eine Seite zusammengestellt mit dem Problem und auch einem kleinen Fragebogen...
Es geht darum, dass ich in einer for-Schlaufe einige Bilder in einen zweidimensionalen Array werfe, diese dann, sobald ich die for-Schlaufe verlasse, sofort den allerletzten Wert, den ich zuwiess, enthalten. Wie kann das sein? Wieso verliere ich plötzlich Daten? Weshalb?!
Die Seite mit dem Sourcecode und ebenfalls gerade einer Möglichkeit des Testens habe ich euch auf http://www.zik.ch/vogel/problem geblasen. Auf reges Kommen, Versuchen, helfen wuerde ich mich freuen.
Gruessle aus dem Schweizle (kalt)
Johannes Vogel
PS: Wie auch im PS der Page: sorry, es ging etwas schnell und ich hab mir nicht gross mphe gegeben mit der Page. Mir war die Information wichtig, nicht die Gestaltung... Trotzdem, ich hoffe, ihr habt Spass beim Tuefteln!!!!
Hallo,
Es geht darum, dass ich in einer for-Schlaufe einige Bilder in einen zweidimensionalen Array werfe,
Genau da liegt IMHO die Krux.
Deine Deklaration sieht so aus:
Pict = new Array (MaxBilder, 3)
Das ergibt aber kein zweidimensionales Array, sondern ein eindimensionales mit zwei Elementen.
Zwei Formen der Syntax beim Definieren von Array-Objekten gibt es:
new Array(arrayLength);
new Array(element0, element1, ..., elementN);
mit:
arrayLength (Optional) The initial length of the array.
elementN (Optional) A list of values for the array's elements. When this form is specified,
the array is initialized with the specified values as its elements
Deine Syntax entspricht der zweiten.
Sorry, aber ich habe jetzt nicht versucht, nachzuvollziehen, was in Deinem Script daraufhin weiter unten genau passiert, was der Browser da hineininterpretiert.
Hilfreicher ist es sicher zu wissen, wie man zweidimensionale Felder anlegt
So:
a = new Array(4) /* a = new Array() reicht auch
for (i=0; i < 4; i++) {
a[i] = new Array(4)
for (j=0; j < 4; j++) {
a[i][j] = "["+i+","+j+"]"
}
}
und zum Ueberpruefen das hier gleich hinten dran:
for (i=0; i < 4; i++) {
str = "Row "+i+":"
for (j=0; j < 4; j++) {
str += a[i][j]
}
document.write(str,"<p>")
}
Das Beispiel habe ich uebrigens jetzt nicht konstruiert, sondern ebenso wie die Beschreibung der Syntax direkt bei Netscape abgeschrieben.
War einfacher :-)
JavaScript Referenz: http://developer.netscape.com/docs/manuals/communicator/jsref/index.htm
Christine
...
Das Beispiel habe ich uebrigens jetzt nicht konstruiert, sondern ebenso wie die Beschreibung der Syntax direkt bei Netscape abgeschrieben.
War einfacher :-)
JavaScript Referenz: http://developer.netscape.com/docs/manuals/communicator/jsref/index.htmChristine
Hallo,
wo ich gerade dabei bin, hier meine modifizierte Version des Beispielskripts.
Anzumerken ist noch, dass in dem Original-Beispiel die Variable
zaehler von 1..maxbilder durchlaeuft. Korrekt ist IMHO allerdings
von 0..(maxbilder-1) (wie Arrays in C).
Gruesse,
Andreas Bierhals
...Funktioniert bei mir (Netscape 4.05):
<html><body>
<script language="JavaScript">
var MaxBilder = 7;
/* Bilder in den Speicher laden */
/* 0 für deaktiviert, 1 für übergefahren, 2 für aktiv */
Pict = new Array(MaxBilder);
for (i=0; i<MaxBilder; ++i) Pict[i] = new Array(3);
var testvar="";
for (zaehler=0; zaehler<MaxBilder; zaehler++)
{
Pict[zaehler][0] = new Image(); Pict[zaehler][0].src = "menue_pix/section" + eval(zaehler+1) + "b.gif";
Pict[zaehler][1] = new Image(); Pict[zaehler][1].src = "menue_pix/section" + eval(zaehler+1) + "r.gif";
Pict[zaehler][2] = new Image(); Pict[zaehler][2].src = "menue_pix/section" + eval(zaehler+1) + "g.gif";
testvar = testvar + "; " + Pict[zaehler][0].src + "\n";
testvar = testvar + "; " + Pict[zaehler][1].src + "\n";
testvar = testvar + "; " + Pict[zaehler][2].src + "\n";
}
alert (testvar);
testvar= "";
for (zaehler=0; zaehler<MaxBilder; zaehler++)
{
testvar = testvar + "; " + Pict[zaehler][0].src + "\n";
testvar = testvar + "; " + Pict[zaehler][1].src + "\n";
testvar = testvar + "; " + Pict[zaehler][2].src + "\n";
}
alert (testvar);
</script>
</body></html>