checkbox Array erzwingen
jollyroger
- javascript
Hallo,
ich erzeuge dynamisch eine Liste mit 1 bis n Datensätzen aus einer Datenbankabfrage. Zu jedem Datensatz habe ich eine checkbox. Falls ich keinen Treffer aus meiner Datenbankabfrage erhalte, wird dynamisch ein anderer html-code erzeugt, somit habe ich also mindestens eine checkbox in de betroffenen seite. Da der Aufbau dynamisch in einer Schleife erfolgt, haben auch alle den gleichen Namen und der Zugriff über document.Formularname.Elementname funktioniert auch einwandfrei, sobald ich mindestens zwei Elemente habe. Habe ich nur eine checkbox, da meine Recordset nur ein Datensatz enthält, wird ja auch kein Array angelegt. Meine Frage ist jetzt ob ich irgendwie das Anlegen des Arrays auch mit nur einem Element erzwingen kann.
Vielen Dank
Hallo,
Hallo,
ich erzeuge dynamisch eine Liste mit 1 bis n Datensätzen aus einer Datenbankabfrage. Zu jedem Datensatz habe ich eine checkbox. Falls ich keinen Treffer aus meiner Datenbankabfrage erhalte, wird dynamisch ein anderer html-code erzeugt, somit habe ich also mindestens eine checkbox in de betroffenen seite. Da der Aufbau dynamisch in einer Schleife erfolgt, haben auch alle den gleichen Namen und der Zugriff über document.Formularname.Elementname funktioniert auch einwandfrei, sobald ich mindestens zwei Elemente habe. Habe ich nur eine checkbox, da meine Recordset nur ein Datensatz enthält, wird ja auch kein Array angelegt. Meine Frage ist jetzt ob ich irgendwie das Anlegen des Arrays auch mit nur einem Element erzwingen kann.
also ich denkmal so:
var blubb = new Array();
blubb[0] = "blabla";
hast du auch nur EIN element in dem Array.
und das fragst du ganz normal ab ...
alert(blubb[0]);
das geht natürlich auch in schleifen:
for(var i=0; i<blubb.length; i++)
{
document.write(blubb[i])
}
MfG. Christoph Ludwig
... haben auch alle den gleichen Namen und der Zugriff über document.Formularname.Elementname funktioniert auch einwandfrei, sobald ich mindestens zwei Elemente habe. Habe ich nur eine checkbox, da meine Recordset nur ein Datensatz enthält, wird ja auch kein Array angelegt. Meine Frage ist jetzt ob ich irgendwie das Anlegen des Arrays auch mit nur einem Element erzwingen kann.
Nein.
Struppi.
Moin!
Meine Frage ist jetzt ob ich irgendwie das Anlegen des Arrays auch mit nur einem Element erzwingen kann.
Nein, du musst eine Fallunterscheidung programmieren, die zunächst das Formelement darauf prüft, ob es sich um ein Array handelt.
Tipp: Arrayelemente verfügen i.d.R. über eine Eigenschaft "length", normale Elemente nicht. http://de.selfhtml.org/javascript/objekte/elements.htm#length
Ok, vielen Dank für die Antwort(en). Die Fallunterscheidung ist kein größeres Problem, ich hatte nur die Hoffnung sie eventuell umgehen zu können und den Code kleiner zu halten. Ich kann der Javascriptfunktion, die die Seite mit den Checkboxen abarbeitet aus der Funktion die den Html-Code generiert die Anzahl mitgeben und komme somit nicht in die Verlegenheit die Funktion length auf ein nicht vorhandenes Array anzuwenden. Damit ist es dann kein Problem.
Vielen Dank
Ok, vielen Dank für die Antwort(en). Die Fallunterscheidung ist kein größeres Problem, ich hatte nur die Hoffnung sie eventuell umgehen zu können und den Code kleiner zu halten.
Du kannst, wenn dich das nicht stört, auch ein gleichnamiges hidden Field in das Formular einbauen. Dann hast du auch bei einer Checkbox eine Collection.
Struppi.
Hi,
Da der Aufbau dynamisch in einer Schleife erfolgt, haben auch alle den gleichen Namen und der Zugriff über document.Formularname.Elementname funktioniert auch einwandfrei, sobald ich mindestens zwei Elemente habe. Habe ich nur eine checkbox, da meine Recordset nur ein Datensatz enthält, wird ja auch kein Array angelegt. Meine Frage ist jetzt ob ich irgendwie das Anlegen des Arrays auch mit nur einem Element erzwingen kann.
var meineCheckBoxen = document.Formularname.Elementname.length ?
document.Formularname.Elementname : [document.Formularname.Elementname];
Wenn du nur eine Checkbox hast, dann ist die length-Eigenschaft von document.Formularname.Elementname "undefined", weil es vom Typ HTMLInputElement ist. Dann wird also ein Array mit diesem einen Element als Inhalt angelegt, und der Variablen meineCheckBoxen zugewiesen.
Andernfalls hat document.Formularname.Elementname eine length-Eigenschaft - dann wird meineCheckBoxen direkt die Referenz auf die NodeList zugewiesen.
In beiden Faellen hast du also anschliessend in meineCheckBoxen die Referenz auf etwas, das eine length-Eigenschaft hat, und sich per for-Schleife durchlaufen laesst. (Fuer die allermeisten Anwedungsfaelle macht es keinen relevanten Unterschied, dass man einmal auf einem NodeList-Objekt arbeitet, und das andere "nur" auf einem Array. Das da trotzdem ein Unterschied ist, sollte man trotzdem im Hinterkopf behalten.)
MfG ChrisB