Gegeben:
<input type="checkbox" name="blub[]" value="1">
<input type="checkbox" name="blub[]" value="2">
Frage:
Wie greife ich per JS auf eine Checkbox mit diesem Namen zu? Die eckigen Klammern müssen ja sein, damit ich das ganze dann weiterverarbeiten kann... Und die elements[x]-Syntax möchte ich nicht verwenden, weil sie mir zu unflexibel ist...
Hi,
um Missverständisse vorzubeugen, die Syntax der D.O.M
function chkfkt(){
var wert= document.'formname'.'elementname'.value;
// bzw
var wert= document.form(x).element(y).value;
}
kennst du?!
Hmmm... nein.
Aber:
Syntax error while loading (line 29)
if (document.forms[0].'username'
-----------------------------------^
Oder hab ich dich falsch verstanden...?
Beispiel:
<form name="testform" ...>
<input type="checkbox" name="blub" value="1" onClick="chkfkt()">
...
var wert = document.testform.blub.value;
// oder
var wert = form.bulb.value;
// oder
for (x=1;x<=10;x++){
if(document.form[0].blub[x].checked){
// mach irgendwas für name="bulb[x]"
}
}
Aber nicht Index-Schreibweise mit Namesspezifikation mischen
[Editiert von Blaster am 11-03-2002 um 22:17]
Aber ich muss die eckigen Klammern doch verwenden, damit ich dann im Formhandler (PHP) das ganze als Array verarbeiten kann.
Ja, mußt Du. Aber mann kommt trotzdem dran, ohne die genaue Position zu wissen; Du mußt einfach nur danach suchen.
Um den Aufwand dabei zu verringern, gat das Objeckt document seit im IE und NN seit Version 6 die Methode getElementsByName (http://selfhtml.teamone.de/javascript/objekte/document.htm#get_elements_by_name).
In älteren Browsern kannst du Dir mit folgender Funktion behelfen. Die listet nur alle Checkboxen mit dem Namen und dem Status (checked oder nicht) auf; anpassen an deine Bedürfnisse mußt du selbst:
[code]
function ListCheckboxes(formname, checkname)
{
var s = formname+'.'+checkname+':';
ar = eval ('document.'+formname+'.elements);
for (i=0; i<ar.length; i++)
{
el = ar[i];
if (el.name==checkname)
s += '\n'+(el.checked ? 'x ':'o ')+el.value;
}
alert (s);
}
Dann nehme ich letzteres :)
Danke vielmals!
Was dabei heraus gekommen ist, falls es jemanden interessiert:
function ListCheckboxes(formname, checkname)
{
atleast_one_checked = false;
ar = eval('document.'+formname+'.elements');
for (i=0; i<ar.length; i++)
{
el = ar[i];
if (el.name==checkname) {
if (el.checked) atleast_one_checked = true;
}
}
if (atleast_one_checked) {
return true;
} else {
return false;
}
}
und als letztes i-tüpfelchen würde ich noch folgende änderung vorschlagen:
function ListCheckboxes(formname, checkname)
{
atleast_one_checked = false;
ar = eval('document.'+formname+'.elements');
for (i=0; i<ar.length; i++)
{
el = ar[ i ];
if (el.name==checkname) {
if (el.checked)
{
atleast_one_checked = true;
break;
}
}
}
if (atleast_one_checked) {
return true;
} else {
return false;
}
}
damit wird deine schleife dann beendet, sobald ein gechecktes feld gefunden wurde.
bringt bei der menge an formularfeldern die man im normalfall so hat einen irren performance-gewinn ;-)
[Editiert von wahsaga am 14-03-2002 um 13:49]