forms.elements beinhaltet nicht nur INPUT-Felder

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • forms.elements beinhaltet nicht nur INPUT-Felder

    Ich möchte alle Eingaben eines Formulares mit AJAX an den Browser übermitteln. Ich möchte eine Funktion schreiben, die alle INPUT-Felder im FORM-Element in ein assoziatives Array schreibt. Dabei soll das 'name'-Attribut der Schlüssel sein und das 'value'-Attribut der Inhalt. (Also nach dem gleichen Schema wie die POST-Variable in PHP.)

    Wenn ich nun myForm.elements (wobei 'myForm' mein Formular ist), so enthält der Array am Ende drei Elemente, die im HTML-Quellcode aber nicht als INPUT-Felder zu erkennen sind:
    [undefined] => undefined
    [item] => undefined
    [namedItem] => undefined
    Wenn ich myForm.getElementsByTagName("input") schreibe, ändert sich auch nichts.

    Woher kommen diese drei Elemente und was kann ich machen, damit ich wirklich nur alle INPUT-Felder (und sonst nichts) erhalte?

    Danke schon mal für eure Mühe.

  • #2
    Hallo,

    arbeite die elements-Property einfach als Array ab (mit for-Schleife und length statt for…in), dann passiert das nicht.

    Gruß,

    Amica
    [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
    Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
    Super, danke!
    [/COLOR]

    Kommentar


    • #3
      Danke, jetzt funktioniert es.

      Worin liegt jetzt der Unterschied zwischen
      HTML-Code:
      for(var i in forms.elements)
      und
      HTML-Code:
      for(var i = 0; forms.elements.length; i++)
      ?

      Kann mir jemand das Schlüsselwort verraten, zu dem ich auf Google eine Erklärung dafür finde?

      Kommentar


      • #4
        Die erste Variante (for-in-Schleife) iteriert über Objekte und liefert alle enthaltenen Eigenschaftsnamen. Arrays sind besondere Objekte, die zunächst erstmal die Eigenschaften 0 bis N besitzen, darüberhinaus aber auch noch weitere (z. B. length), die in diesem Falle natürlich auch abgerufen werden.

        Die zweite Variante (normale for-Schleife) ist daher für Arrays besser geeignet, weil man die length-Eigenschaft als Schleifenbedingung benutzen kann (ohne sie jedoch im Ergebnis haben zu wollen) und nur die numerischen Eigenschaften (0 bis N) als Ergebnis abruft.
        Zuletzt geändert von AmicaNoctis; 13.08.2010, 13:39. Grund: vorher stand da 1 bis N
        [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
        Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
        Super, danke!
        [/COLOR]

        Kommentar


        • #5
          du könntest natürlich auch einfach auf "undefined" testen (if) und das als Abbruchbedingung bei deiner Verarbeitung nehmen ....
          [font=Verdana]
          Wer LESEN kann, ist klar im Vorteil!
          [/font]

          Kommentar


          • #6
            Das wäre aber nicht sonderlich einfacher, als einfach eine for-Schleife zu nehmen.

            for-in ist für sowas weder gedacht, noch sonderlich geeignet.
            I don't believe in rebirth. Actually, I never did in my whole lives.

            Kommentar


            • #7
              Danke für eure Hilfe!

              Ich habe im Internet nun auch einiges bzgl. "Assoziative Arrays in Javascript" gelesen und verstehe jetzt das Verhalten.

              Kommentar

              Lädt...
              X