Avatar billede milo Nybegynder
04. oktober 2004 - 14:44 Der er 14 kommentarer og
1 løsning

Checke checkboxe ved parent check

Kryptisk titel, illustrerer det i stedet:

[] = checkbox

foo []
  sub_foo1 []
  sub_foo2 []
  sub_foo3 []

bar []
  sub_bar1 []
  sub_bar2 []
  sub_bar3 []

etc.

Checker man "foo", skal sub_foo's checkes. Checker man en af sub_foo'erne, skal "foo" også checkes. Fjerner man check fra "foo" skal check også fjernes fra sub_foo'erne :)

Har mere eller mindre fået det til at virke selv, i firefox, men IE gider ikke lege med, så ser om jeg ikke kan få en løsning her imens jeg roder videre med min egetn løsning, det ville være nemmere :)
Avatar billede roenving Novice
04. oktober 2004 - 15:10 #1
Hvordan kan man kende elementernes sammenhæng ?-)

-- har du et navngivningsskema, som det du skitserer i det ovenstående, eller har du dem måske samlet sådan, at man kan finde (eller oprette !-) et omkransende element, man kan tage udgangspunkt i ?o]
Avatar billede milo Nybegynder
04. oktober 2004 - 15:13 #2
foo og bar er kategorinavne, jeg har liggende i en postgresdb. Disse har et id.
Underfelterne kan med fordel benytte dets parents id til at identificeres på :)

foo (id 1)
- sub (id1)
- sub (id1)

bar (id2)
- sub (id2)
- sub (id2)

osv. :)

Det er det jeg har brugt til at identificere med selv, i hvert fald.

Så antager navnene på subfelterne vil være foo[] fx :)
Avatar billede roenving Novice
04. oktober 2004 - 15:42 #3
Det som jeg selv umiddelbart ville finde på var ca. sådan (den anden metode, jeg omtaler:

<span>
foo: <input type="checkbox" onclick="mark(this)" name="cID1"><br>
-- sub: <input type="checkbox" onclick="mark(this)" name="cID1"><br>
-- sub: <input type="checkbox" onclick="mark(this)" name="cID1"><br>
-- sub: <input type="checkbox" onclick="mark(this)" name="cID1"><br>
</span>

-- Hvis du kan holde navnene sådan er span'en overflødig !-)

c'et er lagt ind, da jeg ikke vil blive overrasket, hvis id'et er et tal, så bare for at undgå problemer har jeg sat et bogstav forrest ...

-- og så:

<script type="text/javascript">
function mark(elm){
  var f = elm.form,chck=false;
  var e = f.elements[elm.name];
  if(e[0] == elm){
    for(i=1;e.length>i;i++)e[i].checked = elm.checked;
  }else{
    for(i=1;e.length>i;i++)chck = chck || e[i].checked;
    e[0].checked=chck;
  }
}
</script>
Avatar billede milo Nybegynder
04. oktober 2004 - 15:47 #4
Tak så langt så godt - men du overså den feature, at hvis man vælger et af sub felterne, skal den overordnede checkbox også vælges. :)

Fjerner man alle valg fra sub felterne, skal den overordnede checkbox også fravælges.

:)
Avatar billede roenving Novice
04. oktober 2004 - 15:59 #5
Hvilket også præcis burde ske ...
Avatar billede roenving Novice
04. oktober 2004 - 16:00 #6
Prøv den !-)
Avatar billede milo Nybegynder
04. oktober 2004 - 16:06 #7
firefox javascript console siger: "f has no properties"
Avatar billede roenving Novice
04. oktober 2004 - 16:15 #8
Så har du ikke lagt en form rundt om !-)

-- udskift f.eks. span med form ...
Avatar billede milo Nybegynder
04. oktober 2004 - 16:21 #9
Sandt, mig der kegler :)

Virker perfekt, tak.
Avatar billede milo Nybegynder
04. oktober 2004 - 16:22 #10
Læg et svar :)

Forresten, se i mine oprettede spørgsmål...du henvendte dig aldrig mht. den menu :/
Avatar billede roenving Novice
04. oktober 2004 - 16:24 #11
Velbekomme '-)

-- næh, jeg kiggede forbi den anden dag, men havde ikke mod på at tage fat i den ...
Avatar billede milo Nybegynder
04. oktober 2004 - 16:28 #12
Okay...du kan godt få 200 points for den, så hvis du har mod på, så bare skriv derinde, så skal jeg nok oprette et nyt spg. til dig.
Avatar billede roenving Novice
04. oktober 2004 - 16:42 #13
Tak for point ;~}
Avatar billede milo Nybegynder
07. oktober 2004 - 10:06 #14
Har lige opdaget en lille bug ;) - hvis man vælger en checkbox som ikke har nogle childs, får man en javascript fejl :)

Error: e[0] has no properties
Avatar billede roenving Novice
09. oktober 2004 - 21:18 #15
Knap nk en bug, for jeg havde ikke forstået, at du kunne få enlige checkboxe ...

Men så må vi vel tage højde for det også !-)

<script type="text/javascript">
function mark(elm){
  var f = elm.form,chck=false;
  var e = f.elements[elm.name];
  if(e.length){
    if(e[0] == elm){
      for(i=1;e.length>i;i++)e[i].checked = elm.checked;
    }else{
      for(i=1;e.length>i;i++)chck = chck || e[i].checked;
      e[0].checked=chck;
    }
  }
}
</script>
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