Checkbox Array mit Javascript prüfen

steyrblade

Mitglied
Hi ich würde gerne prüfen ob min. eine checkbox angeklickt wurde.
Es können aber auch alle angeklickt werden (sollte klar sein :D).

Bsp. Code
PHP:
for($x=1;$x<100;$x++){
	echo"<input type='checkbox' name='add_xy' value='$x'>";
}


Nach einem submit wird das Javascript ausgeführt
Javascript:
function pruefen(checkboxliste)
{ 	
	//Alle Checkboxen überprüfen (min einer muss selektiert sein)
	ausgewaehlt='0';
	for (i = 0; i < checkboxliste.length; i++)
	{		
		if(checkboxliste[i].checked == true){
			ausgewaehlt='1';
		}
	}	
	if(ausgewaehlt=='0'){
		alert("Sie haben nichts selektiert");
		return false;
	}
	
}


So weit so gut.
Normalerweise mache ich die Checkbox aber als Array: <input type='checkbox' name='add_xy[]' value='$x'>
damit ich die variablen dann in PHP als Array habe.
In diesem Fall sagt mir Javascript die Variable ist undefined

Kann mir einer sagen wie ich das Array in JS prüfen kann?
Oder werden die Checkboxen auch ohne Array indiziert, sodass ich sie in PHP wieder verwenden kann.
 
Hi,

Du kannst die Checkboxen so auslesen:

HTML:
Länge: document.formname['add_xy[]'].length;
Wert auslesen: if (document.formname['add_xy[]'][i].checked == true) {
// code....
}

Gruß,
Maeg
 
Code:
Länge: document.formname['add_xy[]'].length;
Wert auslesen: if (document.formname['add_xy[]'][i].checked == true) {
// code....
}

Das verstehe ich noch nicht ganz.
Hier hast du doch ein Array für ein Form gemacht oder hast du einen Punkt vergessen?

Bei:
Code:
ausgabe=document.formxy['checkboxxy[]'][0];
alert(ausgabe);

tut sich jedenfalls nichts
 
Das verstehe ich noch nicht ganz.
Hier hast du doch ein Array für ein Form gemacht oder hast du einen Punkt vergessen?

Bei:
ausgabe=document.formxy['checkboxxy[]'][0];
alert(ausgabe);
tut sich jedenfalls nichts

Was soll sich da auch tun?
Probier doch mal, auszulesen, ob die Checkbox angehakt ist oder nicht.

HTML:
if (document.formxy['checkboxxy[]'][0].checked == true) {
  alert('Angehakt!');
} else {
  alert('Nicht angehakt!');
}
 
Was soll sich da auch tun?
OK hab das .checked hintendran vergessen
Dann hätte er true oder false ausgegeben.

Es geht aber leider nicht wie du es geschrieben hast.
Bist du dir mit dem
document.formxy['checkboxxy[]'][0]
in der schreibweise sicher?

Kannst du mir das mal kurz versuchen zu erklären was das machen soll? weil die eckigen Klammern ja beim formular sind.

Ich habe ja z.B. jetzt checkboxxy[0] und checkboxxy[1]
wieso geht da document.formxy.checkboxxy[0] nicht

oder meinetwegen wenn die checkbox sich schon selbst indiziert
document.formxy.checkboxxy[0][0]


Danke schon mal für die Hilfe.
 
Zuletzt bearbeitet:
Hi,

für JS ist ist checkboxxy[] ein String, der einen Namen repräsentiert. Dieser String enthält jedoch Zeichen, die eckigen Klammern, die in Bezeichnern innerhalb der Punktnotation nicht vorkommen dürfen.

Es existiert jedoch die elements-Kollektion im form-Objekt. Hierüber sollten die Checkboxen anzusprechen sein.
Code:
var arrCB = document.formularname.elements['checkboxxy[]'];
Das Codefragment liefert dir ein Array zurück, dass alle Formularelement mit dem Name checkboxxy[] enthält. Dieses kannst du durchlaufen und prüfen.

Alternativ existiert die Methode getElementsByName. Hierüber ist es ebenfalls möglich ein Array mit allen Elementen innerhalb eines Formulars zu erstellen, die den gleichen Name besitzen.
Code:
var arrCB = document.formularname.getElementsByName('checkboxxy[]');

Ciao
Quaese
 
Danke das war schon mal wunderbar erklärt.
Es geht aber leider immer noch nicht. Irgendwo habe ich wohl noch einen Fehler drin.

Hier mal der ganze Code in verkürzter Form.
Ein paar Sachen machen vllt in dieser Kurzform keinen Sinn im Ganzen aber schon.
(JS Funktion wird auf jeden Fall angesprochen)


PHP:
<form action='<?echo"$PHP_SELF";?>' method='post' name='gt_popup_NEUER_EINTRAG'>

<?
$count=0;
//DB Abfrage
while ...
{
echo"<input type='checkbox' name='gt_add_checkbox[$count]' value='ausgewaehlt'>";
$count++;
}
?>


<input type='submit' name='gt_Eintrag_submit' value='selektierte Teile in Report einfügen' onclick="return gt_popup_pruefen()">
</form>



Code:
function gt_popup_pruefen()
{ 	
	
	//Checkbox Array
	var arrCB = document.gt_popup_NEUER_EINTRAG.elements['gt_add_checkbox[]'];

	ausgewaehlt='0';
	for (i = 0; i < arrCB.length; i++)
	{		
		if(arrCB[i].checked == true){
			//alert('Es wurde min eine Teil gewählt');
			ausgewaehlt='1';
		}
	}	
	if(ausgewaehlt=='0'){
		alert("Sie haben kein Teil selektiert");
		return false;
	}
	
}


Danke für die Hilfe
 
HTML:
name='gt_add_checkbox[$count]'
Du darfst hier im Namen nicht $count einfügen.
Wenn du es weglässt, sollte es funktionieren.

Also einfach so:
HTML:
name='gt_add_checkbox[]'
 
Zuletzt bearbeitet:
Hi,

das kann auch nicht funktionieren, weil du mit
Code:
echo"<input type='checkbox' name='gt_add_checkbox[$count]' value='ausgewaehlt'>";
Checkboxen mit unterschiedlichen Namen generierst (gt_add_checkbox[0], gt_add_checkbox[1], gt_add_checkbox[2] ...).

Da die Namen jedoch durchnummeriert sind, könntest du die Anzahl der Boxen an die Funktion übergeben. Dort werden in einer Schleife die Namen zusammengesetzt und das zugehörige Element geprüft.

Ciao
Quaese
 
Hmm...
das weiss ich schon das man das so machen sollte.
Aber wie war das dann nochmal wenn ich [ ] verwende,
werden dann alle checkboxen indiziert oder nur die, die selektiert wurden.

Das Problem ist nämlich das ich noch viele andere Felder
<input type='text' name='text[$count]>
habe und der index immer zueinander passen muss.

Wenn [ ] alle angezeigten checkboxen indiziert geht es, sonst muss ich mir noch was einfallen lassen.
 

Neue Beiträge

Zurück