Pedda: Array - Übergabe schlägt fehl !?

Hallo zusammen,

Ich poste mal einfach meinen code und setze Kommentare dazu....
Das veranschaulicht mein Problem wohl am einfachsten *g*

Also :

function doit(MA,st) {
// Funktionsaufruf mit MA=Array (Werte 1 - 45) und st=0
alert('Array\n '+MA+' \n Stelle '+st);
// Ausgabe1: Array 1,2,3,...44,45 Stelle 0
sid = MA[st];
alert('FeldID '+sid);
// Ausgabe2: FeldID 0
if(st<44) {
st = st+1;
alert('Array :\n '+MA+' \n Stelle '+st);
// Ausgabe3: Array 1,2,3,...44,45 Stelle 1
window.setTimeout("doit("+MA+","+st+")",50);
}
}

Der erste Lauf der Funktion ist problemlos.
Anscheinend geht aber das Array beim Timeout("doit... verloren, denn *Ausgabe1* lautet beim zweiten Lauf : "Array 2 Stelle 1"
Versteht jemand was ich meine ? *g*
...und kann mir jemand sagen wo die anderen Werte des Array geblieben sind ?

Thnx

Gruss
Pedda

  1. Ich poste mal einfach meinen code und setze Kommentare dazu....
    Das veranschaulicht mein Problem wohl am einfachsten *g*

    Das ist nicht ganz nett was du da machst.

    Ich hab den Code nicht ausprobiert, aber wenn ich das richtig sehe, soll dieser 44 mal rekursiv  die gleiche Funktion durchlaufen und jeweils dreimal ein alert ausgeben (wenn er funktionieren würde).

    Das wären 132 mal ein alert Fenster! :-(

    Nun zu deinem Problem:

    window.setTimeout("doit("+MA+","+st+")",50);

    Mit setTimeout startest du ein JS verzögert, wenn du die Stringvariante wählst im Prinzip wie eval um zu sehen was du da wirklich machst lass dir den Inhalt des Befehls mal anzeigen:
    alert("doit("+MA+","+st+")",50);

    Du hast zwei Möglichkeiten, entweder du machst MA (Großbuchstaben für Variabeln ist sehr unüblich) global und verzichtest auf den Parameter.
    Oder du erzeugst eine anonyme Funktion z.b. so:
    window.setTimeout(function() {doit(MA, st); }, 50);

    Struppi.

    --
    [lnk:http://javascript.jstruebig.de/@title=Javascript ist toll] (Perl auch!)
    1. Hi Struppi

      Das wären 132 mal ein alert Fenster! :-(

      debugging ??? *g*
      Klar kommen die alerts raus *g*

      alert("doit("+MA+","+st+")",50);

      Gute Idee... mal gucken!

      Pedda

  2. Servus,

    soweit ich weis können bei window.setTimeout nur Strings übergeben werden.

    Du musst deine Funktion einfach direkt aufrufen dann sollte es gehen.

    Also antatt:

    window.setTimeout("doit("+MA+","+st+")",50);

    machst du:

    window["doit"](MA, st);

    Gruß,
    Bene

    1. soweit ich weis können bei window.setTimeout nur Strings übergeben werden.

      falsch, auch Funktionsreferenzen funktionieren in den meisten Browsern.

      Du musst deine Funktion einfach direkt aufrufen dann sollte es gehen.

      Das will er ja vermutlich gerade nicht.

      Also antatt:

      window.setTimeout("doit("+MA+","+st+")",50);

      machst du:

      window["doit"](MA, st);

      Naja, das ist das Gleiche wie: doit(Ma, st)

      Struppi.

      --
      Javascript ist toll (Perl auch!)
  3. Moin

    window.setTimeout("doit(["+MA+"],"+st+")",50);

    die eckigen Klammern verhindern, dass die ersten beiden Array-Elemente als Funktions-Argumente interpretiert werden.

    Gruß
    rfb

    --
    Man kann einen Menschen nichts lehren, man kann ihm nur helfen, es selbst zu entdecken.
    (Galileo Galilei)