Dred: Alle input-Tags einer Formulars erhalten

Hallo,
ich möchte eine Javascriptfunktion schreiben, die mir automatische mittels

encodeURIComponent(document.getElementById(name).value)

die Inputfelder ausliest. Dies benötige ich für einen Ajaxrequest.

Ich möchte diese Code-Zeile gerne in eine Schleife packen. Damit ich neue Variablen im Formular automatisch registrieren kann (ohne die JS-Funktion zu ändern) möchte ich gerne über alle vorhandenen Input Felder des Formulars iterieren.

Ich denke in Richtung childNodes, finde aber die Lösung nicht. Geht dies überhaupt?

Habe mal console.log(document.getElementById("edialogtable").childNodes); eingefügt. Dort stehen aber alle Kindknoten ("table", "tbody", "tr", ...). Ich möchte aber nur die Input-Felder in einm Array haben!

Liebe Grüß

  1. 1. Deine Überschrift ist irreführend. Du suchst nicht alle HTML Tags sondern alle Formularfelder

    2. Die Lösung ist document.formName.elements[x].

    Gruß.elements[T-Rex]

    1. Vielen Dank an beide.

      Ich kann jetzt mit folgendem Code erreichen, was ich wollte:

      var allVars    = new Object();  
        var inputs     = document.forms.ajaxdialogtable.elements;  
        
        for(var i=0; i<inputs.length; i++){  
        
          if((inputs[i].type != "button") && (inputs[i].nodeName == "INPUT")) {  
        
            allVars[inputs[i].name] = inputs[i].value;  
        
          }  
        
        }
      

      Meint ihr, dass mit "button" und "INPUT" (case sensitive) ist zu allen Browsern kompatibel?

      Grüße und vielen Dank.

      1. Meint ihr, dass mit "button" und "INPUT" (case sensitive) ist zu allen Browsern kompatibel?

        Also INPUT ist glaube ich bei ie groß und bei ff klein.

        Ansonsten ist es kompatibel

        Gruß
        kompatibler
        T-Rex

        1. Meint ihr, dass mit "button" und "INPUT" (case sensitive) ist zu allen Browsern kompatibel?

          Also INPUT ist glaube ich bei ie groß und bei ff klein.

          Ansonsten ist es kompatibel

          Gruß
          kompatibler
          T-Rex

          Vielen Dank nochmal. Habe die INPUT-Prüfung dann doch lieber rausgenommen. elements gibt ja sowieso nur input-Felder zurück. Obwohl es auch im FF 3.5.2 INPUT (groß) zurückgegeben hat.

          Grüße und einen schönen Tag.

          1. Hi,

            Meint ihr, dass mit "button" und "INPUT" (case sensitive) ist zu allen Browsern kompatibel?

            Also INPUT ist glaube ich bei ie groß und bei ff klein.

            Sicherheitshalber kann man den Wert in Lower- oder Uppercase umwandeln, bevor man ihn vergleicht.

            Habe die INPUT-Prüfung dann doch lieber rausgenommen. elements gibt ja sowieso nur input-Felder zurück.

            Nein.

            MfG ChrisB

            --
            RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
          2. [latex]Mae  govannen![/latex]

            Meint ihr, dass mit "button" und "INPUT" (case sensitive) ist zu allen Browsern kompatibel?

            Also INPUT ist glaube ich bei ie groß und bei ff klein.

            Ansonsten ist es kompatibel

            Vielen Dank nochmal. Habe die INPUT-Prüfung dann doch lieber rausgenommen.

            Nimm toLowerCase() oder dessen Gegenstück

            elements gibt ja sowieso nur input-Felder zurück.

            Ja, wenn ausschließlich Input-Elemente im Formular verwendet werden, sonst nein.

            Stur lächeln und winken, Männer!
            Kai

            --
            Dank Hixies Idiotenbande geschieht grade eben wieder ein Umdenken
            in Richtung "Mess up the Web".(suit)
            SelfHTML-Forum-Stylesheet
        2. Meint ihr, dass mit "button" und "INPUT" (case sensitive) ist zu allen Browsern kompatibel?

          Also INPUT ist glaube ich bei ie groß und bei ff klein.

          Bitte, was sollen denn solche Spekulationen. Erstens kann man es innerhalb von einer Minute ausprobieren, zweitens kann man es innerhalb von zwei Minuten in den entsprechenden Webstandards nachschlagen.

          nodeName ist im HTML-DOM immer uppercase, lediglich im XHTML-DOM ist es lowercase (bzw. so, wie es im Quellcode steht, d.h. bei korrektem XHTML lowercase).

          http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-104682815
          http://dvcs.w3.org/hg/domcore/raw-file/tip/Overview.html#dom-element-tagname

          Was die type-Eigenschaft angeht, so ist definiert, dass sie lowercase sein muss.
          http://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-62883744
          getAttribute('type') hingegen würde den Attributwert so liefern, wie er im Quellcode steht.

          Mathias

          1. Was die type-Eigenschaft angeht, so ist definiert, dass sie lowercase sein muss.
            http://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-62883744

            Wird durch HTML5 ersetzt:

            http://dev.w3.org/html5/spec/the-input-element.html

            »The autocomplete and type IDL attributes must reflect the respective content attributes of the same name, limited to only known values.«

            http://dev.w3.org/html5/spec/common-dom-interfaces.html#limited-to-only-known-values

            »If a reflecting IDL attribute is a DOMString attribute whose content attribute is an enumerated attribute, and the IDL attribute is limited to only known values, then, on getting, the IDL attribute must return the conforming value associated with the state the attribute is in (in its canonical case) [...]«

            Und die möglichen Typen sind hier definiert, allesamt lowercase:
            http://dev.w3.org/html5/spec/the-input-element.html#attr-input-type-keywords

            Mathias

          2. @@molily:

            nuqneH

            nodeName ist im HTML-DOM immer uppercase, lediglich im XHTML-DOM ist es lowercase (bzw. so, wie es im Quellcode steht, d.h. bei korrektem XHTML lowercase).

            Möchte man JavaScript ohne Not so schreiben, dass die Abarbeitung davon abhängt, ob ein XHTML-Dokument als HTML ode als XML verarbeitet wird?

            Qapla'

            --
            Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
            (Mark Twain)
            1. Hallo,

              Möchte man JavaScript ohne Not so schreiben, dass die Abarbeitung davon abhängt, ob ein XHTML-Dokument als HTML ode als XML verarbeitet wird?

              In Nöten kommt man meines Wissens, wenn man versucht, ein XHTML-Dokument wie ein HTML-Dokument zu scripten. Lange Zeit unterstützten die Browser bei application/xhtml+xml nicht das gewöhnliche HTML-DOM. Also würde schon document.forms scheitern, was bei application/xml trotz korrekter Namensraumangabe im Wurzelelement zumindest im Firefox noch heute der Fall ist. Features wie innerHTML sind nur teilweise brauchbar, sodass komplexere Bibliotheken und Scripte erst gar nicht auf XHTML ausgelegt sind.

              Ich vermute nicht, dass sich diese Situation in der letzten Zeit verbessert hat, da sich Browserhersteller und Webautoren nicht mehr für XHTML bzw. clientseitiges Scripting in XHTML-Dokumenten interessieren – selbst wenn die HTML5-Spezifikation diesen Fall m.W. gleichberechtigt abdeckt und das Verhalten z.B. von innerHTML auch für den XHTML-Fall definiert.

              Einer Kompatibilität mit XHTML sollte man sich daher widmen, wenn diese benötigt wird. Wenn nicht, gibt es keinen Grund, sich vorher den Kopf zu zerbrechen und unnötige Komplexität im Code unterzubringen, die nicht einmal im Einsatz getestet wird.

              Mathias

      2. @@Dred:

        nuqneH

        Meint ihr, dass mit "button" und "INPUT" (case sensitive) ist zu allen Browsern kompatibel?

        Darauf würde ich mich nicht verlassen wollen. Lieber http://de.selfhtml.org/javascript/objekte/string.htm#to_lower_case@title=umwandeln (und dann natürlich mit "input" vergleichen).

        Qapla'

        --
        Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
        (Mark Twain)
        1. Meint ihr, dass mit "button" und "INPUT" (case sensitive) ist zu allen Browsern kompatibel?

          Darauf würde ich mich nicht verlassen wollen.

          Und dafür gibt es einen konkreten Grund? Man kann bei browserübergreifender Programmierung nicht auf rein hypothetische Fälle reagieren. Würde man das konsequent tun, müsste man sämtliche theoretisch mögliche Fehlerfälle abdecken. Das würde zu absurdem Code führen. Unter dem Gesichtspunkt wäre ein harmlos aussehendes
          inputs[i].nodeName.toLowerCase() == "input"
          ebenfalls komplett unsicher. Wenn ich hypothetisch annehme, dass nodeName fehlerhaft implementiert ist, dann sollte ich nicht davon ausgehen, dass inputs[i] ein Objekt mit einer Eigenschaft nodeName liefert und diese die Methode toLowerCase bietet. Das ist nicht einmal weit hergeholt, es gab einmal Browser, die nodeName nicht kannten. Üblicherweise unterstützt man diese nicht mehr. Nicht einmal in der Weise, dass man per Feature-Abfrage geordnet aus dem Programm aussteigt. Man nimmt das DOM einfach als Basis und baut dort Weichen ein, wo bei real existierenden Browsern noch Diskrepanzen bekannt sind. Sind diese für type und nodeName bekannt?

          Mathias

  2. Hi,

    [...] möchte ich gerne über alle vorhandenen Input Felder des Formulars iterieren.

    Ich denke in Richtung childNodes, finde aber die Lösung nicht. Geht dies überhaupt?

    http://de.selfhtml.org/javascript/objekte/elements.htm

    Und getElementsByTagName ist auch auf dem Formularelement aufrufbar.

    MfG ChrisB

    --
    RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?