Toon posts:

[js] unchecked checkboxes succesfull maken

Pagina: 1
Acties:

Verwijderd

Topicstarter
ik heb een veldje in een database waarin de rechten van een persoon staan, dit is een getal opgebouwd uit de afzonderlijke bitjes die de rechten voorstellen. Da's mooi, 1 veld in de db, makkelijk uitbreidbaar enzovoorts.

Nu wil ik die rechten natuurlijk beheren en dat wordt gedaan door een rij checkboxes neer te zetten en ze allemaal dezelde naam te geven, namelijk rights[]

in php komt nu die hele bende als array binnen en dan doe ik:
PHP:
1
$rights = bindec(implode('',$_POST['rights']);

helaas gaat dat dus niet door, want unchecked checkboxes worden ook niet verzonden met de post, dus wat doe ik:
JavaScript:
1
2
3
4
5
6
7
8
9
function succeedBooleanCheckboxes(form) {
    inps = form.getElementsByTagName('input');
    for (var i=0; i<inps.length; i++) {
        if (inps[i].className.indexOf("bool") !== -1 && inps[i].type=='checkbox') {
            inps[i].value = inps[i].checked?1:0;
            inps[i].checked = true;
        }
    }
}

even alle checkboxes met de class 'bool' een waarde geven die bij hun status past en vervolgens checken. Werkt allemaal machig prachtig.

Nu is alleen het enige dat als deze functie onsubmit aangesproken wordt ineens alle checkboxes gechecked worden waardoor de gebruiker het idee krijgt van "wat ik hier zag ging even helemaal niet goed", gaat prutsen, etc etc. Dat wil ik dus voorkomen.

Zijn hier goeie ideeen over?

- een extra hidden veld aanmaken die de checkboxes in de gaten houdt en in hun plaats de data vasthoudt kan, maar vind ik niet ideaal
- de checkbox onsubmit zelf omzetten naar een hidden veld kan ook, maar dan verdwijnen de checkboxes, reflowt de content en krijg ik nog een idee van "wat gebeurde daar?"
- de checkboxes via style hidden maken is al wat beter, dan reflowt de content ook niet, maar "verdwijnen" ze alsnog

  • frickY
  • Registratie: Juli 2001
  • Laatst online: 17-02 09:21
Wat dacht je van een input type=hidden waar je al je bitjes achter elkaar zet?
JavaScript:
1
2
3
4
5
6
7
8
9
function succeedBooleanCheckboxes(form) { 
    inps = form.getElementsByTagName('input'); 
    var hiddenbox = form.getElementById("hiddenbox");
    for (var i=0; i<inps.length; i++) { 
        if (inps[i].className.indexOf("bool") !== -1 && inps[i].type=='checkbox') { 
            hiddenbox.value += inps[i].checked?1:0; 
        } 
    } 
}


//Edit
Doh.. had je zelf al genoemt. Is inderdaad niet ideaal, maar voorkomt wel je probleem met prutsende gebruikers

[ Voor 18% gewijzigd door frickY op 30-05-2006 18:04 ]


  • OnTracK
  • Registratie: Oktober 2002
  • Nu online
Misschien het volgende:
JavaScript:
1
inps[i].style.display = 'none'
Dan verdwijnen je checkboxes, maar je pagina verdwijnt toch. En de gebruiker zal geen / minder WTF-moment hebben

Not everybody wins, and certainly not everybody wins all the time.
But once you get into your boat, push off and tie into your shoes.
Then you have indeed won far more than those who have never tried.


  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

Lastig, of je moet met dummy elementen gaan werken (unchecked laten) en zodra je een element zelf aanchecked het element weergeven / invoegen / you name it ;)

Maar de vraag is of jij met dummy elementen wilt werken ;)

Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.


  • chris
  • Registratie: September 2001
  • Laatst online: 11-03-2022
Het is toch geen probleem dat unchecked checkboxes niet worden verzonden met de POST? Ik zou m'n checkboxes gewoon zo noemen: "rights[1]", "rights[2]" etc. Vervolgens in php iets als:
PHP:
1
2
3
4
5
$right = 0;
foreach($_POST["rights"] as $key)
{
  $right = $right + (int) $key;
}

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 15:47

crisp

Devver

Pixelated

of zo:
HTML:
1
2
3
4
<input type="checkbox" name="rights[0]" value="1">
<input type="checkbox" name="rights[1]" value="1">
<input type="checkbox" name="rights[2]" value="1">
<!-- etcetera -->

of mbv de value het onderscheid maken.

Intentionally left blank

Pagina: 1