Avatar billede wired Nybegynder
27. april 2004 - 00:52 Der er 25 kommentarer og
1 løsning

Begrænsninger ved Rekursive kald?

Jeg har lavet en rekursiv funktion, som virker men virker som om at den er begrænset til 6 rekursive kald. Skyldes det begrænsninger i JavaScript, IE6 eller er der en fejl i programmet?

Programmet skal sætte alle elementer som starter med "pkt" i en hierakisk menu til at være display="none", men den springer over når den når til 7' rekursivitet.

function SAN(obj) {
  if (typeof(obj(0)) != "undefined") {
    nrs = parseInt(obj.length);
    for (i = 0;i < nrs; i++) {   
      if (obj(i).id.substring(0,3) == "pkt") {
        obj(i).style.display = "none";
        SAN(obj(i).children);
      }
    }
  }
}
Avatar billede roenving Novice
27. april 2004 - 01:10 #1
Der er nogle memory-begrænsninger som browseren sætter ...

-- og de kan jo blive ret voldsomme, når man når ud i det 7. kald ...

Bare tænk på, at det endnu ikke er lykkedes nogle at folde et stykke silkepapir på størrelse med en fodboldbane mere end 7 gange, og der er det kun fordoblinger ...

-- men måske har det betydning, at din syntaks principielt er ulovlig (og noget er overflødig !-)

function SAN(obj) {
  for (i = 0;i < obj.length; i++) {   
    if (obj[i].id.substring(0,3) == "pkt") {
      obj[i].style.display = "none";
      (obj[i].children)?SAN(obj[i].children):return;
    }
  }
}

-- og så fik jeg da også lavet nogle immediate kald i stedet for at ophobe variabler !-)
Avatar billede wired Nybegynder
27. april 2004 - 01:20 #2
Åhh.. Det ser godt ud, jeg får dog en syntax fejl i:

(obj[i].children)?SAN(obj[i].children):return;
Avatar billede olebole Juniormester
27. april 2004 - 01:23 #3
<ole>

Vil du beære os med teksten i den fejl-meddelelse?  :)

/mvh
</bole>
Avatar billede wired Nybegynder
27. april 2004 - 01:25 #4
Hvis er erstatter det med
  if (obj[i].children) {
    SAN(obj[i].children;
  } else {
    return;
  }
Får jeg en endeløs loop.
Avatar billede roenving Novice
27. april 2004 - 01:26 #5
-- også med

  if (obj[i].children) {
    SAN(obj[i].children);
Avatar billede olebole Juniormester
27. april 2004 - 01:28 #6
SAN() skal vel kaldes med et HTML-element som argument ... ikke med et HTML-elements children-collection
Avatar billede wired Nybegynder
27. april 2004 - 01:28 #7
Syntaks: En objekt var ventet.

Den komme med det samme jeg starter siden, altså lidt som hvis der manglede en }
Avatar billede olebole Juniormester
27. april 2004 - 01:30 #8
... glem lige min seneste kommentar - jeg er vist ved at være half past tired  :o|
Avatar billede wired Nybegynder
27. april 2004 - 01:30 #9
Jo det skal være en collection
Avatar billede wired Nybegynder
27. april 2004 - 01:31 #10
ok :-)
Avatar billede roenving Novice
27. april 2004 - 01:31 #11
Men der var dog en mening ole ...

function SAN(obj) {
  for (i = 0;i < obj.children.length; i++) {   
    if (obj.children[i].id.substring(0,3) == "pkt") {
      obj.children[i].style.display = "none";
      (obj.children[i].children)?SAN(obj.children[i]):return;
    }
  }
}
Avatar billede wired Nybegynder
27. april 2004 - 01:32 #12
også med
if (obj[i].children) {
    SAN(obj[i].children);
Avatar billede olebole Juniormester
27. april 2004 - 01:33 #13
*LooOooL* ... of course  ;D
Avatar billede olebole Juniormester
27. april 2004 - 01:34 #14
roenving >> Det er bagdelen ved at være født med en emhætte som tud. Jeg så ikke, hvad der lå lige under næsen på mig  ;o)
/mvh
Avatar billede olebole Juniormester
27. april 2004 - 01:37 #15
Men så skal den vel hedde:
  (obj.children[i].children)?SAN(obj.children[i].children):return;  :)
