eigen stijl checkboxes
Auteur: Thomas - 05 november 2004 - 21:34 - Gekeurd door: Dennisvb - Hits: 8416 - 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).
|
Code: |
Javascript functie:
<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>
<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>
Standaard stuk HTML wat je voor elke checkbox nodig hebt:
<img src="on.gif" name="tick1" height="13" width="13" border="0" alt="" onClick="toggle(0, 'tick1', '1aan', '1uit');" />
<input type="hidden" name="tick1" value="" />
<img src="on.gif" name="tick1" height="13" width="13" border="0" alt="" onClick="toggle(0, 'tick1', '1aan', '1uit');" /> <input type="hidden" name="tick1" value="" />
Controle script (zie ook het voorbeeld bij dit script (button onderaan)):
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>checkbox test suite</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<style type="text/css">
<!--
body {background-color: #000000;}
//-->
</style>
<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;
}
}
// check functie
function check(form) {
var checkboxes = "";
for(var i=0; i < form.elements.length; i++) {
// de naam van het huidige formulier-element
var naam = form.elements[i].name;
// hebben we met een tick-box te maken ?
if(form.elements[i].type == "hidden" && naam.substring(0,4) == "tick") {
checkboxes += "checkbox "+(i+1)+": "+form.elements[i].value+"\n";
}
}
window.alert(checkboxes);
return false;
}
//-->
</script>
</head>
<body>
<form name="blaat" onSubmit="return check(this);" action="" method="post">
<img src="on.gif" name="tick1" height="13" width="13" border="0" alt="tick1" onClick="toggle('blaat', 'tick1', 'aan', 'uit');" />
<input type="hidden" name="tick1" value="aan" />
<img src="off.gif" name="tick2" height="13" width="13" border="0" onClick="toggle('blaat', 'tick2', 'aan', 'uit');" />
<input type="hidden" name="tick2" value="uit" />
<img src="on.gif" name="tick3" height="13" width="13" border="0" onClick="toggle('blaat', 'tick3', 'aan', 'uit');" />
<input type="hidden" name="tick3" value="aan" />
<img src="off.gif" name="tick4" height="13" width="13" border="0" onClick="toggle('blaat', 'tick4', 'aan', 'uit');" />
<input type="hidden" name="tick4" value="uit" />
<input type="submit" name="submit" value="submit" />
</form>
</body>
</html>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>checkbox test suite</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <style type="text/css"> <!-- body {background-color: #000000;} //--> </style> <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; } } // check functie function check(form) { var checkboxes = ""; for(var i=0; i < form.elements.length; i++) { // de naam van het huidige formulier-element var naam = form.elements[i].name; // hebben we met een tick-box te maken ? if(form.elements[i].type == "hidden" && naam.substring(0,4) == "tick") { checkboxes += "checkbox "+(i+1)+": "+form.elements[i].value+"\n"; } } window.alert(checkboxes); return false; } //--> </script> </head> <body> <form name="blaat" onSubmit="return check(this);" action="" method="post"> <img src="on.gif" name="tick1" height="13" width="13" border="0" alt="tick1" onClick="toggle('blaat', 'tick1', 'aan', 'uit');" /> <input type="hidden" name="tick1" value="aan" /> <img src="off.gif" name="tick2" height="13" width="13" border="0" onClick="toggle('blaat', 'tick2', 'aan', 'uit');" /> <input type="hidden" name="tick2" value="uit" /> <img src="on.gif" name="tick3" height="13" width="13" border="0" onClick="toggle('blaat', 'tick3', 'aan', 'uit');" /> <input type="hidden" name="tick3" value="aan" /> <img src="off.gif" name="tick4" height="13" width="13" border="0" onClick="toggle('blaat', 'tick4', 'aan', 'uit');" /> <input type="hidden" name="tick4" value="uit" /> <input type="submit" name="submit" value="submit" /> </form> </body> </html>
Download code (.txt)
|
|
|
Stemmen |
Niet ingelogd. |
|