getElementsByTagName nach dynamischer Erzeugung
Falko
- javascript
Hallo - ich habe eine kleine Testseite gebastelt. Ich erzeuge dynamisch eine Tabelle die unter anderem Checkboxen beinhaltet.
Nach der erzeugung kann man mit dem Button eine Mehtode ausführen, die alle elemente durchgeht:
hier der code:
<html>
<body>
<div id="User">
</div>
<script type="text/javascript">
<!--
function createTable()
{
var appendField = document.getElementById("User");
var table = document.createElement("table");
var tableBody = document.createElement("tbody");
for (var i = 0 ; i<20; i++ )
{
var tableRow = document.createElement("tr");
//TD 1
var tableData = document.createElement("td");
tableData.appendChild(document.createTextNode("TestInhalt"+i));
tableRow.appendChild(tableData);
//TD 2
var tableData = document.createElement("td");
var checkbox = document.createElement("input");
checkbox.name="toUpload";
checkbox.type="checkbox";
checkbox.value="value"+i;
tableData.appendChild(checkbox);
tableRow.appendChild(tableData);
tableBody.appendChild(tableRow);
}
table.appendChild(tableBody);
appendField.appendChild(table);
}
function goThrewIt()
{
var CheckBoxElemente = document.getElementsByName('toUpload');
alert (CheckBoxElemente.length);
for (var i = 0; i<CheckBoxElemente.length; i++)
{
alert('value='+CheckBoxElemente[i].value+' name=|'+CheckBoxElemente[i].name+"|");
}
}
createTable();
//-->
</script>
<input type="button" onClick=goThrewIt() value="los gehts" />
</body>
</html>
------
Wenn ich nun die Stelle getElementsByName-Stelle wie folgt ändere:
var CheckBoxElemente = document.getElementsByTagName('input');
Findet er die dynamisch erzeugten Elemente und auch das name - Attribut von checkbox heißt richtig - wieso geht das nicht?
Und Sorry für den Fall dass ich unfähig war...
Hello out there!
Wenn du Elemente schon per DOM-Methoden dynamisch erzeugst, warum willst du diese nachträglich nochmal im Elementbaum suchen? Das ist unnötig; lege dir bei der Erzugung gleich ein Array an, in dem du die 'input'-Elemente festhältst, dann kannst du dir den Aufruf von document.getElementsByTagName('input') sparen.
function goThrewIt()
Dass „durch“ “through” heißt und “threw” das Past von “throw” (werfen) ist, weißt du? Eine Schreibvariante für “through” wäre “thru”.
See ya up the road,
Gunnar
@Gunnar danke für die schnelle Info und für die Englischtipps... :-)
Ich muss die nochmals durchgehen!
Ich habe eine ActiveX komponente die einen USB-Stick ausliest. Dort sind mehre Files drauf.
Ich ermittle alle FileNamen von der Komponente, erzeuge sie dynamisch.
Der User wählt die aus, die er hochladen will.
Dann drückt er den Button.
Dann geht das Javascript alle checkboxen durch und registriert, was gewählt worden ist.
Es wäre schön nur die Inputfelder durchzugehen, die relevant sind. Daher: getElementsByName.
Gruß
Falko
Hello out there!
Es wäre schön nur die Inputfelder durchzugehen, die relevant sind. Daher: getElementsByName.
Verstehe dein Problem nicht. Alle von der der Funktion createTable() erzeugten Checkboxen haben ein 'name'-Attribut mit dem Wert "toUpload". Diese willst du nachträglich nochmal suchen und damit in einem Array haben. Das kannst du doch auch gleich haben:
Außerhalb der Schleife:
var checkboxes = new Array();
und innerhalb der Schleife schreibst du statt
~~~javascript
var checkbox = document.createElement("input");
checkbox.name="toUpload";
eben
~~~javascript
checkbox[i] = document.createElement("input");
checkbox[i].name="toUpload";
See ya up the road,
Gunnar
Hello out there!
var checkboxes = new Array();
▲
~~~javascript
checkbox[i] = document.createElement("input");
checkbox[i].name="toUpload";
▲
Argl. Das sollte schon übereinstimmen. Also "checkboxes[i]".
See ya up the road,
Gunnar
--
„Wer Gründe anhört, kommt in Gefahr nachzugeben.“ (Goethe)
Sich die Elemente gleich bei der erstellung zu merken und später dann nochmal durchzugehen - hab nicht dran gedacht...
Werde das mal probieren.
Danke!
(Aber wieso das mit getElementsByName net geht - weißte net?)
Hi,
(Aber wieso das mit getElementsByName net geht - weißte net?)
Weil Du den IE benutzt.
Und weil die IE-Programmierer es nicht auf die Reihe gebracht haben, das vernünftig zu implementieren:
http://msdn.microsoft.com/workshop/author/dhtml/reference/properties/name_2.asp, unter Remarks, 3. Absatz
cu,
Andreas
Hello out there!
Außerhalb der Schleife:
und auch außerhalb der Funktion createTable()
var checkboxes = new Array();
Sonst stünde das Array ja nur lokal innerhalb der Funktion createTable() zur Verfügung.
Ich mach ja wieder voll den Gunnar™ heute,
Gunnar