Toon posts:

[js] checkboxen controleren

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hoi,
Ik ben bezig met een koop formulier. Men kan maximaal 3 dingen kopen bijv. (kan ook meer zijn ligt eraan hoe die ingesteld is), maar als iemand al een andere keer 1 gekocht heeft mag die dus die keer dat ie op de koop pagina komt 2 kopen. Nu wil ik met een javascript gelijk controleren of ze al aan hun limiet zitten.

Nu heb ik het volgende:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function countChoices(o,f,x,limiet){
  var max = x; 
  var el = f.elements, j = 0;
   for(var i=0; i<el.length; i++){
     if(el[i].checked){
        j++;
     } else {
        j--;
     }
  }
   if(j == max){
      alert("Sorry maar je mag nog maar "+max+" spelers kopen van de "+limiet+"!");
      o.checked = false;
      return false;
   }
}


Ik roep het script op de volgende manier:
code:
1
onclick="countChoices(this,this.form,<?=$max?>,<?=$max_aankopen?>)"
Dit staat in de checkbox velden.

Inhoud van de vars:
x = wat die persoon op dat moment maximaal nog mag kopen
limiet = wat men totaal mag kopen zonder eraf getrokken wat men al gekocht heeft.

Dit werkt deels goed. Hij geef op een gegeven moment wel een error enz. maar soms niet op het juiste moment. Wat het script nu fout doet is het volgende:
- Ik kan nog bijv. 3 spelers kopen. Dan vink ik er 3 aan maar dan krijg ik bij de derde al de error. Wat dus niet juist is, want hij zou een error moeten geven bij het aanvinken van de vierde.
- Ik kan er nu bijv. nog 2 kopen kan ik zoveel aanvinken als ik wil. Niks van een error ofzo heel vreemd.
- Als ik nog maar 1 speler kan kopen werkt ie wel goed.
- En als ik geen speler meer kan kopen geeft ie ook geen error.

Iemand die ma kan helpen met de oplossing voor bovenstaand script?

Als de gegeven info niet voldoende is hoor ik het graag.

  • bRight
  • Registratie: Juli 2000
  • Laatst online: 27-11-2024

bRight

digitaal

JavaScript:
1
if (j > max) {


zo? :)

Verwijderd

Topicstarter
Blijft helaas hetzelfde probleem geven. Het is technische toch wel mogelijk zoiets?

  • bRight
  • Registratie: Juli 2000
  • Laatst online: 27-11-2024

bRight

digitaal

Als je deze oplossing wilt gebruiken mogen er geen andere checkboxes in je form zitten die niks met je controle te maken hebben..

[ Voor 39% gewijzigd door bRight op 30-11-2004 15:05 ]


Verwijderd

Topicstarter
Die zitten er ook niet.

Het is een formulier met allemaal spelers uit de database.
Dus kunnen 10 checkboxen zijn maar een andere keer weer 20. Voorderest zit er enkel een submit knop in.

code:
1
2
<input name="spelers[<?=$list['id']?>]" type="checkbox" value="<?=$list['id']?>" 
onclick="countChoices(this,this.form,<?=$max?>,<?=$max_aankopen?>)">

[ Voor 48% gewijzigd door Verwijderd op 30-11-2004 15:08 ]


  • bRight
  • Registratie: Juli 2000
  • Laatst online: 27-11-2024

bRight

digitaal

geef ff een stuk html.. kan die x waarde ook groter dan 1 zijn?
in dat geval klopt je j-waarde idd niet..

Verwijderd

Topicstarter
Ja die x kan telkens anders zijn. Ligt eraan hoeveel spelers die persoon al heeft gekocht.

