Avatar billede budda Nybegynder
25. januar 2006 - 22:14 Der er 8 kommentarer og
2 løsninger

Max 5 valgte checkboxe

Jeg har en kode hvor man kan vælge en del kategorier.
Men de må kun vælge 5. Hvordan gør jeg sådan at hvis der er 5 valgte så vil resten blive "disabled" ??

De hedder alle "cat[]"

Skulle gerne virke i Firefox og IE :)

På forhånd tak
Avatar billede elskermad.dk Nybegynder
25. januar 2006 - 22:40 #1
Ideen er der, men kan sikkert optimeres MEGET:

<html>
<head>
<title>Max 5</title>
<script language='javascript' type='text/javascript'>
    function tjek() {
        var antal = 0;
       
        for (i=0;i<document.getElementsByTagName('input').length;i++) {
            if (document.getElementsByTagName('input')[i].type=='checkbox') {
                if (document.getElementsByTagName('input')[i].checked == true) antal++
            }
        }
       
        if (antal>=5) {
            for (i=0;i<document.getElementsByTagName('input').length;i++) {
                if (document.getElementsByTagName('input')[i].type=='checkbox') {
                    if (document.getElementsByTagName('input')[i].checked == false) {
                        document.getElementsByTagName('input')[i].disabled = true
                    }
                }
            }
        }
    }
</script>
</head>
<body>

<form name='formNavn' method='post' action='?'>
    <input type='checkbox' name='cat[]' value='1' onChange='tjek()'><br>
    <input type='checkbox' name='cat[]' value='2' onChange='tjek()'><br>
    <input type='checkbox' name='cat[]' value='3' onChange='tjek()'><br>
    <input type='checkbox' name='cat[]' value='4' onChange='tjek()'><br>
    <input type='checkbox' name='cat[]' value='5' onChange='tjek()'><br>
    <input type='checkbox' name='cat[]' value='6' onChange='tjek()'><br>
    <input type='checkbox' name='cat[]' value='7' onChange='tjek()'><br>
    <input type='checkbox' name='cat[]' value='8' onChange='tjek()'><br>
    <input type='checkbox' name='cat[]' value='9' onChange='tjek()'><br>
</form>

<body>
</html>
Avatar billede elskermad.dk Nybegynder
25. januar 2006 - 22:42 #2
Så er det muligt at fjerne en markering og sætte den et andet sted:

<html>
<head>
<title>Max 5</title>
<script language='javascript' type='text/javascript'>
    function tjek() {
        var antal = 0;
       
        for (i=0;i<document.getElementsByTagName('input').length;i++) {
            if (document.getElementsByTagName('input')[i].type=='checkbox') {
                if (document.getElementsByTagName('input')[i].checked == true) antal++
            }
        }
       
        if (antal>=5) {
            for (i=0;i<document.getElementsByTagName('input').length;i++) {
                if (document.getElementsByTagName('input')[i].type=='checkbox') {
                    if (document.getElementsByTagName('input')[i].checked == false) {
                        document.getElementsByTagName('input')[i].disabled = true
                    }
                }
            }
        }
        else {
            for (i=0;i<document.getElementsByTagName('input').length;i++) {
                if (document.getElementsByTagName('input')[i].type=='checkbox') {
                    document.getElementsByTagName('input')[i].disabled = false
                }
            }
        }
    }
</script>
</head>
<body>

<form name='formNavn' method='post' action='?' onClick='tjek()'>
    <input type='checkbox' name='cat[]' value='1'><br>
    <input type='checkbox' name='cat[]' value='2'><br>
    <input type='checkbox' name='cat[]' value='3'><br>
    <input type='checkbox' name='cat[]' value='4'><br>
    <input type='checkbox' name='cat[]' value='5'><br>
    <input type='checkbox' name='cat[]' value='6'><br>
    <input type='checkbox' name='cat[]' value='7'><br>
    <input type='checkbox' name='cat[]' value='8'><br>
    <input type='checkbox' name='cat[]' value='9'><br>
</form>

<body>
</html>
Avatar billede roenving Novice
26. januar 2006 - 16:11 #3
Tjah, hrm, nu tolker jeg buddas spørgsmål sådan, at han vil have, at der ikke kan vælgs flere, så man er jo nødt til at kontrollere det hver gang, der bliver markeret en !-)

F.eks. sådan:

<script type="text/javascript">
var numChecked = 0, maxChecked = 5;
function enableDisableChecks(elm){
  numChecked+=elm.checked?1:-1;
  if(numChecked==maxChecked || !elm.checked){
    var elms = elm.form.getElementsByTagName("input");
    for(i=0;elms.length>i;i++){
      if(elms[i].type == 'checkbox' && elms[i].name == 'cat[]')
        elms[i].disabled = !elms[i].checked && elm.checked;
    }
  }
}
</script>

<form name='formNavn' method='post' action='?'>
    <input type='checkbox' name='cat[]' value='1' onclick="enableDisableChecks(this);"><br>
    <input type='checkbox' name='cat[]' value='1' onclick="enableDisableChecks(this);"><br>
    <input type='checkbox' name='cat[]' value='1' onclick="enableDisableChecks(this);"><br>
    <input type='checkbox' name='cat[]' value='1' onclick="enableDisableChecks(this);"><br>
    <input type='checkbox' name='cat[]' value='1' onclick="enableDisableChecks(this);"><br>
    <input type='checkbox' name='cat[]' value='1' onclick="enableDisableChecks(this);"><br>
    <input type='checkbox' name='cat[]' value='1' onclick="enableDisableChecks(this);"><br>
    <input type='checkbox' name='cat[]' value='1' onclick="enableDisableChecks(this);"><br>
    <input type='checkbox' name='cat[]' value='1' onclick="enableDisableChecks(this);"><br>
    <input type='checkbox' name='cat[]' value='1' onclick="enableDisableChecks(this);"><br>
    <input type='checkbox' name='cat[]' value='1' onclick="enableDisableChecks(this);"><br>
</form>
Avatar billede roenving Novice
26. januar 2006 - 16:13 #4
Desuden har du et par væsentlige fejl:

-- du taster på alle forekommende checkboxe i hele dokumentet ...

-- og du medtager endda også eventuelle checkboxe, som ikke hører til gruppen !-)
Avatar billede elskermad.dk Nybegynder
26. januar 2006 - 16:14 #5
Jeg mener nu heller ikke der kan tjekke flere end 5 checkboxe i mit eksempel roenving? Synes jeg har prøvet en del ting for at opgå min funktion? :)
Avatar billede roenving Novice
26. januar 2006 - 16:19 #6
Argh, du bruger onclick på formen (hvilket jeg ikke selv ville have valgt, da det principielt giver for meget processering !-)
Avatar billede budda Nybegynder
26. januar 2006 - 18:17 #7
Ja kan helleder ikke få din til at virke roenving.

elskermad.dk den virker godt nok :)
Avatar billede elskermad.dk Nybegynder
26. januar 2006 - 18:44 #8
Nu kender jeg heller ikke en hulens fis til hvordan en browser tolker kode (kunne da være et meget spændende område) men satte den blot der af dovenskab :)

Hvad menes helt præcist med processeing?
Avatar billede elskermad.dk Nybegynder
26. januar 2006 - 18:44 #9
... og tak for point :D
Avatar billede roenving Novice
27. januar 2006 - 13:19 #10
>>budda

-- hvordan ikke virke ?-)

-- for med den ovenstående kode virker det vel præcist, som du ønsker ...

-- men hvis du ændrer navnene til f.eks. cat[1] osv. virker det selvfølgelig ikke !-)
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