Avatar billede Slettet bruger
19. maj 2004 - 22:48 Der er 17 kommentarer og
1 løsning

checke om der er krydset af i en af 3 checkbokse

Hej!

Jeg har f.eks. 3 checkbokse der alle hedder noget i stil med:

b_redigere_s[7]
b_redigere_s[9]
b_redigere_s[16]

Hvordan tjekker jeg om minimum en af disse er afkrydsede?
Min form hedder form1 og det skal bare ske ved klik på submit knappen.
Avatar billede skovenborg Nybegynder
19. maj 2004 - 23:51 #1
ved du ikke hvad de hedder fra starten af og skal scriptet checke alle checkboxe i hele form, eller blot dem der starter med b_redigere_s?
Avatar billede roenving Novice
19. maj 2004 - 23:53 #2
<script type="text/javascript">
function checkBoxes(f){
  e = f.elements,chkd=false;
  for(i=0;e.length>i;i++){
    if(e[i].name.indexOf('b_redigere_s')>-1)chkd = chkd || e[i].checked;
  }
  if(!chkd){
    alert('Du skal afkrydse mindst een checkbox');
    return false;
  }else return true;
}
</script>

<form name="form1" ... onsubmit="return checkBoxes(this)">
Avatar billede skovenborg Nybegynder
19. maj 2004 - 23:57 #3
eller:
<script type="text/javascript">
  function checkBoxes(frm) {
        for (i=0;i<frm.length;i++) {
            if (frm.elements[i].type == "checkbox" && frm.elements[i].name.indexOf("b_redigere_s") != -1) {
                  if (frm.elements[i].checked == true) {return true;}
            }
        }
        alert("Du skal checke mindst én af checkboxene");
        return false;
  }
</script>

<form onsubmit="return checkBoxes(this);">

Som jeg fik flikket sammen (forsent selvfølgelig ;-)
Avatar billede skovenborg Nybegynder
20. maj 2004 - 00:05 #4
...meget sjovt vi kalder funktionen for det samme ;-)
Avatar billede roenving Novice
20. maj 2004 - 00:13 #5
Tjah, joeh, fantasien må lagge lidt ...

-- men i den slags konstruktion kan du da ligesågodt sætte det i samme if:

            if (frm.elements[i].type == "checkbox" && frm.elements[i].name.indexOf("b_redigere_s") != -1 && frm.elements[i].checked)return true;

Javascript bruger 'short evaluation', så hvis sådan 3 elementer alle skal være sande for at returnere sand, og een af dem undervejs ikke er sand evaluerer den simpelthen ikke de resterende, da det jo alligevel ikke ændrer resultatet ...

-- og hvorfor spørger du iøvrigt om sand er lig med sand i forventning om at få svaret sand eller falsk ?-)

Hvis noget kan være true eller false, vil
noget == true
give samme resultat som at spørge på noget !-)
Avatar billede skovenborg Nybegynder
20. maj 2004 - 00:24 #6
øhm, i hvilken sammenhæng gør jeg det - jeg stod lige af i farten ;-)

btw kunne du (bare for at give lidt igen ;-) skrive:
for(i=0;e.length>i && chkd==false;i++){
så den ikke behøver løbe alle checkboxene igennem hele tiden (gør nok ikke den store forskel)
Avatar billede roenving Novice
20. maj 2004 - 00:29 #7
if (frm.elements[i].checked == true) ...

-- og jo, jeg kunne jo gøre som du gør (hvilket, jeg tror, er bedre end dit sidste forslag !-), som jeg forøvrigt heller ikke ville begynde at lave ekstra sammenligninger med:

for(i=0;e.length>i && !chkd;i++){

som alt andet lige sparer een sammenligning pr. tur !o]
Avatar billede skovenborg Nybegynder
20. maj 2004 - 00:55 #8
nåå, det er det du mener, altså at der burde stå:
if (frm.elements[i].checked)
okay... viste ikke det gjorde nogen større forskel, men kan godt se din pointe.
Avatar billede roenving Novice
20. maj 2004 - 00:57 #9
Den store forskel er også absolut fraværende, det er bare dårlig kodestil at igangsætte en aldeles overflødig proces !-)
Avatar billede skovenborg Nybegynder
20. maj 2004 - 01:42 #10
jamen det vil jeg da skrive bag øret til næste gang - tak for tippet ;-)
Avatar billede Slettet bruger
20. maj 2004 - 11:16 #11
hehe...rolig nu drenge, i er sgu seje til JS, ingen tvivl om det :)

Øhm...hvad nåede vi frem til var det mest fornuftige?

;)
Avatar billede roenving Novice
20. maj 2004 - 12:12 #12
En kombivare !-)

<script type="text/javascript">
function checkBoxes(f){
  e = f.elements;
  for(i=0;e.length>i;i++){
    if(e[i].name.indexOf('b_redigere_s')>-1&&e[i].checked)return true;
  }
  alert('Du skal afkrydse mindst een checkbox');
  return false;
}
</script>

<form name="form1" ... onsubmit="return checkBoxes(this)">

-- og hvis du har mere at validere kan du godt kalde funktionen andre steder fra, men vi har begge gået ud fra, at form-elementet var tilgængeligt !o]
Avatar billede Slettet bruger
20. maj 2004 - 12:49 #13
Perfekt, det virker jo som en drøm :)
Avatar billede Slettet bruger
20. maj 2004 - 12:49 #14
Så hvis I begge lægger et svar vil jeg "belønne" jer
Avatar billede roenving Novice
20. maj 2004 - 12:50 #15
Velbekomme '-)
Avatar billede skovenborg Nybegynder
20. maj 2004 - 13:06 #16
jeg synes roenving skal have dem - han var både først og så fik jeg selv lært et par trick af det :-)
Avatar billede Slettet bruger
23. maj 2004 - 10:26 #17
Fair nok ;)
Avatar billede roenving Novice
23. maj 2004 - 14:07 #18
-- og tak for point ;~}
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