Sebastian B.: mehrdimensionalles array

Hallo zusammen,
ich hoffe hier kann mir jemand helfen.
Ich habe folgendes Problem:
Ich fülle ein mehrdimensionales Javascript Array mittels PHP.
Soweit klappt dies auch.
Nun möchte ich dass wenn ich auf der Homepage in einem Dropdownmenü etwas auswähle die Werte zu der Auswahl in in Inputfelder geschrieben werden.
Hierbei bekomme ich aber diese Fehlermeldung in der Firefox JS Konsole:
Fehler: document.detail.erloes has no properties
Quelldatei: http://172.16.10.15/OPS/controlling/umsatzplanung/mass_detail_eintr.php?
Zeile: 36

Zeile 36 ist diese:
document.detail.erloes[wann].value = monatsuebersicht['erl'][i];

und die gesamte Funktion sieht wie folgt aus:
function changeContent(){

var monatsuebersicht = new Array();
monatsuebersicht['zug'] = new Object();
monatsuebersicht['erl'] = new Object();
monatsuebersicht['tn'] = new Object();
monatsuebersicht['wann'] = new Object();monatsuebersicht['zug'][0] = 1;monatsuebersicht['erl'][0] = 5400;monatsuebersicht['tn'][0] = 20;monatsuebersicht['wann'][0] = 1;
monatsuebersicht['zug'][1] = 1;monatsuebersicht['erl'][1] = 123;monatsuebersicht['tn'][1] = 23;monatsuebersicht['wann'][1] = 1;
monatsuebersicht['zug'][2] = 1;monatsuebersicht['erl'][2] = 1400;monatsuebersicht['tn'][2] = 10;monatsuebersicht['wann'][2] = 5;
monatsuebersicht['zug'][3] = 1;monatsuebersicht['erl'][3] = 8400;monatsuebersicht['tn'][3] = 22;monatsuebersicht['wann'][3] = 9;

var anz = 21;
 var ausw = document.detail.massnahme.value;

for(i=0; i < anz; i++){
  if(monatsuebersicht['zug'][i] == ausw){
   var wann = monatsuebersicht['wann'][i];
   document.detail.erloes[wann].value = monatsuebersicht['erl'][i];
   document.detail.teiln[wann].value = monatsuebersicht['tn'][i];
  }
 }
}

und die Inputfelder in die geschrieben werden soll sehen wie folgt aus:
<tr>
  <td><input size="10" type="text" name="erloes[1]" /></td>
  <td><input size="10" type="text" name="teiln[1]" /></td>
</tr>
[...]
kann ich dort nicht drauf zugreifen wegen dem namen oder wie kann ich darauf zugreifen und den inhalt verändern ?
ich bin mit meinem latein am ende und hab alles probiert was mir so eingefallen ist.

  1. Moin!

    name="erloes[1]" ist kein zulässiger Name.
    -- Skeeve

    1. Hi,

      name="erloes[1]" ist kein zulässiger Name.

      doch, bei Eingabefeldern schon. Für das gesamte Universum, PHP ausgenommen, ist es aber dann auch _der_ Name. Von einem mehrdimensionalen Array ist da nicht mal der Schatten einer Spur.

      Cheatah

      --
      X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
      X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
      X-Will-Answer-Email: No
      X-Please-Search-Archive-First: Absolutely Yes
      1. Moin!

        Hi,

        name="erloes[1]" ist kein zulässiger Name.

        doch, bei Eingabefeldern schon.

        Stimmt auffallend...

        Wirst alt wie 'ne Kuh, lernst immer noch dazu.

        Danke für den Hinweis!
        -- Skeeve

    2. n'abend,

      name="erloes[1]" ist kein zulässiger Name.

      wer sagt das? Selfhtml jedenfalls nicht. Zulässige Attribute von <input> und die Erklärung zu #CDATA erzählen nichts von unzulässig.

      weiterhin schönen abend...

      --
      Freundlich wie man war, hat man mir Großbuchstaben geschenkt.
      sh:( fo:# ch:# rl:° br:> n4:& ie:{ mo:} va:) de:] zu:} fl:{ ss:? ls:[ js:|
      1. Moin!

        wer sagt das? Selfhtml jedenfalls nicht.

        Siehe unten...

        -- Skeeve

  2. Du verwendest hier übrigens Objekte als Arrays und Arrays als Objekte (beides geht), du willst es aber eigentlich genau umgekehrt machen.

    var monatsuebersicht = new Array();
    monatsuebersicht['zug'] = new Object();

    monatsuebersicht ist ein Objekt mit dem Attribut 'zug'.

    und weiter unten

    monatsuebersicht['zug'][0] = 1;

    Die Eigenschaft zug die du weiter oben als Object deklarierst fügst du dann das Attribut '0' hinzu. Das sieht aber eher danach aus, als ob du hier ein array verwenden möchtest.

    Also so rum:

    var monatsuebersicht = new Object();
    monatsuebersicht['zug'] = new Array();

    wird ein Schuh draus.

    und die Inputfelder in die geschrieben werden soll sehen wie folgt aus:
    <tr>
      <td><input size="10" type="text" name="erloes[1]" /></td>
      <td><input size="10" type="text" name="teiln[1]" /></td>
    </tr>

    du erliegst hier dem Irrtum, dass es hier irgendeine Magie gäbe die die JS erkennen liesse das du hier ein Array hast.

    Die Magie fände statt, wenn du alle zusammengehörigen Elemente mit dem gleichen Namen, also z.b. 'erloes' oder wegen mir auch 'erloes[]' ausstatten würdest, dann könntest du auf die Elemente per:
    document.forms['formularname'].elements['erloes'][index]
    zugreifen.

    Struppi.

    --
    Javascript ist toll (Perl auch!)
  3. n'abend,

    document.detail.erloes[wann].value = monatsuebersicht['erl'][i];

    ist wann eine (mit einem korrekten Wert gefüllte) Variable?

    Elemente sollte man imho über IDs identifizieren. IDs sind eindeutig (bzw. haben eindeutig zu sein). Name muss nicht eindeutig sein, es dürfen durchaus 20 Elemente mit dem gleichen Namen existieren.

    Zudem ist document.detail.erloes kein Array. Wenn, dann müsstest du schon mittels document.detail['erloes[1]'].value darauf zugreifen. Sofern das Formular "detail" heisst.

    Objekte mit einer ID ausstatten:

    <tr>  
      <td><input size="10" type="text" name="erloes[1]" id="erloes_1"/></td>  
      <td><input size="10" type="text" name="teiln[1]" id="teiln_1"/></td>  
    </tr>
    

    direkter Zugriff auf die (per ID identifizierten) Objekte:

    var erloes = document.getElementById('erloes_1');

    weiterhin schönen abend...

    --
    Freundlich wie man war, hat man mir Großbuchstaben geschenkt.
    sh:( fo:# ch:# rl:° br:> n4:& ie:{ mo:} va:) de:] zu:} fl:{ ss:? ls:[ js:|