css class veranderen met checkbox

Status
Niet open voor verdere reacties.

Bertus Bolknak

Gebruiker
Lid geworden
14 nov 2009
Berichten
51
Hallo, ik wil middels een checkbox een css class veranderen van een bepaald element dat ergens anders op de pagina staat.
Ik heb onderstaande functie al ergens op internet gevonden. Dit werkt zo ver. Maarrrrr: zou iemand deze functie "even" kunnen aanpassen, zodat het een toggle wordt zeg maar. Dus als ik het checkboxje aanvink dan verandert de css class (dit werkt dus al) en als ik het vinkje dan weer uitzet dan komt de class weer terug hoe deze was.

Dit had ik al gevonden op internet:
function change_class(id,cl)
{
if (document.getElementById(id)) {
document.getElementById(id).className = cl;
}
}

De aanroep van de functie zit in deze <td> tag:
<td><input type="checkbox" value="100,00" onclick="change_class('H93631_Vlaggetje','detailPrijzenSelected');" /></td>

En dit is de <td> tag die ik steeds van class wil veranderen (togglen) met de checkbox (checkbox aan: class is detailPrijzenSelected en checkbox uit: class is detailPrijzen:
<td class="detailPrijzen" id="H93631_Vlaggetje">100,00</td>

Hopelijk kan iemand dit even maken, want ik zit er al veel te lang op te tobben.

Groeten, Bert.
 
Ik zou het zo doen (in de functie controleren of de checkbox aangevinkt is of niet)
[js]function change_class(id,cl_aan,cl_uit)
{
if (document.getElementById(id)) {
if (document.getElementById('vinkje').checked == true) {
document.getElementById(id).className = cl_aan;
}
else {
document.getElementById(id).className = cl_uit;
}
}
}[/js]
De aanroep wordt dan
HTML:
<td><input type="checkbox" id="vinkje" value="100,00" onclick="change_class('H93631_Vlaggetje','detailPrijzenSelected','detailPrijzen');" /></td>



Je kan het overigens ook zo doen (aan de functie meegeven of de checkbox is aangevinkt):
[js]function change_class(id,cl_aan,cl_uit,aan)
{
if (document.getElementById(id)) {
if (aan) {
document.getElementById(id).className = cl_aan;
}
else {
document.getElementById(id).className = cl_uit;
}
}
}[/js]
met als aanroep
HTML:
<td><input type="checkbox" value="100,00" onclick="change_class('H93631_Vlaggetje','detailPrijzenSelected','detailPrijzen',this.checked);" /></td>
 
Laatst bewerkt:
Bedankt voor de prima hulp + nieuwe vraag over opbouw tabel

Hallo Supersnail, heel erg bedankt voor je hulp. Het werkt fantastisch! Als ik die code zo zie, dan denk ik, hmmm dat ik dat zelf niet kon uitvinden, maar ja, na een paar uur tobben heb je effe geen zin meer he. Dan is externe hulp een verademing.

Affijn, de webpagina waar ik mee bezig ben werkt tot nu toe zoals ik hoopte.
Mag ik nog eens een vraag stellen?
Ik heb op mijn pagina een tabel staan van 32 rows. Deze heb ik geheel getypt in html. Maar die rows lijken zo verschrikkelijk veel op elkaar dat ik me afvraag of ik ze niet via een repeat loop op de pagina kan krijgen (bijvoorbeeld via php). Hieronder plak ik even de tabel. Ik heb er voor de duidelijkheid even 29 rows uitgegooid. Onder de tabel type ik even verder . . .

<table width="500" cellpadding="4" cellspacing="1" bgcolor="#666666">
<tr>
<td width="20" class="detailOpties"><input type="checkbox" id="vinkje_H52000_Buddybike_achter" value="<?php echo $H52000_Buddybike_achter["Prijs"];?>" onclick="update('H52000_Buddybike_achter','detailPrijzenSelected','detailPrijzen');" /></td>
<td class="detailOpties"><?php echo $H52000_Buddybike_achter["Naam"];?></td>
<td width="30" class="detailCamera">&nbsp;</td>
<td width="80" class="detailOpties"><?php echo $Artikelnr.$H52000_Buddybike_achter["Artikelnummer"];?></td>
<td width="90" class="detailPrijzen" id="H52000_Buddybike_achter"><?php echo "€ ".number_format ($H52000_Buddybike_achter["Prijs"], 2, ',', '.');?></td>
</tr>
<tr>
<td class="detailOpties"><input type="checkbox" id="vinkje_H52001_Buddybike_voor" value="<?php echo $H52001_Buddybike_voor["Prijs"];?>" onclick="update('H52001_Buddybike_voor','detailPrijzenSelected','detailPrijzen');" /></td>
<td class="detailOpties"><?php echo $H52001_Buddybike_voor["Naam"];?></td>
<td class="detailCamera">&nbsp;</td>
<td class="detailOpties"><?php echo $Artikelnr.$H52001_Buddybike_voor["Artikelnummer"];?></td>
<td class="detailPrijzen" id="H52001_Buddybike_voor"><?php echo "€ ".number_format ($H52001_Buddybike_voor["Prijs"], 2, ',', '.');?></td>
</tr>
<tr>
<td class="detailOpties"><input type="checkbox" id="vinkje_H55551_Frame_op_maat" value="<?php echo $H55551_Frame_op_maat["Prijs"];?>" onclick="update('H55551_Frame_op_maat','detailPrijzenSelected','detailPrijzen');" /></td>
<td class="detailOpties"><?php echo $H55551_Frame_op_maat["Naam"];?></td>
<td class="detailCamera">&nbsp;</td>
<td class="detailOpties"><?php echo $Artikelnr.$H55551_Frame_op_maat["Artikelnummer"];?></td>
<td class="detailPrijzen" id="H55551_Frame_op_maat"><?php echo "€ ".number_format ($H55551_Frame_op_maat["Prijs"], 2, ',', '.');?></td>
</tr>
<tr>
<td colspan="4" class="detailOpties"><div align="right"><b>Totaalprijs van uw Buddybike: &nbsp;</b> </div></td>
<td class="detailTotaalprijs" id="total">€ 0,00</td>
</tr>
</table>

Elke row leest steeds 3 waardes in van php variabelen die elders op de pagina reeds gedefinieerd zijn. En elke checkbox heeft weer een andere id anders werkt die fantastische javascript functie (waar je me mee geholpen hebt, en die ik in dit voorbeeld "update" genoemd heb in plaats van "change_class") niet goed.
Kan deze tabel met een php loop opgebouwd worden? Of kan dat niet omdat er bijvoorbeeld ook al javascript doorheen verweven zit? Als het niet kan of niet "advisable" is, vind ik het ook prima, maar dan heeft iemand met veel verstand van de materie dit in ieder geval even bevestigd en dan weet ik dat ik goed bezig ben.

Groeten, en bij voorbaat dank voor eventuele antwoord(en).
Bert.

O ja en zo ziet de update functie eruit (voor de zekerheid, want ik denk dat deze info niet persé noodzakelijk is voor bovenstaande vraag):

function update(id,cl_aan,cl_uit) {
var total = 0; // teller resetten
for (var i = 0; i < input.length; i++) {
total += input.checked ? parseFloat(input.getAttribute("value")) : 0; // waarden van aangevinkte checkboxen optellen
}
document.getElementById("total_hidden").value = total.toFixed(2); // verborgen, ongeformatteerde waarde voor verzending formulier

total = "€ " + total.toFixed(2).replace(".", ","); // voor gebruiker netjes met komma weergeven
var sRegExp = new RegExp("(-?[0-9]+)([0-9]{3})"); // en met duizend-separator
while(sRegExp.test(total)) {
total = total.replace(sRegExp, "$1" + "." + "$2");
}

document.getElementById("total").innerHTML = total; // berekende waarde tonen

//class van het prijsveldje veranderen, waardoor de prijs geel wordt:

if (document.getElementById(id)) {
if (document.getElementById('vinkje_' + id).checked == true) {
document.getElementById(id).className = cl_aan;
}
else {
document.getElementById(id).className = cl_uit;
}
}
};
 
De tabel kan prima met PHP worden opgebouwd. Het enige probleem wat je hebt is dat in elke rij de waarden uit een andere PHP variabele komen. Al kan je de inhoud van die variabelen van tevoren in een array zetten.
PHP:
$artikelen = array($H52000_Buddybike_achter, $H52000_Buddybike_voor, ...);
Ook moet je de id die je in de Javascript gebruikt (zoals H52000_Buddybike_achter) uit de variabele moeten kunnen opvragen. Dan zou je het zo kunnen doen, waarbij $artikelen de grote array is (zie boven) en $artikel['ID'] de id bevat.

HTML:
<table width="500" cellpadding="4" cellspacing="1" bgcolor="#666666">
<?php
foreach($artikelen as $artikel)
{
  echo "<tr>\n
  <td class=\"detailOpties\"><input type=\"checkbox\" value=\"".$artikel['Prijs']."\" onclick=\"update('".$artikel['ID']."','detailPrijzenSelected','detailPrijzen');\" /></td>\n
  <td class=\"detailOpties\">".$artikel['Naam']."</td>\n
  <td class=\"detailCamera\">&nbsp;</td>\n
  <td class=\"detailOpties\">".$Artikelnr.$artikel['Artikelnummer']."</t
d>\n
  <td class=\"detailPrijzen\" id=\"H52001_Buddybike_voor\">? ".number_fo
rmat ($artikel['Prijs'], 2, ',', '.')."</td>\n
  </tr>\n";
}?>
</table>

Overigens wil ik je aanraden om de tweede methode van mijn eerste post te gebruiken (het doorgeven van de waarde van de checkbox aan de functie). In dat geval mag je namelijk de id van de checkbox weglaten (zoals ik hierboven heb gedaan). Dat was ik nog vergeten weg te halen in mijn eerste post bij de aanroep.
 
Laatst bewerkt:
Probleem gevonden: ik had het argument this.checked tussen flippertjes gezet, dus 'this.checked' Amateurtje he.

Hallo Supersnail, klopt die tweede methode wel, want als ik het vinkje weer uitklik verandert de css class niet terug naar de oorspronkelijke class. Die eerste methode deed het wel goed. Ik zet m'n computer even weg en kijk straks nog wel eens of ik iets fout doe.

Tjonge zeg, bedankt. Hier ge ik even mee aan de gang (nu helaas effe geen tijd). Als ik het aan de gang heb dan meld ik me weer, ongetwijfeld met mijn volgende vraag, want dalijk is het nog de bedoeling om de tabel in een form tag te zetten met een verzend knop erbij en dat de tabel dan netjes via een e-mailtje bij iemand afgeleverd wordt. En dan als het effe kan alleen de rows die aangevinkt zijn. Voor deze mailfunctionaliteit heb ik al een soort van kant en klaar php script aangeschaft (kmita mail). Zien of ik daar iets mee kan. Maar dat zal nog niet makkelijk worden.

In ieder geval al heel erg bedankt zover, Supersnail.

Groeten Bert.
 
Laatst bewerkt:
Sommige rows van een tabel verzenden naar een email

Hallo Supersnail, ik ben er dankzij je hulp helemaal uitgekomen met die tabel opbouwen via een loop. Helemaal geweldig.
Maar nu wil ik eigenlijk nog het volgende:
De tabel moet met een send knop verstuurd kunnen worden naar een (vast) email adres en een kopie naar degene die verstuurt (ik maak er nog wat velden bij waar de besteller zijn NAW-gegevens en zijn emailadres moet invullen natuurlijk). Hier kom ik zelf wel uit.
Maar dan het moeilijkste voor mij: het script moet alleen de rows meenemen naar het emailbericht als die aangevinkt zijn. En ook de laatste row met het totaalbedrag natuurlijk. En als iemand op de verzend knop klikt dan moet er eigenlijk nog even zo'n javascript alert venstertje komen, met Weet u zeker dat u wilt verzenden met een OK en Annuleeer knop. En dan natuurlijk een redirect link naar een succes en error page. Uit dit alles kom ik zelf op dit moment niet uit. Ja misschien na weken proberen en doen met veel stress en koppijn.
Ik kan me voorstellen dat iemand denkt: ja daag, bekijk het eens, die Bertus vraagt wel erg veel, maar ik kan me ook voorstellen dat een prof mij met een blokje voorbeeld code effe lekker op weg kan helpen. Ik hoop natuurlijk op het laatste. Ik heb absoluut geen ervaring met php, maar ik kan wel e.e.a. begrijpen/aanpassen als ik een voorbeeld van een ander zie. Onderstaand nog even de laatste versie van de tabel die verstuurd moet worden:

<form id="form1" name="form1" method="post" action="">
<table width="500" cellpadding="4" cellspacing="1" bgcolor="#666666">
<tr>
<td colspan="5" class="detailOptiesKopje"><b><?php echo $Prijsregeltje;?></b></td>
</tr>
<?php
$counter = 0;

foreach($Buddybike as $artikel)
{
$counter = $counter + 1;
echo "<tr>\n
<td width=\"20\" class=\"detailOpties\"><input type=\"checkbox\" id=\"vinkje\" value=\"".$artikel['Prijs']."\" onclick=\"update('".$artikel['Naam']."','detailPrijzenSelected','detailPrijzen', this.checked);\" /></td>\n <td class=\"detailOpties\">".$artikel['Naam']."<input name=\"naam_".$counter."\" type=\"hidden\" value=\"".$artikel['Naam']."\" />"."</td>\n
<td width=\"30\" class=\"detailCamera\">&nbsp;</td>\n
<td width=\"80\" class=\"detailOpties\">".$Artikelnr.$artikel['Artikelnummer']."<input name=\"artikelnummer_".$counter."\" type=\"hidden\" value=\"".$artikel['Artikelnummer']."\" />"."</td>\n
<td width=\"90\" class=\"detailPrijzen\" id=\"".$artikel['Naam']."\"> "."€ ".number_format ($artikel['Prijs'], 2, ',', '.')."<input name=\"prijs_".$counter."\" type=\"hidden\" value=\"".$artikel['Prijs']."\" />"."</td>\n
</tr>\n";
}?>
<tr>
<td colspan="4" class="detailOpties"><div align="right"><b>
Totaalprijs van uw Buddybike: &nbsp;</b> </div></td>
<td class="detailTotaalprijs" id="total">€ 0,00</td>
</tr>
</table>
<input type="submit" value="Verzenden" />
<input id="total_hidden" name="total_hidden" type="hidden" value="0" />
</form>

Bij voorbaat al super bedankt als iemand wil helpen.

Bertus.



De tabel kan prima met PHP worden opgebouwd. Het enige probleem wat je hebt is dat in elke rij de waarden uit een andere PHP variabele komen. Al kan je de inhoud van die variabelen van tevoren in een array zetten.
PHP:
$artikelen = array($H52000_Buddybike_achter, $H52000_Buddybike_voor, ...);
Ook moet je de id die je in de Javascript gebruikt (zoals H52000_Buddybike_achter) uit de variabele moeten kunnen opvragen. Dan zou je het zo kunnen doen, waarbij $artikelen de grote array is (zie boven) en $artikel['ID'] de id bevat.

HTML:
<table width="500" cellpadding="4" cellspacing="1" bgcolor="#666666">
<?php
foreach($artikelen as $artikel)
{
  echo "<tr>\n
  <td class=\"detailOpties\"><input type=\"checkbox\" value=\"".$artikel['Prijs']."\" onclick=\"update('".$artikel['ID']."','detailPrijzenSelected','detailPrijzen');\" /></td>\n
  <td class=\"detailOpties\">".$artikel['Naam']."</td>\n
  <td class=\"detailCamera\">&nbsp;</td>\n
  <td class=\"detailOpties\">".$Artikelnr.$artikel['Artikelnummer']."</t
d>\n
  <td class=\"detailPrijzen\" id=\"H52001_Buddybike_voor\">? ".number_fo
rmat ($artikel['Prijs'], 2, ',', '.')."</td>\n
  </tr>\n";
}?>
</table>

Overigens wil ik je aanraden om de tweede methode van mijn eerste post te gebruiken (het doorgeven van de waarde van de checkbox aan de functie). In dat geval mag je namelijk de id van de checkbox weglaten (zoals ik hierboven heb gedaan). Dat was ik nog vergeten weg te halen in mijn eerste post bij de aanroep.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan