Auteur: Thomas - 05 november 2004 - 21:34 - Gekeurd door: Dennisvb - Hits: 8466 - Aantal punten: 4.13 (19 stemmen)
eigen stijl checkboxes
Dit script stelt je in staat, om met behulp van zelfgemaakte plaatjes, een JavaScript-functie en een standaard stuk HTML je eigen stijl checkboxes te maken. Met dit script kun je zoveel checkboxes (en check-stijlen) gebruiken als je maar wilt.
* benodigdheden
- plaatjes
Plaatjes voor je checkboxes zul je zelf moeten maken. Je hebt er minimaal twee nodig:
eentje voor het geval dat de checkbox niet is aangevinkt, en eentje voor het geval dat deze wel is aangevinkt. In dit voorbeeld gebruiken we de volgende twee plaatjes, on.gif (13x13 pixels) voor een aangevinkte checkbox, en off.gif (13x13 pixels) voor een niet aangevinkte checkbox.
- JavaScript
Je hebt het volgende stuk JavaScript nodig (zie het code deel).
Dit script spreekt redelijk voor zich. We gebruiken hier één checkbox-plaatjes paar, maar je kan er natuurlijk altijd meerdere gebruiken.
- HTML
Wat je in HTML doet is het volgende: Voor elke checkbox die je wilt maken heb je altijd de volgende twee dingen nodig: een plaatje (voor de checkbox) en een hidden input veld (voor de waarde van de checkbox). Dit plaatje en het hidden input veld hebben ALTIJD dezelfde name (hoe vreemd dat ook klinkt).
Ik geef een voorbeeld. Stel je wilt een checkbox, die als die aangevinkt is, de waarde "aan" heeft, en anders geen waarde heeft. De checkbox is standaard niet aangevinkt.
Je typt dan het volgende in voor deze checkbox (zie het HTML voorbeeld in het code deel).
Attributen van img:
src="on.gif"
De source van het plaatje van de aangevinkte checkbox moet gelijk zijn aan aan.src uit de JavaScript.
Dit veld is dus niet vrij te kiezen.
name="tick1"
De name is vrij te kiezen, zolang je er maar voor zorgt dat de name van het hidden input veld hetzelfde is.
height="13" width="13" border="0" alt=""
De hoogte en breedte hangen af van de afmetingen van het checkbox plaatje - deze kunnen dus variëren naar gelang de plaatjes die je gebruikt.
onClick="toggle(0, 'tick1', 'aan', '');"
De eerste parameter van de toggle functie is de naam (of het nummer) van de form. Als je maar één form gebruikt, kun je hier een 0 invullen. Als je meerdere forms gebruikt moet je kijken met welk form je te maken hebt. Als je je form een naam hebt gegeven, kun je voor de eerste parameter deze naam (tussen enkele quotes, het is immers een string) invullen.
De tweede parameter bevat de naam van zowel het plaatje als het hidden invoer veld.
De derde parameter bevat de value die het hidden invoerveld zou moeten hebben wanneer de checkbox is aangevinkt ("aan").
De vierde parameter bevat de value die het hidden invoerveld zou moeten heben wanneer de checkbox niet is aangevinkt ("").
Attributen van input:
type="hidden"
Dit veld moet hidden blijven.
name="tick1"
Dit is de naam van het hidden veld. Vrij te kiezen mits deze gelijk is aan de naam van het plaatje wat bij dit input veld hoort.
value=""
Dit is de default waarde van de checkbox. Omdat we er voor gekozen hebben dat de checkbox standaard NIET aangevinkt is, en de value van de checkbox de lege string ("") is wanneer deze niet is aangevinkt, is de value van het hidden input veld dus ook leeg (de lege string "").
* verschil tussen type="checkbox" en type="hidden"
Iets wat je je goed moet realiseren op het moment dat je je naar deze 'custom tickboxes' overstapt is het volgende:
Normaal is het zo, dat als je gewone checkboxes gebruikt (<input type="checkbox" name="tick" value="1" />) en deze niet aanvinkt, ze in het geheel NIET worden verstuurd als formulier-variabele. Wanneer je dus PHP gebruikt om het formulier te verwerken, zal $_POST['tick'] dus NIET bestaan als je hem niet aanvinkt.
Dan zou dus een controle op het geset zijn van deze $_POST variabele genoeg zijn (if(isset($_POST['tick'])) { ... }).
Omdat het hier een HIDDEN veld betreft (deze worden ALTIJD gepost), is deze controle op het wel of niet bestaan van deze $_POST variabele NIET genoeg!
Wanneer je dit script gebruikt zul je dus expliciet moeten controleren op de waarde van het hidden input veld (if(isset($_POST['tick']) && $_POST['tick'] == "somevalue") { ... }).
Als de waarde van de checkbox ongelijk is aan "0" en "" zou je ook op de volgende manier kunnen controleren of de checkbox is aangevinkt:
if(!empty($_POST['tick'])) { ... }
* controle script
Hieronder staat nog een voorbeeldje hoe je snel van meerdere checkboxes de waarde kan controleren. Hierbij zijn de checkboxes standaard afwisselend wel en niet aangevinkt (zie het controle script in het code-deel).
<script language="JavaScript" type="text/javascript">
<!--
// preload images
aan = new Image();
aan.src = "on.gif";
uit = new Image();
uit.src = "off.gif";
// frm: het formulier
// fld: de veldnaam
// valon: de waarde die het hidden veld dient aan te nemen als de 'checkbox' is aangevinkt
// valoff: de waarde die het hidden veld dient aan te nemen als de 'checkbox' niet is aangevinkt
function toggle(frm, fld, valon, valoff) {
// was de checkbox aangevinkt ?
if(document.images[fld].src == aan.src) {
// zoja, verwijder de vink, en geef het hidden veld de 'off'-waarde
document.images[fld].src = uit.src;
document.forms[frm].elements[fld].value = valoff;
} else {
// zonee, plaats een vink, en geef het hidden veld de 'on'-waarde
document.images[fld].src = aan.src;
document.forms[frm].elements[fld].value = valon;
}
}
//-->
</script>