Avatar billede skovtrold Nybegynder
28. september 2007 - 11:45 Der er 7 kommentarer og
1 løsning

onpropertychange i Firefox

Jeg har en træstruktur med 3 niveauer.
De første 2 niveauer er varegruppe (hoved, og undervaregruppe), og herunder ligger varer.

Brugeren kan folde varegrupperne ud, og klikke varer af vha checkboxes.
Herudover kan man under hver varegruppe vælge "vælg alle". Ved at klikke på denne, afkrydses alle varer i den pågældende varegruppe.

Ud for hvert varegruppenavn skal der være angivet hvor mange varer man har afkrydset.
F.eks.

Fødevarer 3 stk.
  Mælk  2 stk.
      [vælg alle]
      Letmælk (x)
      Skummetmælk
      Sødmælk (x)
  Brød  1 stk.
      [vælg alle]
      Rugbrød (x)
      Franskbrød

Når en bruger afkrydser en vare, skal tallet opdateres med det samme.
Hvis en bruger klikker på "Vælg alle" skal tallet også opdateres.
Dette virker fint i IE.
I Firefox bliver tallet kun opdateret hvis jeg klikker på en vare, men ikke hvis jeg klikker på "Vælg alle".
Jeg bruger onpropertychange, men dette er ikke understøttet af firefox, så hvad gør man så?
Avatar billede skovtrold Nybegynder
28. september 2007 - 11:52 #1
Jeg vil også lige nævne at jeg bruger onchange i firefox, men denne bliver kun aktiveret hvis brugeren klikker på checkboxen, og altså ikke hvis jeg via javascript checker checkboxen af.
Avatar billede montago Praktikant
28. september 2007 - 18:50 #2
det ville kunne give nogle nasty sider, hvis et event kunne triggers af koden selv... onchange beskytter derfor dit script mod at gå helt amok

hvis du allerede bruger en funktion til at afkrydse dine checkboxe, kan dette script jo også tælle antallet af checkboxe ?

lav i stedet en form for monitor funktion, som kaldes når man klikker en checkbox af
<a href="java script:void(0)" onclick="monitor(true)">Afkryds alle</a>
<input type="checkbox" onchange="monitor(false);" name="MonitorActive">

script:

function monitor(Set){
  var count = 0;
  var bx = document.getElementByTagName("MonitorActive")
  for(i=0; i<bx.length; i++){
    if( set == true ) bx.checked = true;
    if( bx.checked ) count++;
  }

  //do something with count
}
Avatar billede montago Praktikant
28. september 2007 - 18:51 #3
hovsa...

...ByName("...  selvfølgelig :p
Avatar billede olebole Juniormester
28. september 2007 - 18:58 #4
<ole>

function monitor(Set){
  var count = 0;
  var bx = document.getElementsByName("MonitorActive")
  for(i=0; i<bx.length; i++){
    if( set == true ) bx.checked = true;
    if( bx.checked ) count++;
    else count--;
  }

  //do something with count
}

/mvh
</bole>
Avatar billede roenving Novice
29. september 2007 - 13:22 #5
if( Set == true ) bx.checked = true;
Avatar billede roenving Novice
29. september 2007 - 13:22 #6
-- eller bare:

if(Set) bx.checked = true;
Avatar billede montago Praktikant
30. september 2007 - 00:40 #7
Ole... Hvorfor tælle ned ??
count-- ??

han tæller jo dem som ER afkrydset...
Avatar billede skovtrold Nybegynder
01. oktober 2007 - 11:48 #8
Mange tak for hjælpen.
Jeg har ikke kunnet se skoven for bare træer, for det er jo logisk nok hvad du skriver, montago, at samme funktion jo bare kan klare optællingen.
Så dit svar fik mig på rette spor, og min kode virker nu.
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

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