Avatar billede d.kryger Praktikant
17. januar 2006 - 12:17 Der er 22 kommentarer og
2 løsninger

Alert hvis mere end to checkboxe bliver valgt

Hej eksperter.

Hvordan laver man det sådan at der kommer en Alert-boks frem i det at man vælger mere end to checkboxe?

Eks.:
<input type="checkbox" name="mulighed1" value="ON"> Mulighed 1<br>
<input type="checkbox" name="mulighed2" value="ON"> Mulighed 2<br>
<input type="checkbox" name="mulighed3" value="ON"> Mulighed 3<br>
<br>
<input type="submit" value="Send" name="B1">

Hvis man vælger de to første skal der komme en alert-boks frem når man klikker på nr. 3.

Hvordan gør man det? Gerne med kode eksempel.
Avatar billede johan.o Nybegynder
17. januar 2006 - 14:37 #1
F.eks. :

<input type="checkbox" name="mulighed1" value="ON" onchange="if(this.form.mulighed2.checked && this.form.mulighed3.checked && this.checked) { alert('Tre ialt.'); }"> Mulighed 1<br>
<input type="checkbox" name="mulighed2" value="ON" onchange="if(this.form.mulighed1.checked && this.form.mulighed3.checked && this.checked) { alert('Tre ialt.'); }"> Mulighed 2<br>
<input type="checkbox" name="mulighed3" value="ON" onchange="if(this.form.mulighed1.checked && this.form.mulighed2.checked && this.checked) { alert('Tre ialt.'); }"> Mulighed 3<br>

Så kommer alerten hvis mere end to muligheder er valgt.

Mvh. Johan
Avatar billede roenving Novice
17. januar 2006 - 18:04 #2
-- eller måske simplere:

<script type="text/javascript">var numChecked=0;maxChecked=2;</script>
<input type="checkbox" name="mulighed1" value="ON" onclick="if(numChecked==maxChecked&&this.checked){alert('Hov, kun to !-)');return false;}else{numChecked+=this.checked?1:-1}"> Mulighed 1<br>
<input type="checkbox" name="mulighed2" value="ON" onclick="if(numChecked==maxChecked&&this.checked){alert('Hov, kun to !-)');return false;}else{numChecked+=this.checked?1:-1}"> Mulighed 2<br>
<input type="checkbox" name="mulighed3" value="ON" onclick="if(numChecked==maxChecked&&this.checked){alert('Hov, kun to !-)');return false;}else{numChecked+=this.checked?1:-1}"> Mulighed 3<br>
<br>
<input type="submit" value="Send" name="B1">


-- tjah, det med det simple var der måske ikke, men den blev lidt mere dynamisk !-)
Avatar billede d.kryger Praktikant
18. januar 2006 - 14:19 #3
Jeg har brugt roenving's kode, da jeg har op til 20 forskellige muligheder, så er det lidt nemmere at styre...

Læg et svar og du får point.
Avatar billede roenving Novice
18. januar 2006 - 14:47 #4
Det er vel en deler ...

Velbekomme '-)
Avatar billede d.kryger Praktikant
18. januar 2006 - 14:50 #5
Ja, hvis du synes...
Johan ligger du også et svar?
Avatar billede johan.o Nybegynder
18. januar 2006 - 15:58 #6
Flinke fyre :)

Mvh. Johan
Avatar billede roenving Novice
18. januar 2006 - 16:02 #7
-- og tak for point ;~}
Avatar billede johan.o Nybegynder
18. januar 2006 - 16:03 #8
Ja, takker også :)
Avatar billede d.kryger Praktikant
19. januar 2006 - 15:18 #9
Kan en af Jer hjælpe mig med denne lille fortsættelse?

Der kan maks vælges to 'muligheder' og der skal vælges en 'svarmulighed'. Dvs. at der skal komme en alertboks frem hvis man ikke vælger en 'svarmulighed'.