Avatar billede wired Nybegynder
27. april 2004 - 01:37 #16
Kl. er også mange, vil også ligge mig nu. ses i morgen.
Avatar billede roenving Novice
27. april 2004 - 01:38 #17
-- og det handler jo også om en af besværlighederne ved rekursivitet, når man skal programmere det:

I enten start-enden skal rekursiviteten være åbenbar eller også skal man i slut-enden ideligt checke for om der fortsat kan kaldes ...
Avatar billede olebole Juniormester
27. april 2004 - 01:38 #18
God damned ... Ja! Glem igen min seneste kommentar ....... og god SÅ nat!  ;o)
Avatar billede wired Nybegynder
27. april 2004 - 01:42 #19
Får stadig syntaks. Men mine øjne er heller ikke meget værd nu.

Det oprindelige virkede men nåede altså bare kun 7 niveauer ned før end den begyndte at droppe.

Vil lægge mig, tak for hjælpen for nu ses i morgen.
Avatar billede roenving Novice
27. april 2004 - 01:44 #20
-- i den sidste udgave skal kaldet udføres med et 'over'-objekt, altså f.eks. den yderste ul ...
Avatar billede wired Nybegynder
27. april 2004 - 18:10 #21
Mange tak for forslagene. Der var dog ingen af dem som var med til at finde løsningen, men der var nogle gode forslag til optimering, som jeg takker meget for.
Løsningen lå i at jeg ikke havde defineret nye objecter/variabler ved hver rekurtive kald hvorfor de gamle blev overskrevet. Det der manglede var ganske simpelt:
var i;
var nrs;
Avatar billede olebole Juniormester
27. april 2004 - 18:39 #22
Når man er nødt til at oprette et spm, fordi man har begået en seriøs bummert i sin kode, er det almindelig god Eksperten-stil at give folk, der har brugt sin fritid på at hjælpe med at udbedre ens fejl, lidt points.
Det havde været klædeligt, om du havde tilbudt roenving nogle points for sin ulejlighed med at prøve at hjælpe dig.

... just my 2 cents  :)
Avatar billede wired Nybegynder
27. april 2004 - 18:48 #23
Fair.. Jeg er faktisk fuldstændig enig med dig olebole. Men har også en gang fået på puklen for at give point til højre og venstre selv om mit spørgsmål ikke var besvaret, da det gav en dårlig moral. Det endte med en længere debat.
Anyway. Jeg opretter lige et spm. på 20p - roenving, og takker for dit svar.

se 494111
Avatar billede wired Nybegynder
27. april 2004 - 18:53 #24
Det kunne nu være interessant at høre hvad adm.'s holdning/retningsliner er på området :-) Jeg vil nødig gentage eller være medvirken til en uheldig stil.
Avatar billede espersen Novice
27. april 2004 - 19:09 #25
Avatar billede olebole Juniormester
27. april 2004 - 19:10 #26
Nu skal man jo passe på, hvad man siger (ikke at det plejer at ligge til mig *LooL*), men det er min opfattelse, at langt de fleste brugere finder det på sin plads at give points for indsatsen, selvom spm måske ikke besvares fuldt ud.

Vi skal huske på, at der bag hver svarer sidder et vildt fremmed menneske, der fravælger andre ting i livet for at hjælpe spørgeren med hans/hendes problem. Det lyder måske lidt patetisk - og det er jo frivilligt at hjælpe - men et lille skulderklap finder jeg nu helt på sin plads.

For min skyld gør det ikke spor, at pointsystemet ikke kun afspejler viden - men også hjælpsomhed og flid.

I den anden grøft ligger naturligvis den uundgåelige klaphat, der så vil svare "bumser og gnuer" i hvert andet spørgsmål - for at opnå points for sin 'flid'.
Meeeeeeeen ... det burde være muligt at finde en rimelig balance - omend man nok aldrig helt undgår grænse-diskussioner  ;o)
/mvh

PS: RESPEKT for din prompte reaktion!
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

IT-JOB