Niko: For in Schleife wird nicht durchlaufen

Hallolo,

Folgender Code:
------------------------------------------------

  
var customParams = {};  
for(var field in form.fields)  
{  
    field = form.fields[field];  
    customParams[field] = field.value;  
}  

~~~------------------------------------------------  
  
form: ein HTML-Formular.  
form.fields: Objekt mit einer Reihe von Formularfeldern, die ich hier gesondert behandeln möchte.  
  
form.fields sieht etwa so aus:  
\------------------------------------------------  
~~~javascript
  
form.fields = {  
    haupttext: <erstes input>,  
    introtext: <zweites input>,  
    showTitle: <drittes input>  
};  

~~~------------------------------------------------  
... die inputs jeweils als Referenz auf das ensprechende input.  
  
Eigenlich sollte er nun alle diese Formularfelder in form.fields durchlaufen und ihre jeweiligen Werte in das customParams Objekt schreiben.  
  
Das Problem ist, dass er garnicht in die For-in-Schleife reingeht, sondern diese komplett übergeht, obwohl form.fields garantiert nicht leer ist.  
  
Hoffe einer hier weiß warum und kann mir helfen.  
  
MfG Niko
  1. Das Problem ist, dass er garnicht in die For-in-Schleife reingeht, sondern diese komplett übergeht, obwohl form.fields garantiert nicht leer ist.

    Kannst du ein Beispiel zeigen, wo das der Fall ist?
    Mit deinem Code kann man das nicht nachvollziehen.

    Struppi.

    1. Hallo Struppi,

      Es hat sich erledigt, ich hab den Fehler zwar nicht gefunden, aber die For-in-Schleife durch eine andere ersetzt, die den gleichen Dienst besser verrichtet.

      Lg Niko

  2. var customParams = {};

    for(var field in form.fields)
    {
        field = form.fields[field];
        customParams[field] = field.value;
    }

      
    In der Zeile `field=...`{:.language-javascript} überschreibst du die Variable, die sich den Namen der aktuellen Eigenschaft des Objekts beim Schleifendurchlauf merkt. Der neue Wert ist eine Referenz auf einen DOM-Knoten (entspricht dem Input-Element). Dessen String-Repräsentation ist üblicherweise sowas wie `[Object HTMLInputElement]`{:.language-javascript} o.ä., in der Zeile mit `customParams[field]=...`{:.language-javascript} weist du also jedesmal der gleichen Objekteigenschaft von customParams, nämlich der, die den entsprechen Namen trägt, den Wert des Input-Feldes zu.  
    Wenn der Wert des letzten Input-Feldes also z.B. "xyz" ist, sähe eine Objekt-Repräsentation von `customParams`{:.language-javascript} so (oder ähnlich) aus: `{"[Object HTMLInputElement]":"xyz"}`{:.language-javascript}  
      
    
    > Das Problem ist, dass er garnicht in die For-in-Schleife reingeht, sondern diese komplett übergeht, obwohl form.fields garantiert nicht leer ist.  
      
    `customParams`{:.language-javascript} sollte nach obigem Code und deinen Angaben zufolge genau einen Wert enthalten, siehe oben.
    
    -- 
    Reden ist Silber, Schweigen ist Gold, meine Ausführungen sind Platin.  
      
    Self-Code: sh:( ch:? rl:( br:> n4:( ie:{ mo:) va:) de:> zu:} fl:| ss:| ls:~ js:|