Dus als ik er bijv al 2 gekocht heb. En me laatste speler nog wil kopen moet die een error geven wanneer ik de twee checkboxen aanvink.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
        <form action="" method="post">
        Je hebt al <?=$gekocht?> spelers in je bezit en je mag er maximaal <?=$max_aankopen?> kopen!
        <table width="500" border="1" cellspacing="0" cellpadding="0">
          <tr>
            <td width="300">Speler</td>
            <td width="125">Waarde</td>
            <td width="75">&nbsp;</td>
          </tr>
        <?php
        while($list = $db->fetch($query_s)) {
        ?>  
          <tr>
            <td><?=$list['naam']?></td>
            <td><?=$list['waarde']?></td>
            <td><input name="spelers[<?=$list['id']?>]" type="checkbox" value="<?=$list['id']?>" 
onclick="countChoices(this,this.form,<?=$max?>,<?=$max_aankopen?>)"></td>
          </tr>
        <?php
        }
        ?>
          <tr>
            <td>&nbsp;</td>
            <td>&nbsp;</td>
            <td><input name="koop" type="submit" value="Kopen"></td>
          </tr> 
        </table>
        </form>


Is het stuk van mijn html.

[ Voor 60% gewijzigd door Verwijderd op 30-11-2004 15:15 ]


  • 1st_Ro
  • Registratie: December 2002
  • Laatst online: 07-01-2022
code:
1
2
3
4
5
     if(el[i].checked){
        j++;
     } else {
        j--;
     }


Klein detail, maar waarom doe je j-- ?

Tenminste, ik neem aan dat j de variabele is die je incrementeert als je een checkbox hebt die aangevinkt is.

Verwijderd

Topicstarter
Ja dat klopt. Is daar iets mis mee?

  • 1st_Ro
  • Registratie: December 2002
  • Laatst online: 07-01-2022
Nou ja, hij loopt die checkboxen natuurlijk in volgorde af.

Stel ik vink de 1e en de 3e aan, dan gebeurt er dus:

- 1e element gevinkt > j = 1
- 2e element niet gevinkt > j = 1 - 1 = 0 (dat komt door die else statement)
- 3e element gevinkt > j = 0 +1 = 1

Terwijl j dan toch echt op 2 moet staan. :)

Verwijderd

Topicstarter
Aha daar zit idd wat in ja. Hmmz. Hoe zou ik dat probleem kunnen oplossen. Ben niet echt into het javascript wereldje.

Dat geeft dus ook gelijk het probleem weer waarom die enkel een error geeft bij 1 aangevinkt.

Ik ben nu zover dat ie nu wel een juiste error geeft als ik er nog 3 kan kopen!
Als ik nog 2 spelers mag kopen geeft ie pas een error als ik er 4 aanvink.
En als ik nog maar 1 speler mag kopen geeft ie een error als ik er 3 aanvink.

Ik gebruik nu het volgende:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function countChoices(o,f,x,limiet){
  var max = x; 
  var el = f.elements, j = 0;
   for(var i=0; i<el.length; i++){
     if(el[i].checked){
        j++;
     } else {
        j--;
     }
  }
   if(j >= max){
      alert("Je kan niet meer dan "+x+" spelers nog kopen. Je kan er maximaal "+limiet+" kopen!");
      o.checked = false;
      return false;
   }
}

[ Voor 91% gewijzigd door Verwijderd op 30-11-2004 19:12 ]


Verwijderd

Topicstarter
1st_Ro schreef op dinsdag 30 november 2004 @ 15:27:
Nou ja, hij loopt die checkboxen natuurlijk in volgorde af.

Stel ik vink de 1e en de 3e aan, dan gebeurt er dus:

- 1e element gevinkt > j = 1
- 2e element niet gevinkt > j = 1 - 1 = 0 (dat komt door die else statement)
- 3e element gevinkt > j = 0 +1 = 1

Terwijl j dan toch echt op 2 moet staan. :)
Het klopt volgens mij wel
Vink er 1 aan staat ie op 1.
Vink er nog 1 aan en hij staat op 2. vink hem uit en hij staat weer op 1.
Vink de derde aan en hij staat weer op 2.

Dank klopt het toch gewoon?
Pagina: 1