Avatar billede cypherdenmark Nybegynder
16. januar 2005 - 14:34 Der er 31 kommentarer og
1 løsning

Treemenu skal åbnes når ny side loades

Hej alle,

Jeg har denne menu som virker perfekt men der er dog et lille minus ved den og det er at den lukker når en ny side loades. (ps. jeg ønsker ikke at bruge frames!)

Hvordan kan jeg åbne automatisk når en ny side loades (skal åbne det rigtige menupunkt hvori den blev kaldt)? skal jeg sætte en cookie eller proppe en querystring på? Håber i kan hjælpe og komme med en forslag.

Hermed menu som den ser ud indtil videre

<style type="text/css">
.menudots{padding-left:9px;}
.menupunkt{cursor:pointer;width:132px;color:#444444;font-weight:bold;text-align:right;}
.menu{display:none;padding-left:0px;color:#4E1F33;font-weight:normal;}
.menu a{text-decoration:none;}
.menu a:link{color:4E1F33;}
.menu a:visited{color:4E1F33;}
.menu a:hover{color:white;}
.menu a:active{color:4E1F33}
</style>
<script language="javascript" type="text/javascript">
function showMenu(d){
  var id = d.id.substring(5);
  divs = document.getElementsByTagName('DIV');
  for(i=0;divs.length>i;i++){
    if(divs[i].id.indexOf('menu')==0&&divs[i].id!='menu'+id)divs[i].style.display='none';
  }
  st = document.getElementById('menu'+id).style;
  st.display = (st.display!='block')?'block':'none';
}
</script>
<body bgcolor="cccccc"> 
    <div id="omenu1" class="menupunkt" onclick="showMenu(this);">forside
      <div id="menu1" class="menu" onclick="event.cancel=true"></div>
    </div>   
    <div id="omenu2" class="menupunkt" onclick="showMenu(this);" >nyhed
      <div id="menu2" class="menu" onclick="event.cancel=true">
        <a href="" target="_self">Hvorfor 1</a><br>
        <a href="" target="_self">Hvorfor 2</a><br>
        <a href="" target="_self">Hvorfor 3</a><br>               
      </div>
    </div>   
    <div id="omenu3" class="menupunkt" onclick="showMenu(this);">hvem ved
      <div id="menu3" class="menu" onclick="event.cancel=true">
      <a href="" target="_self">Hvorfor 1</a><br>
        <a href="" target="_self">Hvorfor 2</a><br>
        <a href="" target="_self">Hvorfor 3</a><br>               
      </div>
    </div>       
</body>
Avatar billede roenving Novice
16. januar 2005 - 14:48 #1
f.eks. i javascript-blokken:

document.onload = function(){
  var l = document.getElementsByTagName("A");
  for(i=0;l.length>i;i++){
    if(l[i].parentNode.id.indexOf('menu')==0&&location.href.indexOf(l[i].href)>=0){
      showMenu("o"+l[i].parentNode.id);
      break;
    }
  }
}

-- det kræver selvfølgelig, at du ikke har links, som er delmængder af andre ...
Avatar billede cypherdenmark Nybegynder
16. januar 2005 - 15:02 #2
Hmm jeg må erkende at jeg lige pt. er lidt blank her :-) hvordan skal det sættes sammen?
Avatar billede roenving Novice
16. januar 2005 - 15:13 #3
I den javascript-blok, som allerede er der:

<script language="javascript" type="text/javascript">
function showMenu(d){
  var id = d.id.substring(5);
  divs = document.getElementsByTagName('DIV');
  for(i=0;divs.length>i;i++){
    if(divs[i].id.indexOf('menu')==0&&divs[i].id!='menu'+id)divs[i].style.display='none';
  }
  st = document.getElementById('menu'+id).style;
  st.display = (st.display!='block')?'block':'none';
}
window.onload = function(){
  var l = document.getElementsByTagName("A");
  for(i=0;l.length>i;i++){
    if(l[i].parentNode.id.indexOf('menu')==0&&location.href.indexOf(l[i].href)>=0){
      showMenu("o"+l[i].parentNode.id);
      break;
    }
  }
}
</script>

-- og hov, der var en fejl ...
Avatar billede cypherdenmark Nybegynder
16. januar 2005 - 16:38 #4
Hmm den siger, id er null eller ikke et objekt??
Avatar billede roenving Novice
16. januar 2005 - 16:44 #5
Så må du have links andre steder, hvor parentNoden ikke har et id, så:

    if(l[i].parentNode.id&&l[i].parentNode.id.indexOf('menu')==0&&location.href.indexOf(l[i].href)>=0){
Avatar billede cypherdenmark Nybegynder
16. januar 2005 - 16:49 #6
Har nu udskiftet den med ovenstående men den siger stadigvæk samme fejl?

Hvad mener du med links andre steder hvor parentNoden ikke har id?
Avatar billede cypherdenmark Nybegynder
17. januar 2005 - 08:46 #7
Hej roenving,

Har du en ide til hvad det kunne være som giver denne fejl.?
Avatar billede cypherdenmark Nybegynder
20. januar 2005 - 11:32 #8
Hej, har du eller andre en ide til hvordan fejlen kan løses?

på forhånd tak.......
Avatar billede roenving Novice
20. januar 2005 - 11:40 #9
Prøv at indsætte alerts foran de linjer hvor .id bliver brugt:

  alert(d.id);

  alert(divs[i].id);

osv.

Så kan vi få opklaret hvor fejlen sker !-)
Avatar billede cypherdenmark Nybegynder
20. januar 2005 - 12:31 #10
når jeg klikker på menu siger den f.eks. omenu2,
Avatar billede roenving Novice
20. januar 2005 - 12:56 #11
Altså kommer fejlen efter det sted, hvor alerten sidder, så prøv den lidt senere ...
Avatar billede cypherdenmark Nybegynder
20. januar 2005 - 13:08 #12
Jeg har sat den her

function showMenu(d){
  alert(d.id);
......

og nu siger den undefined
Avatar billede roenving Novice
20. januar 2005 - 13:12 #13
Ergo har d-parameteren en gyldig id-attribut ...

Prøv så at indsætte den her:

  for(i=0;divs.length>i;i++){
    alert(divs[i].id);
    if(divs[i].id.indexOf('menu')==0&&divs[i].id!='menu'+id)divs[i].style.display='none';
  }
Avatar billede cypherdenmark Nybegynder
20. januar 2005 - 13:19 #14
Efter den har sagt at den er undefined så kommer fejlen og den anden alertbox bliver aldrig trikket....
Avatar billede roenving Novice
20. januar 2005 - 13:25 #15
Så prøv med denne linje i stedet (og udkommentér alerten !-)

    if(divs[i].id&&divs[i].id.indexOf('menu')==0&&divs[i].id!='menu'+id)divs[i].style.display='none';
Avatar billede cypherdenmark Nybegynder
20. januar 2005 - 13:28 #16
den kommer stadigvæk med samme fejl!
Avatar billede roenving Novice
20. januar 2005 - 13:31 #17
Når du gør sådan ?-)

  for(i=0;divs.length>i;i++){
    //alert(divs[i].id);
    if(divs[i].id&&divs[i].id.indexOf('menu')==0&&divs[i].id!='menu'+id)divs[i].style.display='none';
  }
Avatar billede cypherdenmark Nybegynder
20. januar 2005 - 13:40 #18
hmmm Ja :-) Men fejlen fremkommer stadigvæk.....
Avatar billede roenving Novice
20. januar 2005 - 13:47 #19
Får du også fejl onload ?-)
Avatar billede cypherdenmark Nybegynder
20. januar 2005 - 13:52 #20
Nej den siger bare "id er null eller ikke et objekt"
Avatar billede roenving Novice
20. januar 2005 - 13:59 #21
Har du sat // foran alerten ?-)
Avatar billede cypherdenmark Nybegynder
20. januar 2005 - 14:01 #22
yes det ser sådan ud:

