Andreas Bierhals: Array-Variable zusammen setzen

Beitrag lesen

Moin Nachteule ;-)

Problem ist, das dies hier nicht funktioniert:
eval(menue_global + "_mp_pos[i]"); ich bekomme also z.B. home_mp_pos[i] nicht zusammengesetzt. Einfach
addieren kann ich es ja auch nicht, also menue_global + "_mp_pos[i]".

also, wenn menue_global eine String-Variable ist, sollte obiger Ausdruck eigentlich
etwas Vernünftiges zurückliefern, imho den *Inhalt* von z.B. home_mp_pos[i].

Ich muß ja eval() verwenden, da
ich keine String, sindern ein Objekt zusammen addiere, oder?

Nicht ganz, eval() wird immer dann verwendet, wenn man Javascript-Ausdrücke
ausführen lassen möchte, die nicht im Quelltext stehen sondern erst während
der Ausführung aus String-Variablen zusammengesetzt werden. Selbstmodifizierender
Code sozusagen, imho eine der großen Stärken von Scriptsprachen
gegenüber Compiler-Sprachen (jaja... mit Ausnahme des Falles, daß man
einen Script-Interpreter in einer Compilersprache schreibt ;-)).

Wenn es sein muß, lege ich sechs Schleifen an, was aber uncool ist ;-).

Falls Du Dir dann doch sechs Schleifen anlegen solltest, mach davon
mal'n Foto und stell es ins Netz... ;-)

for(var i = 0; i < eval(menue_global + "_mp[i].length"); i++)
{
  eval(menue_global + "_mp_pos[i]") = document.layers[eval(menue_global + "_mp[i]")].pageY;
}

So sollte es dann zum Schluß aussehen. Als Beispiel habe ich jetzt nur mal den NN-Teil aufgeführt.

for(var i = 0; i < alle.length; i++)
{
  for(var j = 0; j < eval(alle[i] + "_mp.length"); j++)
   {
    eval(alle[i] + "_mp_pos[j]") = document.layers[eval(alle[i] + "_mp[i]")].pageY;
   }
}

Ich bin mir zunächst nicht ganz sicher, wo das Problem liegt, weil ich die
Definitionen von menue_global[] bzw. alle[] nicht in Deinem Posting finde.
Zunächst ist eval() in Ausdrücken wie

feld[eval(stringvariable+"_anhaengsel")]

überflüssig. Im Array-Index darf ja sowieso ein String stehen und ein
zusammengesetzter String ist letztendlich auch ein String.
Beim folgenden Ausdruck

eval(alle[i]+"_mp_pos[j]") = ...;

würde ich tippen, daß eval erst den Inhalt der Variable ersetzt und dann die Zuweisung
ausgeführt wird. Wenn also alle[i] = "home" und home_mp_pos[j] = 4711, dann steht
dort letztendlich sowas wie

4711 = document.layers[...];

also sicherlich nicht das, was Du willst.
Mein Vorschlag: Bastel Dir einfach zuerst die gesamte Befehlszeile als String zurecht
und laß dann genau ein eval darauf los, also etwa so:

eval(alle[i]+"_mp_pos[j] = document.layers["+alle[i]+"_mp[i]].pageY);

Viel Glück erstmal beim Probieren und bis dannundwann...

Andreas