Lefor: Finde den fehler nicht...

function addfield () {
var text = document.createTextNode("Geburtsname:");

var addfield = document.createElement("input");
addfield.getAttribute("type","text");
addfield.getAttribute("size","60");
addfield.getAttribute("name","geb_name");

var feld1 = document.createElement("td");
feld1.appendChild(text);

var feld2 = document.createElement("td");
feld2.appendChild(addfield);

var zeile = document.createElement("tr");
zeile.setAttribute("id","geb_name_zeile");
zeile.appendChild(feld1);
zeile.appendChild(feld2);

var tabelle = document.getElementById('new');
var gzeile = document.getElementById("g_zeile");
tabelle.tBodies[0].insertBefore(zeile,gzeile);

}

Bekomme immer die Fehlermeldung node was not found ...

Ziel ist es ein Inputfeld Dynamisch zu erzeugen

  1. @@Lefor:

    nuqneH

    Bekomme immer die Fehlermeldung node was not found ...

    Ich nicht. Funktioniert wie gewünscht.

    Der Fehler liegt wieder mal nicht in dem Code, den du gezeigt hast, sondern in dem, den du nicht gezeigt hast.

    Außerdem solltest du, wenn du Hilfe willst, nicht anderen zumuten, dein Problem nachzustellen. Verlinke deine problematische Seite oder verwende JSFiddle o.ä., damit man sich das direkt ansehen kann.

    Qapla'

    --
    „Talente finden Lösungen, Genies entdecken Probleme.“ (Hans Krailsheimer)
    1. Hallo Gunnar,

      Komisch das es bei dir geht!

      <td>
              <input type="radio" class="Radio" name="g_m" value="m" onClick="addfield()" id="m"> männlich<br>
              <input type="radio" class="Radio" name="g_w" value="w" onClick="addfield()" id="w"> weiblich
            </td>

      das ist der Code wo ich die function aufrufe.

      lg
      lefor

      1. Hallo Lefor,

        <td>
                <input type="radio" class="Radio" name="g_m" value="m" onClick="addfield()" id="m"> männlich<br>
                <input type="radio" class="Radio" name="g_w" value="w" onClick="addfield()" id="w"> weiblich
              </td>

        Unabhängig vom JS-Problem: Die radio-Buttons sollen wohl miteinander reden, also muss ihr Name vereinheitlicht werden.

        Grüße,
        Thomas

      2. @@Lefor:

        nuqneH

        das ist der Code wo ich die function aufrufe.

        Wenn du sämtliche Hinweise in den Wind schlägst, bin ich raus.

        Qapla'

        --
        „Talente finden Lösungen, Genies entdecken Probleme.“ (Hans Krailsheimer)
    2. Gunnar,

      ich hab die sachen nur Lokal und nicht Online.

      JSFiddle sagt mir gerade nichts wie kann ich dir damit weiterhelfen?

      lg
      lefor

      1. @@Lefor:

        nuqneH

        JSFiddle sagt mir gerade nichts

        Ach, und Google auch nicht?

        Qapla'

        --
        „Talente finden Lösungen, Genies entdecken Probleme.“ (Hans Krailsheimer)
        1. http://jsfiddle.net/ctpwm4n2/

          1. http://jsfiddle.net/ctpwm4n2/

            Ich habe den HTML + JS jetzt dort eingefplegt, hoffe du kannst damit was anfangen.

          2. Hi,

            http://jsfiddle.net/ctpwm4n2/

            Bitte nächstes mal verlinken. Danke!

            Ich habe es in jsfiddle hinbekommen, glaube aber nicht, dass es das ist, was du erreichen willst.

            Zunächst die notwendige Anpassung an jsfiddle: es überträgt den JS-Code in einen closure, der bei window.onload aufgerufen wird. Dadurch Ist die Funktion nicht mehr global verfügbar. Ich füge sie deshalb mit addEventListener hinzu. Alternativ links "no-wrap in html/body" auswählen.

            Weiterhin: wie im Thread angemerkt willst du den beiden Radio-Buttons wohl eher den gleichen Namen geben, damit nur einer der beiden angehakt werden kann.

            Drittens wird durch deine Funktion jedesmal eine neue Zeile hinzugefügt, wenn ich das Geschlecht ändere. Denke nicht, dass das so sein soll.

            Der eigentliche Fehler ist recht einfach: du fügst deine neue Zeile vor dem Element mit der id "g_zeile" als Kind deines tbody ein. g_zeile war aber gar kein Kind, sondern ein td. Daher der Fehler.

            Folgendes jfiddle geht dann:
            http://jsfiddle.net/ctpwm4n2/1/

            Bis die Tage,
            Matti

            1. @@Matti Mäkitalo:

              nuqneH

              Weiterhin: wie im Thread angemerkt willst du den beiden Radio-Buttons wohl eher den gleichen Namen geben, damit nur einer der beiden angehakt werden kann.

              Außerdem: Die Beschriftungen von Eingabefeldern sollten mit <[ref:self812;html/formulare/strukturieren.htm#label@title=label]> ausgezeichnet werden,
              1. damit man sie anclicken kann und nicht auf Radiobutton/Checkbox clicken muss und
              2. damit Nutzer assistiver Technologien (Screenreader) einen Bezug von Eingabefeld und Beschriftung haben.

              Der eigentliche Fehler ist recht einfach: du fügst deine neue Zeile vor dem Element mit der id "g_zeile" als Kind deines tbody ein. g_zeile war aber gar kein Kind, sondern ein td. Daher der Fehler.

              Gut gesehen.

              Das kommt davon, wenn man sich das Leben unnötig schwer macht anstatt die dafür vorgesehenen Methoden [link:http://docs.webplatform.org/wiki/dom/HTMLTableElement/insertRow@title=insertRow()] und [link:http://docs.webplatform.org/wiki/dom/HTMLTableElement/insertCell@title=insertCell()] zu verwenden.

              Qapla'

              --
              „Talente finden Lösungen, Genies entdecken Probleme.“ (Hans Krailsheimer)
            2. Danke Matti,

              das ganze läuft bei mir aber auch nur wenn ich im HEAD vom html document

              		 <script type="text/javascript">  
              			window.onload = function() {  
              			document.getElementById("m").addEventListener('click', addfield);  
              			document.getElementById("w").addEventListener('click', addfield);  
              			}  
              			</script>  
              

              noch reinpacke ...

            3. Schonmal danke an euch beide! :)

              Eine frage habe ich noch, wenn ich jetzt das feld weg haben will wenn ich auf ein anderes geschlecht klicke ... wie würde ich das machen?

              1. Mahlzeit,

                wie würde ich das machen?

                Diese Frage kannst du vermutlich nur selbst beantworten.
                Ich(!) würde das entsprechende Feld einfach per CSS ausblenden.

                --
                42
  2. Hallo Lefor,

    function addfield () {
    var text = document.createTextNode("Geburtsname:");

    var addfield = document.createElement("input");
    addfield.getAttribute("type","text");
    addfield.getAttribute("size","60");
    addfield.getAttribute("name","geb_name");

    ^^^

    Hier würde ich eher addfield.setAttribute("attrname","…") oder addfield.attrname = "…" erwarten.

    Grüße,
    Thomas