AlexS.: zugriff auf array in anderer funktion

hallo

ich habe ein problem.

ich habe ein menü. in einer funktion ist
ein array angelegt, in dem man die einzelnen menüpunkte
festlegt.

in einer anderen funktion fülle ich die einzelnen menüpunkte
mit der jeweiligen beschriftung sowie url. jetzt mein problem:
in der zweiten funktion soll eine abfrage rein, wieviel
menüpunkte sind. wenn mehr (als die schon vorgegebenen) menüpunkte
angegeben sind, erfolgen in der 'auffüll-funktion'  entsprechend
autom. änderungen, da das menü ja jetzt größer ist. die anzahl der
in einem array vorhandenen einträge, läßt sich ja  
mit 'arrayname.length' ermitteln. aber, ich kann aus der zweiten
funktion nicht auf das array, das in der ersten funktion festgelegt
ist, zugreifen.

kurz gesagt, wie kann ich auf eine array, das sich in einer
anderen funktion befindet zugreifen, daß ich dessen eigenschaften
auslesen kann??

ich hoffe ich habe mich verständlich ausgedrückt.

ich könnte das menü ja so lassen wie es im moment ist. da müßte ich,
wenn ich einen neuen menüpunkt einfüge, aber ziemlich viel von hand ändern. aber so wie ich das gedacht habe, ginge das ganze dann automatisch (erzeugen der struktur des menüs, da in verschachtelter tabelle).

ich hoffe ihr könnt mir helfen.

thx

gruß

AlexS.

  1. Hi,

    kurz gesagt, wie kann ich auf eine array, das sich in einer
    anderen funktion befindet zugreifen, daß ich dessen eigenschaften
    auslesen kann??

    Auch hier wieder ein Problem des Geltungs-Bereichs ,)

    Du hast wahrscheinlich (kann ich nur vermuten, du hast ja keinen Code
    mit angegeben *strafender Blick*) in der Funktion einen Array mit

    var arrayname = new Array();

    erstellt?

    Wenn ja, ist der Fall klar: du hast nur eine lokale Variable
    erstellt.
    Du hast jetzt zwei Möglichkeiten: eine saubere und eine schludrige ,)
    Die saubere wäre, du erstellst den Array im Kopf des Scripts und
    machst ihn so global:

    <script language="JavaScript">
    var arrayname = new Array();

    function fk1()
    {
    // Operationen
    }

    function fk2()
    {
    // Operationen
    }

    // usw
    </script>

    Oder du erstellst in der Funktion selber den Array global:

    <script language="JavaScript">

    function fk1()
      {
      arrayname = new Array();
      // beachte: kein "var" davor ,)
      }
    </script>

    mfg
    CK1

    P.S.: lies mal den Artikel über Geltungsbereich von Variablen in Self

    P.P.S.:

    1. hallo

      Du hast wahrscheinlich (kann ich nur vermuten, du hast ja keinen Code
      mit angegeben *strafender Blick*) in der Funktion einen

      wenn ich den ganzen quellcode dazu gepostet hätte, käme doch auch
      ein strafender blick, oder?! so viel wie das ist

      ausschnitte des codes hätten auch nicht viel gebracht, da man (zumindest ich *g*) sonst die übersicht verloren hätte (oder schon hat).

      ich stell das ganze online. da ich jetzt nicht dazu komme,
      schaue bitte mal in zwei stunden unter der url
      http://www.area76.de/test/menue.htm

      da liegt das ganze. erst mal geht es nur mit dem msie (wg. document.all) ich arbeite aber daran.

      AlexS.

    2. Moin Christian!

      Du hast jetzt zwei Möglichkeiten: eine saubere und eine schludrige ,)
      Die saubere wäre, du erstellst den Array im Kopf des Scripts und
      machst ihn so global:
      [...]
      Oder du erstellst in der Funktion selber den Array global:
      [...]

      Und die dritte ist, das betreffende Array jeder der Funktionen als Parameter mitzugeben. (Da Arrays Objekte sind, wird nur eine *Referenz* auf das Array uebergeben (vgl. z.B. <../../sfarchiv/2000_1/t10312.htm#a51977>), d.h. es wird immer mit ein und demselben Array gearbeitet.) Man muss sich halt ueberlegen, ob das im speziellen Fall wirklich praktikabel ist. Kann dann ungefaehr so aussehen:

      <script language="JavaScript">
      var arrayname = new Array();

      function fk1(a) {

      »»  // Operationen
          alert(a.length);
      »»  }

      function fk2(a) {

      »»  // Operationen
      »»  }

      function main() {
          var array = new Array("a", "b", "c");
          fk1(array);
          fk2(array);
      }

      // usw
      </script>

      So long

  2. Hallo Alex

    Wenn du das Array global (d.h. ausserhalb jeder Funktion) definiert hast, dann kann man von überall auf dieses Array zugreifen, ihre Werte auslesen, und auch verändern. z.B.:

    <script>
    feld = new Array();  // feld ist jetzt ein globales Array

    function anfuellen() { füllt das Array; }
    function mach_was()  { tut irgendwas mit dem Array; }
    </script>

    Schöne Grüsse
    Bernhard