Avatar billede canedo Nybegynder
06. marts 2005 - 22:36 Der er 18 kommentarer og
1 løsning

checkbox med max-antal afkryds?

Jeg har en række med checkboxe i en form.

Er det muligt at få det lavet sådan, at hvis man afkrydser et max antal på 10 kryds bliver resten af boxene dimmet ud?
Avatar billede skovenborg Nybegynder
06. marts 2005 - 23:11 #1
Okay, de bliver godt nok ikke dimmet ud, som du kalder det - hvis checkboxe overhovedet kan det. Men det her script kan gøre noget der ligner:
<script type="text/javascript">
  var checkboxArr = new Array();
  function checkboxFunction(chkElm,chkName,maxChecked) {
        if (!checkboxArr[chkName]) {checkboxArr[chkName] = 0;}
        num = checkboxArr[chkName] += (chkElm.checked) ? 1 : -1;
        if (num == maxChecked) {
            elms = document.getElementsByName(chkName);
            for (i=0;i<elms.length;i++) {
                  elms[i].disabled = !elms[i].checked;
            }
        }
        else if (num == maxChecked-1) {
            elms = document.getElementsByName(chkName);
            for (i=0;i<elms.length;i++) {
                  elms[i].disabled = false;
            }
        }
  }
</script>

<body>
<form>
<input type="checkbox" name="chk1" onclick="checkboxFunction(this,this.name,3);">
<input type="checkbox" name="chk1" onclick="checkboxFunction(this,this.name,3);">
<input type="checkbox" name="chk1" onclick="checkboxFunction(this,this.name,3);">
<input type="checkbox" name="chk1" onclick="checkboxFunction(this,this.name,3);">
<input type="checkbox" name="chk1" onclick="checkboxFunction(this,this.name,3);">
<input type="checkbox" name="chk1" onclick="checkboxFunction(this,this.name,3);">
<input type="checkbox" name="chk1" onclick="checkboxFunction(this,this.name,3);">
<input type="checkbox" name="chk1" onclick="checkboxFunction(this,this.name,3);">
<input type="checkbox" name="chk1" onclick="checkboxFunction(this,this.name,3);">
<input type="checkbox" name="chk1" onclick="checkboxFunction(this,this.name,3);">
<input type="checkbox" name="chk1" onclick="checkboxFunction(this,this.name,3);"><br />
  <input type="checkbox" name="chk2" onclick="checkboxFunction(this,this.name,5);">
<input type="checkbox" name="chk2" onclick="checkboxFunction(this,this.name,5);">
<input type="checkbox" name="chk2" onclick="checkboxFunction(this,this.name,5);">
<input type="checkbox" name="chk2" onclick="checkboxFunction(this,this.name,5);">
<input type="checkbox" name="chk2" onclick="checkboxFunction(this,this.name,5);">
<input type="checkbox" name="chk2" onclick="checkboxFunction(this,this.name,5);">
<input type="checkbox" name="chk2" onclick="checkboxFunction(this,this.name,5);">
<input type="checkbox" name="chk2" onclick="checkboxFunction(this,this.name,5);">
<input type="checkbox" name="chk2" onclick="checkboxFunction(this,this.name,5);">
<input type="checkbox" name="chk2" onclick="checkboxFunction(this,this.name,5);">
<input type="checkbox" name="chk2" onclick="checkboxFunction(this,this.name,5);">
</form>
</body>

Når du har checked maximum antal checkboxe af så disables resten indtil du evt. fjerner et kryds. Navnet på funktionen er måske lidt fantasiløst, men kunne ikke finde på et passende ;-)
Avatar billede canedo Nybegynder
06. marts 2005 - 23:16 #2
okay, men hvad hvis det kun gælder for EN række checkboxe og ikke to... ? Jeg er virkelig en dør til javascript, men formoder der skal fjernes en regel et sted...
Avatar billede canedo Nybegynder
06. marts 2005 - 23:18 #3
Ellers er det nødagtigt den funktion jeg er ude efter.
Avatar billede skovenborg Nybegynder
06. marts 2005 - 23:18 #4
jaja, jeg ville bare vise dig at funktionen kunne virke med mere end én række - så du kan bare fjerne nederste række hvis du vil.

