javascript: checkboxen aktivieren/deaktivieren per link

PHP, Ajax, CSS, HTML, Javascript
Eben für die wirklich Harten, die alles selber machen.
Antworten
Benutzeravatar
bce
Beiträge: 858
Registriert: Do 14.Okt, 2004 18:46
Kontaktdaten:

javascript: checkboxen aktivieren/deaktivieren per link

Beitrag von bce »

hallo.
habe eine seite die ein paar checkboxen enthält.
besser wäre wenn man mit einem klick alle markiert bzw abwählt.
per button funktioniert es.. aber nicht per link :confused:

habe im header:

Code: Alles auswählen

<script type="text/javascript" language="javascript1.2">
<!--
function checkAll(elm) {
  for (var i = 0; i < elm.form.elements.length; i++) {
    if (elm.form.elements[i].type == "checkbox") {
      elm.form.elements[i].checked = true;
    }
  }
}
function uncheckAll(elm) {
  for (var i = 0; i < elm.form.elements.length; i++) {
    if (elm.form.elements[i].type == "checkbox") {
      elm.form.elements[i].checked = false;
    }
  }
}
// -->
</script>
die funktionen werden im formular mittels

Code: Alles auswählen

		<input type=button value="Alles auswählen" onClick="checkAll(this)"\>
      	<input type=button value="Auswahl aufheben" onClick="uncheckAll(this)"\>
erfolgreich aufgerufen...
so funktioniert die sache...

möchte aber anstatt den buttons lieber links...
so funktioniert es nicht:

Code: Alles auswählen

		<a href="javascript:checkAll(this);">Alles auswählen</a> ::
		<a href="javascript:uncheckAll(this);">Auswahl aufheben</a>
was hab ich über sehen??

thx
Benutzeravatar
oxpus
Administrator
Beiträge: 28735
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Links gehören nicht zum Formular, sind also kein Child davon und daher kann das Javascript über "this" das Formular nicht finden.
Da wäre es nach der Methode geeigneter, die bei den Privaten Nachrichten angewandt wird. Da übergibt der Link einer einzigen Funktion den Wert, welchen die Checkboxen haben sollen und führt das auf ein bestimmtes Formular aus. Hier das Javascript, daß Du in die betreffende TPL an den Anfang einfügen musst:

Code: Alles auswählen

<script language="Javascript" type="text/javascript">
function select_switch(status)
{
	for (i = 0; i < document.formname.length; i++)
	{
		document.formname.elements[i].checked = status;
	}
}
</script>
wobei "formnane" der Name des betreffenden Formulars wäre.
So sähen die beiden Links aus:

Code: Alles auswählen

<a href="javascript:select_switch(true);">Alle auswählen</a>
<a href="javascript:select_switch(false);">Auswahl aufheben</a>
Du siehst hier, daß diese sich nur im Namen und des Parameters unterscheiden.
Dieser Parameter sagt eben "checked" oder nicht und das auf alle Elemente des mit "formname" angegebenen Formulars. Okay, das könnte man zur Not als 2. Parameter auch übergeben...
Die JS-Funktion setzt also "checked" für alle im Formular befindlichen Objekte, sofern möglich. Wenn Du nach den gewünschten Checkboxen noch weitere hast, die nicht damit gesetzt oder aufgehoben werden sollen, dann ändere in der JS-Funktion die Zeile

Code: Alles auswählen

for (i = 0; i < document.formname.length; i++)
in diese ab:

Code: Alles auswählen

for (i = 0; i < document.formname.length - X; i++)
"X" ist hierbei die Anzahl an Elementen, die nicht "checked" sein dürfen. Also einfach durchzählen. Achtung: Dabei zählen auch Button und andere Elemente mit! Ggf. einfach ausprobieren, was die korrekte Zahl ist. Ich kann mir das auch nie merken...
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Benutzeravatar
bce
Beiträge: 858
Registriert: Do 14.Okt, 2004 18:46
Kontaktdaten:

Beitrag von bce »

danke für die gute erklärung! funktioniert nun prima.

hab da noch was zum spielen gefunden... es werden die jeweiligen zustände einfach getauscht.. werds ma versuchen einzu bauen.

Code: Alles auswählen

function switchAll(elm) {
  for (var i = 0; i < elm.form.elements.length; i++) {
    if (elm.form.elements[i].type == "checkbox") {
      elm.form.elements[i].checked = !elm.form.elements[i].checked;
    }
  }
}
Antworten