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?
Annonceindlæg tema
Offentlig digitalisering
Fra effektivisering til digital suverænitet. Hvordan skaber det offentlige en digital fremtid med AI, sikkerhed og kontrol i centrum?
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 ;-)
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...
06. marts 2005 - 23:18
#3
Ellers er det nødagtigt den funktion jeg er ude efter.
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.
06. marts 2005 - 23:20
#5
okay, vil lige integrere det i det rigtige script, og se hvordan det fungerer der.
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?
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?
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>
06. marts 2005 - 23:34
#9
hvordan skal jeg sætte det ind i det javascript jeg har i forvejen?
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>
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>
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.
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?
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; } } }
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>
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.
07. marts 2005 - 00:18
#17
læg et svar... du var til stor hjælp! Det fungerer nu :o)
07. marts 2005 - 00:21
#18
det da super :-)
07. marts 2005 - 15:57
#19
og tak for points :-)
Vi tilbyder markedets bedste kurser inden for webudvikling