Funktionen er bygget til at du kan have ligeså mange checkboxe du har lyst til i så mange rækker du har lyst til. En række checkboxe skal bare have samme navn og så burde det virke.
Avatar billede canedo Nybegynder
06. marts 2005 - 23:20 #5
okay, vil lige integrere det i det rigtige script, og se hvordan det fungerer der.
Avatar billede canedo Nybegynder
06. marts 2005 - 23:26 #6
Det virker vidst ikke, hvis der allerede er sat check i nogle af boxene på siden, når den loades, kan det passe?
Avatar billede canedo Nybegynder
06. marts 2005 - 23:27 #7
hvordan kan man få det til at virke, når der er sat hak i boxene allerede når siden loades?
Avatar billede skovenborg Nybegynder
06. marts 2005 - 23:31 #8
Ja, den tager ikke højde for den slags ting, men det kan ordnes med en lille ekstra onload-funktion:
<script type="text/javascript">
window.onload = function() {
        frmElms = document.form1.chk1;
        checkboxArr["chk1"] = 0;
        for (i=0;i<frmElms.length;i++) {
            if (frmElms[i].checked) {checkboxArr["chk1"]++;}
        }
  }
</script>

<form name="form1">
<input type="checkbox" name="chk1" onclick="checkboxFunction(this,this.name,3);" checked>
<input type="checkbox" name="chk1" onclick="checkboxFunction(this,this.name,3);">
<input type="checkbox" name="chk1" onclick="checkboxFunction(this,this.name,3);">
<input type="checkbox" name="chk1" onclick="checkboxFunction(this,this.name,3);">
<input type="checkbox" name="chk1" onclick="checkboxFunction(this,this.name,3);">
<input type="checkbox" name="chk1" onclick="checkboxFunction(this,this.name,3);">
<input type="checkbox" name="chk1" onclick="checkboxFunction(this,this.name,3);">
<input type="checkbox" name="chk1" onclick="checkboxFunction(this,this.name,3);">
<input type="checkbox" name="chk1" onclick="checkboxFunction(this,this.name,3);">
<input type="checkbox" name="chk1" onclick="checkboxFunction(this,this.name,3);">
<input type="checkbox" name="chk1" onclick="checkboxFunction(this,this.name,3);">
</form>
Avatar billede canedo Nybegynder
06. marts 2005 - 23:34 #9
hvordan skal jeg sætte det ind i det javascript jeg har i forvejen?
Avatar billede canedo Nybegynder
06. marts 2005 - 23:40 #10
den skriver fejl på siden hvis jeg gør sådan:

<script type="text/javascript">
  var checkboxArr = new Array();
  function checkboxFunction(chkElm,chkName,maxChecked) {
        if (!checkboxArr[chkName]) {checkboxArr[chkName] = 0;}
        num = checkboxArr[chkName] += (chkElm.checked) ? 1 : -1;
        if (num == maxChecked) {
            elms = document.getElementsByName(chkName);
            for (i=0;i<elms.length;i++) {
                  elms[i].disabled = !elms[i].checked;
            }

        }
  }

window.onload = function() {
        frmElms = document.form1.chk1;
        checkboxArr["favorit"] = 0;
        for (i=0;i<frmElms.length;i++) {
            if (frmElms[i].checked) {checkboxArr["favorit"]++;}
        }
  }

</script>
Avatar billede skovenborg Nybegynder
06. marts 2005 - 23:40 #11
bare sammen med:
<script type="text/javascript">
  var checkboxArr = new Array();
  function checkboxFunction(chkElm,chkName,maxChecked) {
        if (!checkboxArr[chkName]) {checkboxArr[chkName] = 0;}
        num = checkboxArr[chkName] += (chkElm.checked) ? 1 : -1;
        if (num == maxChecked) {
            elms = document.getElementsByName(chkName);
            for (i=0;i<elms.length;i++) {
                  elms[i].disabled = !elms[i].checked;
            }
        }
        else if (num == maxChecked-1) {
            elms = document.getElementsByName(chkName);
            for (i=0;i<elms.length;i++) {
                  elms[i].disabled = false;
            }
        }
  }
 
  window.onload = function() {
        frmElms = document.form1.chk1;
        checkboxArr["chk1"] = 0;
        for (i=0;i<frmElms.length;i++) {
            if (frmElms[i].checked) {checkboxArr["chk1"]++;}
        }
  }
