Checkboxes nach Namen selektieren

plasticc

Grünschnabel
ich versuche schon seit einer Weile erfolglos eine Javascript Funktion zu schreiben, die Checkboxes aufgrund ihres Namens selektiert
genaugenommen dem Anfang ihres Namens (den ich als Argument an die Funktion übergeben will)

mein (nicht funktionierender) Ansatz sieht so aus:
Code:
<html>
<body>

<script language="JavaScript">
function select_certain(formname, string)
{
	for (i=0; i<formname.elements.length; i++)
	{
		if (formname.elements[i].name.substring(0, string.length-1) == string)
			formname.elements[i].checked = true;
	}
}
</script>

<form name="main" action="test.htm" method="post">
	<input type="checkbox" name="eine checkbox">eine checkbox<br>
	<input type="checkbox" name="noch eine checkbox">noch eine checkbox<br>
	<input type="checkbox" name="eine weitere checkbox">eine weitere checkbox<br>
	<input type="button" value="select certain" onclick=select_certain(main,"eine")>
	<input type="submit" value="submit">
</form>

</body>
</html>

durch Klicken auf "select certain" sollte jetzt ein Häkchen in Checkbox 1 und Checkbox 3 auftauchen, was leider nicht passiert
der Fehler dürfte in der If-Anweisung der Javascript Funktion stecken

hat jemand eine Idee? :)
 
Hallo,

ich schau mir gerade mal dein Problemchen an...

Hab zwar noch nicht rausgefunden, was da nicht funktioniert, hab aber kleine Bugs gefunden:

Nr1: Versuch mal, den JavaScript-Teil in den Head, und nicht in den Body zu verschieben.

Nr2: Wenn du die Strings vergleichen willst, und "eine" übergibst, und den Name der Checkbox mit substring abschneidest, dabei aber die Länge des anderen Strings mit Stringlänge -1 festlegst, vergleichst du "ein" mit "eine", und das wird dann wahrscheinlich nie funktionieren.

Nr3: Wenn du die Schleife bis formname.elements.length laufen lässt, überprüfst du innerhalb der Schleife nicht nur die Checkboxes, sondern auch die Buttons, was ja relativ überflüssig ist.

Das wärs mal fürs Erste, ich versuch dann noch, das Problem mit der Auswahl zu lösen,

lg D;-]c

edit: Nr3
 
Schau dir das mal an, damit dürfte es zu schaffen sein.

Du musst, bevor du die Checkboxes selektierst, die Kontrolle über das jeweilige Element übernehmen!

lg D;-]c
 
Hi!

Probier mal das hier !

Das reicht aus, solange du nicht mehrere Auswahlmöglichkeiten zulässt. Soll heißen, dass man die Checkbox 2 nicht auch bei einer Abfrage nach dem Wort "noch" ankreuzen will.

Wenn noch fragen sind, immer zu.

Gruß DrEvil

_________________________________________

ok, da hab ich dann den Post von Overflow übersehen, sorry! is natürlich das gleiche...
 
Zuletzt bearbeitet:
danke euch beiden, ein sehr hilfreicher Link, löst mein Problem :)
ich umgeh' das Teilstring-des-Namens-selektieren dadurch, dass ich den verschiedenen Checkboxes gruppenweise gleiche Values zuweise und dann sowas mach:

Code:
function select_certain(formname, string)
{
	for (i=0; i<formname.elements.length; i++)
	{		
		if (formname.elements[i].value == string)
			formname.elements[i].checked = true;		
	}	
}

ich wusste bis vorhin nicht, dass man Checkboxes überhaupt Values zuweisen kann

@DrOverflow:
Nr1: war nur eine Testseite, hab soviel eingespart wie möglich :)
Nr2: stimmt, hätte mir genauer durchlesen sollen, wie die substr()-Funktion arbeitet
Nr3: das wäre in der Tat meine nächste Frage gewesen, kann ich den Typ dieser formname.elements[i] irgendwie bestimmen/überprüfen, also z.B. ob es sich um Buttons oder Checkboxes handelt?

danke nochmal :)
 
Nr3: das wäre in der Tat meine nächste Frage gewesen, kann ich den Typ dieser formname.elements[ i ] irgendwie bestimmen/überprüfen, also z.B. ob es sich um Buttons oder Checkboxes handelt?
Du kannst bei den Checkboxes einen Value-Wert angeben, was du ja bereits gemacht hast, und mit dem du die Elemente dann abfragst und selektierst.
Und dann kannst du mit Hilfe des Attributes
name="irgendwas"
Elemente gruppieren, dh wenn alle Checkboxes die selbe Gruppe betreffen, kannst du ihnen allen den selben Namen zuweisen, und damit auch ansprechen.

Code:
function select_certain(formname, string)
{
	for (i=0; i<formname.elements.name.length; i++)
	{		
		if (formname.elements.name[i].value == string)
			formname.elements.name[i].checked = true;		
	}	
}

Ich hab das zwar nicht getestet, aber es müsste eigentlich funktionieren.

Deine Frage wird damit zwar leider nicht zu 100% beantwortet sein, da du ja wissen wolltest, ob du irgendwie überprüfen kannst, um welches Element es sich handelst, aber du hast mal eine Möglichkeit, die einzelnen Elemente zu gruppieren.

lg D;-]c
 

Neue Beiträge

Zurück