function showMenu(d){ 
  var id = d.id.substring(5); 
  divs = document.getElementsByTagName('DIV');
   
  for(i=0;divs.length>i;i++){
    //alert(divs[i].id);
    if(divs[i].id&&divs[i].id.indexOf('menu')==0&&divs[i].id!='menu'+id)divs[i].style.display='none';
  }
 
  st = document.getElementById('menu'+id).style;
  st.display = (st.display!='block')?'block':'none';
}
  window.onload = function(){
  var l = document.getElementsByTagName("A");
  for(i=0;l.length>i;i++){
    if(l[i].parentNode.id.indexOf('menu')==0&&location.href.indexOf(l[i].href)>=0){
      showMenu("o"+l[i].parentNode.id);
      break;
    }
  }
}
</script>
Avatar billede cypherdenmark Nybegynder
20. januar 2005 - 21:04 #23
Er det ikke rigtigt hvor // er sat? Håber du snart du kan finde en løsning :)
Avatar billede roenving Novice
21. januar 2005 - 09:29 #24
-- og den loader uden fejl ?-)
Avatar billede cypherdenmark Nybegynder
21. januar 2005 - 12:50 #25
Nej den loader MED fejl - "id er null eller ikke et objekt" ??
Avatar billede cypherdenmark Nybegynder
21. januar 2005 - 21:34 #26
Du siger bare til når du har et bud/svar så vi kan få det ud af verden :-)

Har du prøvet at køre koden på din egen maskine? Jeg forstår ikke at det ikke virker...
Avatar billede roenving Novice
24. januar 2005 - 09:51 #27
-- aha, jeg har forstået at fejlen først kom, når du prøvede at trykke på den, for min allerførste tanke var, at du havde links liggende andre steder, jvf. 16/01-2005 16:44:36 !-)

-- men så kan vi jo checke begge steder:

function showMenu(d){ 
  var id = d.id.substring(5); 
  divs = document.getElementsByTagName('DIV');
   
  for(i=0;divs.length>i;i++){
    //alert(divs[i].id);
    if(divs[i].id&&divs[i].id.indexOf('menu')==0&&divs[i].id!='menu'+id)divs[i].style.display='none';
  }
 
  st = document.getElementById('menu'+id).style;
  st.display = (st.display!='block')?'block':'none';
}
  window.onload = function(){
  var l = document.getElementsByTagName("A");
  for(i=0;l.length>i;i++){
    if(l[i].parentNode.id&&l[i].parentNode.id.indexOf('menu')==0&&location.href.indexOf(l[i].href)>=0){
      showMenu("o"+l[i].parentNode.id);
      break;
    }
  }
}
Avatar billede cypherdenmark Nybegynder
24. januar 2005 - 13:27 #28
jeg får stadigvæk samme fejl når siden loades selvom jeg har brugt ovenstående kode
Avatar billede cypherdenmark Nybegynder
25. januar 2005 - 21:37 #29
ingen ide eller andre der kan hjælpe?
Avatar billede cypherdenmark Nybegynder
01. februar 2005 - 21:05 #30
hvaaa roenving har du opgivet ?
Avatar billede cypherdenmark Nybegynder
04. februar 2005 - 20:54 #31
Nå ser ud som om jeg må lukke spørgsmålet? er du helt sikker på du ikke har en ide ?
Avatar billede cypherdenmark Nybegynder
04. februar 2005 - 23:28 #32
jeg lukker spg.....
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