</script>
</head>
<body>
<form name="form1">
<input type="checkbox" name="chk1" onclick="checkboxFunction(this,this.name,3);" checked>
<input type="checkbox" name="chk1" onclick="checkboxFunction(this,this.name,3);">
<input type="checkbox" name="chk1" onclick="checkboxFunction(this,this.name,3);">
<input type="checkbox" name="chk1" onclick="checkboxFunction(this,this.name,3);">
<input type="checkbox" name="chk1" onclick="checkboxFunction(this,this.name,3);">
<input type="checkbox" name="chk1" onclick="checkboxFunction(this,this.name,3);">
<input type="checkbox" name="chk1" onclick="checkboxFunction(this,this.name,3);">
<input type="checkbox" name="chk1" onclick="checkboxFunction(this,this.name,3);">
<input type="checkbox" name="chk1" onclick="checkboxFunction(this,this.name,3);">
<input type="checkbox" name="chk1" onclick="checkboxFunction(this,this.name,3);">
<input type="checkbox" name="chk1" onclick="checkboxFunction(this,this.name,3);">
</form>
</body>
Avatar billede skovenborg Nybegynder
06. marts 2005 - 23:41 #12
forresten skal du have de rigtige navne med - det er jo ikke sikkert at din form hedder form1 og dine checkboxe chk1. Så husk at rette linierne:
frmElms = document.form1.chk1;
checkboxArr["chk1"] = 0;
til det rigtige. form1 skal ændres til dit formnavn og chk1 skal ændres til hvad dine checkboxe nu hedder.
Avatar billede canedo Nybegynder
06. marts 2005 - 23:45 #13
men når der så er sat hak i 10 checkboxe, og man kommer ind på siden første gang, så er nummer 11 ikke dimmet... hehe... findes der en loadfunktion til det?
Avatar billede skovenborg Nybegynder
07. marts 2005 - 00:02 #14
tjaa, du kan prøve:
window.onload = function() {
        frmElms = document.form1.chk1;
        checkboxArr["chk1"] = 0;
        for (i=0;i<frmElms.length;i++) {
            if (frmElms[i].checked) {checkboxArr["chk1"]++;}
        }
        if (checkboxArr["chk1"] >= 10) {
            for (i=0;i<frmElms.length;i++) {
                  frmElms[i].disabled = !frmElms[i].checked;
            }
        }

  }
Avatar billede canedo Nybegynder
07. marts 2005 - 00:07 #15
Det funger ikke... har gjort sådan her:

<script type="text/javascript">
window.onload = function() {
        frmElms = document.form1.favorit;
        checkboxArr["favorit"] = 0;
        for (i=0;i<frmElms.length;i++) {
            if (frmElms[i].checked) {checkboxArr["favorit"]++;}
        }
        if (checkboxArr["favorit"] >= 10) {
            for (i=0;i<frmElms.length;i++) {
                  frmElms[i].disabled = !frmElms[i].checked;
            }
        }

  }
var checkboxArr = new Array();
  function checkboxFunction(chkElm,chkName,maxChecked) {
        if (!checkboxArr[chkName]) {checkboxArr[chkName] = 0;}
        num = checkboxArr[chkName] += (chkElm.checked) ? 1 : -1;
        if (num == maxChecked) {
            elms = document.getElementsByName(chkName);
            for (i=0;i<elms.length;i++) {
                  elms[i].disabled = !elms[i].checked;
            }
        }
        else if (num == maxChecked-1) {
            elms = document.getElementsByName(chkName);
            for (i=0;i<elms.length;i++) {
                  elms[i].disabled = false;
            }
        }
  }
window.onload = function() {
        frmElms = document.form1.favorit;
        checkboxArr["favorit"] = 0;
        for (i=0;i<frmElms.length;i++) {
            if (frmElms[i].checked) {checkboxArr["favorit"]++;}
        }
  }


</script>
Avatar billede skovenborg Nybegynder
07. marts 2005 - 00:11 #16
hov, du skal ikke have to window.onload-funktioner - slet den nederste. Jeg tror problemmet er at den har kommet til at overskrive den øverste, som du skal bruge.
Avatar billede canedo Nybegynder
07. marts 2005 - 00:18 #17
læg et svar... du var til stor hjælp! Det fungerer nu :o)
Avatar billede skovenborg Nybegynder
07. marts 2005 - 00:21 #18
det da super :-)
Avatar billede skovenborg Nybegynder
07. marts 2005 - 15:57 #19
og tak for points :-)
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