Erfragung der dynamischen Objekte, aus dem Document

Davicito

Erfahrenes Mitglied
Hallo,

ich hab noch nicht ganz verstanden, wie ich dynamische Objekte aus einem Document bekommen bzw. abfrage kann, wenn ich diese zur Laufzeit dynamisch erstelle, also gar nicht im Document-Code stehen.

Beispiel
HTML:
...
<form>
<fieldset id="fset">
</fieldset>
<input type="button" value="Feld erzeugen" onclick="insertInputField('foo','fset')">
</form>
Javascript:
...
<script type="text/javascript">			
	function insertInputField(pname,pform) {
 	var inputField =  document.createElement("input");     	
	inputField.setAttribute("type","text"); 
    	inputField.setAttribute("name",pname); 
 	
        alert(document.getElementsByName("fset").length);
 	
        var br  =  document.createElement("br");
 			document.getElementById(pform).appendChild(br); 
 			document.getElementById(pform).appendChild(inputField);
	}			
</script>
...
In dem oben gezeigten Code-Schnipsel, wird zur Laufzeit normale Eingabefelder in <fieldset name="fset"></fieldset>
eingefügt, durch appendChild.
Aber wenn ich jetzt durch alert(document.getElementsByName("fset").length) die Länge, sprich Anzahl aller erzeugten Elemente, ausgeben möchte, wird immer nur 0 ausgegeben. So als würden die Elemente zwar erzeugt, aber nicht wirklich in das document->fieldset eingefügt!
Kann mich mal jemand darüber aufklären, wieso es sich so verhält?

Vielen Dank im Voraus!
Gruß
 
Zuletzt bearbeitet:
Hmmm irgendwie ist das doch alles komisch!

Mal ganz allgemein, wenn ich über
Javascript:
document.[Formularname].appendChild(obj)
etwas in ein Formular eintrage möchte, funktioniert das auch sehr gut
Aber wenn ich das Selbe mit
Javascript:
document.getElemendsByName("[Formularname]").appendChild(obj)
realisieren möchte, dann erscheid nichts im Formular.
Oder wenn ich mir mal ein Obj mit namen anzeigen lassen möchte,
Javascript:
alert(document.getElemendsByName("[Formularname]").name);
erscheid undefined! Wenn ich hingegen aber
Javascript:
alert(document.[Formularname].elements[1].name);
schreibe, dann bekomme ich auch den Namen eines Objekts.

Ich bekomme nochmal ne Kriese!

Ich bin echt verwirrt und bin mit meinem Latain am Ende.
Hab das dumpfe Gefühl, als würden bei mir die Getter nicht funktionieren!?
Habe ich da etwas falsch gemacht bzw etwas übersehen?

Gruß.
 
Zuletzt bearbeitet:
So ganz plump gesagt erstellt JS das document-Object beim ersten Parsen der Seite. Via Selectoren etc kommst du nicht einfach auf die neu erstellen Elemente. In jQuery kann man dafür die Methode .on() benutzen. Wie es im puren JS funktioniert kann ich dir leider nicht sagen. Es ist sowieso dringend davon abzuraten in JS ohne Frameworks zu arbeiten, es sei denn du hast einen trifftigen Grund.
 
Eigentlich habe ich keinen trifftigen Grund... ich hatte auch an JQuery gedacht... aber als ich mich in JQuery einarbeiten wollte, haben mir viele gesagt, erstmal JavaScript zu lernen, um zu verstehen, was mit JQuery viel einfacher geworden ist... Natürlich ist mir schon klar, dass JavaScript sehr unsicher ist, in Bezug auf ActiveX-Elemente (dynamische Elemente). Dennoch möchte ich es verstehen und später durch JQuery ersetzten.

Aber wäre schön, wenn mir jemand weiter helfen kann, bei meinem Problem mit den Gettern.

Liebe Grüße.
 
Dann probier mal assembler zu programmieren, dann verstehst du was mit den höheren Sprachen einfacher geworden ist. ;)
Ist eine nicht ganz zutreffende Analogie, weil jQuery ja immernoch JS ist, nur 'anders' verpackt. Aber wäre für mich auch interessant wie man das im "nativen" JS löst.
 
getElementsByName liefert eine liste. Du musst also getElementsByName("[Formularname]")[0] machen (man beachte [0])
 
Hallo Holzmensch,
in Assembler habe ich in meiner Schulzeit, Programmieren gelernt am MFA, für simulierte Ampelschaltungen und am Oszilloskop und MFA, ein Menü für verschiedene Spannungstypen (Sägezahn-, Sinus-, Treppen-, etc-Spannungen).. aber darum geht es ja auch nicht, zu verstehen wie höhere Programmiersprachen funktionieren - Ich hab ja auch Erfahrungen in Java und C++ Frameworks wie: QT OpenCV oder OpenGL... gesammelt. Wenn man etwas neu erlernt, dessen Syntax man nicht so vertraut ist, ist es doch besser zu den Anfängen von JQuery zu gehen, um dann auch behaupten zu können, ich kann JQuery - als Framwork - und verstehe auch JS, gegenüber JQuery. Mal abgesehen von der Schreibarbeit, die mann sich dabei sparen kann und der enormen Sicherheit. Ich wills einfach nur besser verstehen und gleichzeitig mitreden können was JS angeht.

LG
 
Zuletzt bearbeitet:
Hallo CPoly,
hmmm... wenn ich also getElementsByName("[Formularname]")[0] den Index 0 hingten anstelle... dann sollte es also funktionieren? Ok das muss ich mal ausprobieren ^^... Lustig nur das ich doch durch die Angabe [Formularname] schon auswähle, welches Formular ist selectieren möchte. deshalb macht mir der Index[0] nicht so richtig sinn... ich probiers einfach mal aus... denn ich habe momentan auch keine andere Lösung. Wäre schön wenn mich jemand weiter aufklären könnte.

Ich hab auch das Problem, dass wenn ich Selectboxen dynamisch erzeugt habe, die Werte dann mittels Array in PHP zu übergeben, um diese dann mittels mysql_query(Insert..) in die Datenbank zu schieben. Wäre cool wenn mir da einer weiter helfen könnte.

LG
 
Zuletzt bearbeitet:
Zurück