Mehrere Checkboxen auswählen

Tucker

Erfahrenes Mitglied
Hallo!

Javascript:
function setchecked(datein)
 {
  for (var i = 0; i < document.getElementById(datein).length; i++) 
  {
   document.getElementById(datein)[i].checked = true;
     }
 }
Diese Funktion soll mir anhand eines übergebenes Strings (datein) alle Checkboxen mit gleichnamiger ID markieren. Allerdings kommt mir beim Aufruf dieser Funktion die Fehlermeldung, dass ein Objekt erwartet wird.

Der Aufruf sieht so aus:
HTML:
<input type="checkbox" name="hauptdatei[]" value="12286.imp" onselect="javascript: set_checked('12286.imp');" />

Die Checkboxen, die markiert werden sollen, sehen alle in etwa so aus:
HTML:
<input type="checkbox" id="12286.imp" name="up_datei[]" value="" />

Weiß jemand einen Rat, woran es liegen kann?
 
getElementById() besitzt keine length-Eigenschaft, und auch sonst ist es die falsche Wahl...da eine ID immer eindeutig ist.


Stattdessen kannst du es mit getElementsByName() probieren.

Wenn das nicht geht...ginge bspw. Folgendes:
Gehe alle Checkboxen des Dokuments durch, und falls ihre ID die Betreffende ist, checke sie:
Code:
function setchecked(datein)
{
  for (i = 0; i < document.getElementsByTagName('input').length; ++i)
    {
      o=document.getElementsByTagName('input')[i];
      if(o.type=='checkbox' && o.id==datein)
        {
          o.checked=true;
        }
    }
}
...das ist dann aber trotzdem ungültiges HTML wegen der mehrfach vergebenen ID, und auch wegen des Punktes in der ID...der ist dort nicht erlaubt...theoretisch. Praktisch gehts trotzdem :)
 
Da eine ID dokumentweit einmalig ist, reicht folgende Funktionsdefinition:
Code:
function setCheckedByID( objID )
{
	document.getElementById(objName).checked = true;
}
Für Elementnamen könntest du folgende benutzen:
Code:
function setCheckedByName( objName )
{
	var elems = document.getElementsByName(objName);
	for(var i=0; i<elems.length; i++) {
		elems[i].checked = true;
	}
}
 
Ich seh schon, ich muss etwas weiter ausholen. Ist ne ziemlich komplizierte Sache. Es handel sich hier eigentlich um ein PHP- Script. Dabei wird ein Ordner ausgelesen. Es gibt Hauptdatein (abcdef.imp) und zugehörige Anhangsdatein (abcdef_1.jpg). In einer Übersicht werden jetzt alle diese Datein ausgegeben. Zu den auptdatein jeweils die Anhangsdatein.
Komplett alle Datein sind in einem Form.

Bezwecken tu ich, dass alle Anhangsdatein ausgewählt werden, sobald ich die Hauptdatei ausgewählt habe. Aufgrund einer undefinierbaren Zuordnung bezüglich der Input-Namen (haupdatei[]) und der Anhangsdatein (ebenfalls Array), wollte ich die zugehörigen Checkboxen zur Hauptdatei alle mit der selben ID kenntlich machen.

Ich gebe euch mal einen Auszug aus dem fertigen HTML - Dokument:
HTML:
<form method="post" action="index.php?action=import" name="upload">
<input type="hidden" name="do" value="" />
<input type="checkbox" name="hauptdatei[]" value="12286.imp" onClick="setchecked('12286.imp');" /> 12286.imp
<ul>
<li>
<input type="checkbox" id="12286.imp" name="up_datei[]" value="12286_1.jpg" />
<a href="import/12286_1.jpg" class="link_more" target="_blank">12286_1.jpg</a>
</li>
<li>
<input type="checkbox" id="12286.imp" name="up_datei[]" value="12286_2.jpg" />
<a href="import/12286_2.jpg" class="link_more" target="_blank">12286_2.jpg</a>
</li>
<li>
<input type="checkbox" id="12286.imp" name="up_datei[]" value="12286_3.pdf" />
<a href="import/12286_3.pdf" class="link_more" target="_blank">12286_3.pdf</a>
</li>
</ul>
 
Wie bereits erwähnt, sind IDs dokumentweit einmalig. Daher ist dein Lösungsansatz nicht möglich. Gib den Elementen doch einfach neue Namen wie etwa „up_datei[12286.imp][]“.
 
Gumbo hat gesagt.:
Wie bereits erwähnt, sind IDs dokumentweit einmalig. Daher ist dein Lösungsansatz nicht möglich. Gib den Elementen doch einfach neue Namen wie etwa „up_datei[12286.imp][]“.

Habe ich gerade eben gemacht. Nur kommt mir da der selbe Fehler. Die Funktion ieht nun so aus:
Javascript:
function setchecked(datein)
 {
  for (i = 0; i < document.getElementsByName('up_datei['+datein+']').length; ++i)
     {
       document.getElementsByName('up_datei['+datein+']').checked = true;
     }
 }

@Sven, deine Variate hat bei mir leider nicht funktioniert.
 
Du hast den Elementnamen nicht ganz übernommen:
Code:
function setchecked(datein)
{
	var elems = document.getElementsByName("up_datei[" + datein + "][]");
	for( var i=0; i<elems.length; i++ ) {
		elems[i].checked = true;
	}
}
 
Auch damit kommt die Fehlermeldung, dass beim Aufruf der Funktion ein Objekt erwartet wird. Die Funktion wird nicht ausgeführt. :(
 
Zurück