Kode:
<script type="text/javascript">var numChecked=0;maxChecked=2;</script>
<input type="checkbox" name="mulighed1" value="ON" onclick="if(numChecked==maxChecked&&this.checked){alert('Hov, kun to !-)');return false;}else{numChecked+=this.checked?1:-1}"> Mulighed 1<br>
<input type="checkbox" name="mulighed2" value="ON" onclick="if(numChecked==maxChecked&&this.checked){alert('Hov, kun to !-)');return false;}else{numChecked+=this.checked?1:-1}"> Mulighed 2<br>
<input type="checkbox" name="mulighed3" value="ON" onclick="if(numChecked==maxChecked&&this.checked){alert('Hov, kun to !-)');return false;}else{numChecked+=this.checked?1:-1}"> Mulighed 3<br>
<input type="checkbox" name="mulighed4" value="ON" onclick="if(numChecked==maxChecked&&this.checked){alert('Hov, kun to !-)');return false;}else{numChecked+=this.checked?1:-1}"> Mulighed 4<br>
<br>
<input type="radio" value="svarmulighed1" name="spr">Svarmulighed 1<br>
<input type="radio" value="svarmulighed2" name="spr">Svarmulighed 2<br>
<br>
<input type="submit" value="Send" name="B1">
Avatar billede roenving Novice
19. januar 2006 - 15:36 #10
<form ... onsubmit="if(!this.svarmulighed1.checked&&!this.svarmulighed2.checked){alert('Du skal vælge svarmulighed');return false;}">

-- men den slags ville jeg selv lægge ud i en (validerings-)funktion !-)
Avatar billede d.kryger Praktikant
20. januar 2006 - 08:09 #11
Hvorfor ville du det? Er det bedre eller hva?
Kan du komme med noget kode på denne validerings-funktion?
Avatar billede roenving Novice
20. januar 2006 - 15:28 #12
-- for at have en overskuelig kode, og fordi man så kan ende med at smide det ud i en selvstændig fil !-)

-- hvis det kun skal være ovenstående ville jeg flytte script-tagget op i9 head-sektionen og så skrive:

<script type="text/javascript">
  var numChecked=0,maxChecked=2;
  function valider(f){
    if(!this.svarmulighed1.checked&&!this.svarmulighed2.checked){
      alert('Du skal vælge svarmulighed');
      return false;
    }
    return true;
  }
</script>

-- og så skrive formtagget sådan:

<form ... onsubmit="return valider(this);">

-- så kan du f.eks. også tilføje validering af andre felter/oplysninger !o]
Avatar billede d.kryger Praktikant
23. januar 2006 - 14:27 #13
Hej Roenving.

Jeg har nu sat koden ind, men det virker ikke efter hensigten. Kan du se hvad jeg gør forkert?

Kode:
<html>

<head>
<title>Test</title>
<script type="text/javascript">
  var numChecked=0,maxChecked=2;
  function valider(f){
    if(!this.svarmulighed1.checked&&!this.svarmulighed2.checked){
      alert('Du skal vælge svarmulighed');
      return false;
    }
    return true;
  }
</script>

</head>

<body>

<form method="POST" action="test.htm" onsubmit="return valider(this);">
<input type="checkbox" name="mulighed1" value="ON" onclick="if(numChecked==maxChecked&&this.checked){alert('Hov, kun to !-)');return false;}else{numChecked+=this.checked?1:-1}"> Mulighed 1<br>
<input type="checkbox" name="mulighed2" value="ON" onclick="if(numChecked==maxChecked&&this.checked){alert('Hov, kun to !-)');return false;}else{numChecked+=this.checked?1:-1}"> Mulighed 2<br>
<input type="checkbox" name="mulighed3" value="ON" onclick="if(numChecked==maxChecked&&this.checked){alert('Hov, kun to !-)');return false;}else{numChecked+=this.checked?1:-1}"> Mulighed 3<br>
<input type="checkbox" name="mulighed4" value="ON" onclick="if(numChecked==maxChecked&&this.checked){alert('Hov, kun to !-)');return false;}else{numChecked+=this.checked?1:-1}"> Mulighed 4<br>
<br>
<input type="radio" value="svarmulighed1" name="spr">Svarmulighed 1<br>
<input type="radio" value="svarmulighed2" name="spr">Svarmulighed 2<br>
<br>
<input type="submit" value="Send" name="B1">

</body>

</html>
Avatar billede roenving Novice
23. januar 2006 - 14:35 #14
Uff, der var da også en lyn-copy/paste-fejl:

    if(!f.svarmulighed1.checked&&!f.svarmulighed2.checked){
Avatar billede d.kryger Praktikant
23. januar 2006 - 14:41 #15
Der kommer stadig en fejl ved mig!!!

<html>

<head>
<title>Test</title>
<script type="text/javascript">
  var numChecked=0,maxChecked=2;
  function valider(f){
    if(!f.svarmulighed1.checked&&!f.svarmulighed2.checked){
      alert('Du skal vælge svarmulighed');
      return false;
    }
    return true;
  }
</script>

</head>

<body>

<form method="POST" action="test.htm" onsubmit="return valider(this);">
<input type="checkbox" name="mulighed1" value="ON" onclick="if(numChecked==maxChecked&&this.checked){alert('Hov, kun to !-)');return false;}else{numChecked+=this.checked?1:-1}"> Mulighed 1<br>
<input type="checkbox" name="mulighed2" value="ON" onclick="if(numChecked==maxChecked&&this.checked){alert('Hov, kun to !-)');return false;}else{numChecked+=this.checked?1:-1}"> Mulighed 2<br>
<input type="checkbox" name="mulighed3" value="ON" onclick="if(numChecked==maxChecked&&this.checked){alert('Hov, kun to !-)');return false;}else{numChecked+=this.checked?1:-1}"> Mulighed 3<br>
<input type="checkbox" name="mulighed4" value="ON" onclick="if(numChecked==maxChecked&&this.checked){alert('Hov, kun to !-)');return false;}else{numChecked+=this.checked?1:-1}"> Mulighed 4<br>
<br>
<input type="radio" value="svarmulighed1" name="spr">Svarmulighed 1<br>
<input type="radio" value="svarmulighed2" name="spr">Svarmulighed 2<br>
<br>
<input type="submit" value="Send" name="B1">

</body>

</html>
Avatar billede roenving Novice
23. januar 2006 - 15:08 #16
-- du har jo heller ikke afsluttet formen, indsæt </form> lige før </body>
Avatar billede d.kryger Praktikant
23. januar 2006 - 15:12 #17
Der kommer stadig en fejl:
Linie 8
Tegn 5
Fejl: 'svarmulighed1.checked' er ikke et objekt.

Jeg har også prøvet med </form>
Avatar billede roenving Novice
23. januar 2006 - 15:21 #18
Argh, jeg havde ikke set, at dine radios havde det samme navn:

    if(!f.spr[0].checked&&!f.spr[1].checked){
Avatar billede d.kryger Praktikant
23. januar 2006 - 15:25 #19
Så virker det... Mange tak for hjælpen IGEN IGEN IGEN
Avatar billede d.kryger Praktikant
23. januar 2006 - 15:51 #20
Et sidste spørgsmål (i spørgsmålet):
Kan du lave det sådan at min. én mulighed SKAL vælges og der kan maks vælges 2?
Avatar billede roenving Novice
23. januar 2006 - 16:03 #21
Tjah ...

<script type="text/javascript">
  var numChecked=0,maxChecked=2;
  function valider(f){
    if(!f.spr[0].checked&&!f.spr[1].checked){
      alert('Du skal vælge svarmulighed');
      return false;
    }
    var elms = f.elements,chckd = false;
    for(i=0;elms.length>i;i++)
      chckd = chckd || (elms[i].type == "checkbox" && elms[i].name.indexOf("mulighed") == 0)?elms[i].checked:false;
    if(!chckd){
      alert('Du skal vælge mindst 1 mulighed');
      return false;
    }
    return true;
  }
</script>

-- absolut utestet !-)
Avatar billede d.kryger Praktikant
23. januar 2006 - 16:09 #22
-- absolut utestet !-) HELT OK...

Den skriver 'Du skal vælge mindst 1 mulighed' uanset om du har sat et flueben eller ej... Kan du fixe det?
Avatar billede roenving Novice
23. januar 2006 - 16:16 #23
Hrm, den ternære operator er en sjov ting at have fat i, så sæt et par paranteser !-)

      chckd = chckd || ((elms[i].type == "checkbox" && elms[i].name.indexOf("mulighed") == 0)?elms[i].checked:false);
Avatar billede d.kryger Praktikant
23. januar 2006 - 16:21 #24
Tak IGEN IGEN IGEN IGEN
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester