17. juni 2003 - 16:38
Der er
32 kommentarer og 2 løsninger
En lille menu
Hej eksperter
Jeg har denne menu som jeg har lavet, men den virker ikke og opfører sig mærkeligt.
Det er som om at min clearInterval ikke virker og nogen gange vil menuen ikke droppe ned.
http://denpei.dyndns.dk/exp/ (D)HTML/menu.htm
(den ligger på min egen server så..)
Annonceindlæg fra itavis
Hvad for en browser bruger du??? Scriptet virker umiddelbart i IE6sp1, men overhovedet ikke i mozilla. Kunne du præcis sige hvad den gør galt (hvad der er mærkeligt)?
Den er indtil videre som du rigtigt nok siger kun optimeret til IE 4.0+, da den benytter document.all, men 2 sek. så kan jeg da lige lave den med getElementByID...
hov, nu virker det slet ikke. Du skriv jo også: if (document.getElementById(lagnavn).style.display == 'none'){ document.getElementById(lagnavn).style.display = 'block';aktiv=1; -- uden at have defineret lagnavn i funktionen (husk forskellen på globale og lokale variabler :)
undskyld det var ikke der men ved hide();
ja, men hele menuen virker ikke når min hide går ind og har indflydelse. Så jeg tror nok at den skal droppes helt.
samt show(); det er der hvor den melder fejl
Nu virker menuen da slet ikke, det kan jeg da godt se, hmmm...
det nok den der show() hvor du bruger getElementById(lagnavn). Måske skulle gøre ligesom de andre steder: function show(lagnavn){ lagnavn=oObj; if (i<x){i=i+5;getElementById(lagnavn).style.top=i;} } function showmenu(lagnavn){ if(aktivmenu != lagnavn){ oObj=lagnavn; clearInterval(intHide); intShow=setInterval("show(lagnavn)",10) }} eller sådan noget - javascriptdebuggeren i mozilla giver i hvert fald fejl i linie 27
17. juni 2003 - 17:27
#10
Nej det virker heller ikke.
17. juni 2003 - 17:28
#11
scriptet ser nu sådan her ud : <script type="text/javascript"> var i=-75;var x = 0;var intHide;var intShow;var oObj;var aktivmenu = "gemt"; function show(lagnavn){ lagnavn=oObj; if (i<x){i=i+5;getElementById(lagnavn).style.top=i;} } function showmenu(lagnavn){ if(aktivmenu != lagnavn){ oObj=lagnavn; intShow=setInterval("show(lagnavn)",10) }} function lag(lagnavn) // IE4+ { if(aktivmenu != lagnavn){ if (document.getElementById(lagnavn).style.display == 'none'){ document.getElementById(lagnavn).style.display = 'block';aktiv=1; } else { document.getElementById(lagnavn).style.display = 'none';i=-75;} }} function Loader(){ aktiver = self.location.search.substring(6) if (aktiver != ""){ strLen = aktiver.length+3; aktive = self.location.search.substring(6,strLen); showmenu(aktive); lag(aktiver); aktivmenu = aktiver; }} </script>
17. juni 2003 - 17:47
#12
Det da også noget vrøvl det jeg siger - du har jo specificeret lagnavn inde i show() med lagnavn = oObj;
17. juni 2003 - 18:12
#13
for at hjælpe lidt på vej, så virker dette her næsten (men det virker også meget mærkeligt): function show(){ if (i<x){i=i+5;document.getElementById(oObj).style.top=i;} } function showmenu(lagnavn){ if(aktivmenu != lagnavn){ oObj=lagnavn; clearInterval(intHide); intShow=setInterval("show()",10) }} function hidemenu(lagnavn){ if(aktivmenu != lagnavn){ oObj=lagnavn; clearInterval(intShow); intShow=setInterval("show()",10) }} Menuen forsvinder dog lige efter man har ført musen over, men dette her er da en start.
17. juni 2003 - 18:22
#14
Det sidste er dog kun i mozilla - IE virker sådan cirka ligesom det gjorde før.
17. juni 2003 - 18:51
#15
okay, tak.
17. juni 2003 - 18:58
#16
håber det kan bruges - lægger forresten lige et lille svar bare for en god ordens skyld. Du behøver selvfølgelig ikke acceptere, da det hele jo ikke virker 100% ordentligt endnu.
17. juni 2003 - 21:36
#17
Har ikke været i dybden, men umiddelbart er der problemer med at sende parametre, nå du bruger setInterval -- er herinde blevet belært om, at man godt kan (selv om bogen siger noget andet): intShow=setInterval("show("+lagnavn+")",10)
18. juni 2003 - 11:30
#18
<ole> Men så skal vi lige have enkelte gåseøjne inde i de dobbelte ;o) /mvh </bole>
18. juni 2003 - 12:28
#19
>>ole der er kun eet niveau ...
18. juni 2003 - 12:30
#20
Okay ... så er jeg mere rolig - for så er det helt forkert :D intShow = setInterval("show('"+lagnavn+"')",10) /mvh
18. juni 2003 - 12:41
#21
uff ... -- du har vel nok ret, for det er vist et par uger siden jeg havde fingrene i det hjørne ... ;O)
18. juni 2003 - 12:58
#22
Hehe .... jeg laver selv den fejl. Ikke hvergang - men hver anden eller tredie ;o)
18. juni 2003 - 13:37
#23
Nå, nu har jeg ændret i scriptet. Men kan kun ses i IE.
sådan her ser menuen ud nu.
http://denpei.dyndns.dk/exp/ (D)HTML/menu7.asp?menu=menu3Con
- Problemet nu er "bare" at den ikke vil folde sig ud.
Er der slet ikke nogen som kan hjælpe ?
18. juni 2003 - 13:52
#24
måske skulle du så bare bruge dit første script - det virkede bedre.
18. juni 2003 - 14:02
#25
jaeh, men det virkede ikke godt nok.
18. juni 2003 - 15:25
#26
Jeg tror faktisk at jeg er tæt på at få det hele til at virke. Men det er som om den bliver ved med at loope, kan nogen af jer se fejlen ? Her har i hele koden. <html> <head> <title>menu</title> <style> td{font-family:Verdana;} a{font-size:10px;color:#333333;text-decoration:none;} a:hover{color: #00C;text-decoration:underline;cursor:hand;} a.hovedpunkt{font-size:10px;font-weight:bold;color:#333333;text-decoration:underline;} a.hovedpunkt:hover{color: #00C;text-decoration:underline;cursor:hand;} td.menu{background-color:#FFFFFF;border-left:1px solid #C0C0C0;border-bottom:1px solid #C0C0C0;} .containers{ position:relative; top:0; left:5; display:none;width:150; z-index:4; overflow:hidden; } .Contents{position:relative; left:0;width:150;z-index:5;} #table2{position:absolute; left:0; top:20;} </style> <script type="text/javascript"> var i=-75;var q=-75;var oObj;var aktivmenu = "gemt";var aktiv = 0;var Obj;var Objectet; var Laengde; function lager(lagnavn) { var menus=new Array(3) menus[0]="menu1Con" menus[1]="menu2Con" menus[2]="menu3Con" for (i=0; i<3; i++){ if(lagnavn == menus[i]){ if (document.all[lagnavn].style.display == 'none') document.all[menus[i]].style.display = 'block'; Laengde = lagnavn.length-3; Obj = lagnavn.substring(0,Laengde); timer2 = setInterval("show2();",40); } else{document.all[menus[i]].style.display == 'none';q=-75;} }} function lage(lagnavn) { q=-75; var menus=new Array(3) menus[0]="menu1Con" menus[1]="menu2Con" menus[2]="menu3Con" for (i=0; i<3; i++){ if(lagnavn != menus[i]){if(aktivmenu != menus[i]){document.all[menus[i]].style.display == 'none'}} else{ document.all[lagnavn].style.display = 'block'; Laengde = lagnavn.length-3; Obj = lagnavn.substring(0,Laengde); timer2 = setInterval("show2();",40); }}} function hide(laget){document.all[laget].style.display = 'none';clearInterval(timer2)} function show2(){lagnavnet=Obj; if (q<0){q=q+5;document.all[lagnavnet].style.top=q;}} function show(){lagnavn=oObj; if (i<0){i=i+5;document.all[lagnavn].style.top=i;timer=setTimeout("show()",40)}} function lag(lagnavn) { if(aktivmenu != lagnavn){if (document.all[lagnavn].style.display == 'none'){ document.all[lagnavn].style.display = 'block';aktiv=1;} else{document.all[lagnavn].style.display = 'none';i=-75;aktiv=0;}}} //***************************Virker upåklageligt******************************* //***************************************************************************** function Loader(){ aktiver = self.location.search.substring(6) if (aktiver != ""){ strLen = aktiver.length+3; aktive = self.location.search.substring(6,strLen); oObj = aktive; show(); lag(aktiver); aktivmenu = aktiver; }} //***************************************************************************** </script> </head> <body leftmargin="0" topmargin="0" marginwidth="0" marginheight="0" onload="Loader();"> <TABLE border=0 cellPadding=0 cellSpacing=0 width=141 id="table2"> <tr><TD width="141"> <div id="contain"><table><tr> <%if request("menu") = "menu1Con" Then%> <td class=haand> <%else%> <td class=haand onmouseover="lage('menu1Con');" onmouseout="hide('menu1Con');"> <%end if%> <a href="menu7.asp?menu=menu1Con" class="hovedpunkt" target="_parent">Overpunkt</a> <div name="menu1Con" id="menu1Con" style="display:none;clip:rect(0 150 65 0);height: 65;" class="containers"> <div name="menu1" id="menu1" class="contents" style=" top:-65;"> <table width="100%" border="0" cellspacing="0" rowspacing="0"> <tr><td class="menu"><a href="menu7.asp?menu=menu1Con" target="_parent">Underpunkt</a></td></tr> <tr><td class="menu"><a href="menu7.asp?menu=menu1Con" target="_parent">Underpunkt</a></td></tr> <tr><td class="menu"><a href="menu7.asp?menu=menu1Con" target="_parent">Underpunkt</a></td></tr> <tr><td class="menu"><a href="menu7.asp?menu=menu1Con" target="_parent">Underpunkt</a></td></tr> </table> </div></div> </TD></tr></table></div> </TD></tr> <tr><TD width="141"> <div id="contain"><table><tr> <%if request("menu") = "menu2Con" Then%> <td class=haand> <%else%> <td class=haand onmouseover="lage('menu2Con');" onmouseout="hide('menu2Con')"> <%end if%> <a href="menu7.asp?menu=menu2Con" class="hovedpunkt" target="_parent">Overpunkt</a> <div name="menu2Con" id="menu2Con" style="display:none;clip:rect(0 150 45 0);height:55; " class="containers"> <div name="menu2" id="menu2" class="contents" style=" top:-45;"> <table width="100%" border="0" cellspacing="0" rowspacing="0"> <tr><td class="menu"><a href="menu7.asp?menu=menu2Con" target="_parent">Underpunkt</a></td></tr> <tr><td class="menu"><a href="menu7.asp?menu=menu2Con" target="_parent">Underpunkt</a></td></tr> <tr><td class="menu"><a href="menu7.asp?menu=menu2Con" target="_parent">Underpunkt</a></td></tr> </table> </div></div> </TD></tr></table></div> </TD></tr> <tr><TD width="141"> <div id="contain"><table><tr> <%if request("menu") = "menu3Con" Then%> <td class=haand> <%else%> <td class=haand onmouseover="lage('menu3Con');" onmouseout="hide('menu3Con')"> <%end if%> <a href="menu7.asp?menu=menu3Con" class="hovedpunkt" target="_parent">Overpunkt</a> <div name="menu3Con" id="menu3Con" style="display:none;clip:rect(0 150 45 0);height:40; " class="containers"> <div name="menu3" id="menu3" class="contents" style=" top:-45;"> <table width="100%" border="0" cellspacing="0" rowspacing="0"> <tr><td class="menu"><a href="menu7.asp?menu=menu3Con" target="_parent">Underpunkt</a></td></tr> <tr><td class="menu"><a href="menu7.asp?menu=menu3Con" target="_parent">Underpunkt</a></td></tr> </table> </div></div> </TD></tr></table></div> </TD></tr> <!--Menu lag | Start--> <div id="gemt"> </div> <!--Menu lag | DO NOT DELETE THIS--> </body> I kan bare fjerne det der asp kode som er med...
18. juni 2003 - 15:26
#27
funktionen lager() er ikke i brug den kan i også bare slette.
18. juni 2003 - 16:05
#28
bruger du show() til noget - eller er det meningen at den bliver kaldt nede i Loader()? Skal du ikke lave timer2 global, sådan at funktionen hide() kan slette intervallet?
18. juni 2003 - 16:24
#29
jo det ku nok være en god ide. Ja jeg bruger show() nede i Loader(), og den virker fint så nu har jeg sepereret det. Så jeg kan finde fejlen i den anden.
18. juni 2003 - 17:06
#30
Jeg har fundet ud af at det hele skyldes noget med den onmouseover/out som nulstiller q. Det gør åbenbart at den tror at musen er ude over cellen, selvom den ikke er.
18. juni 2003 - 19:06
#31
Nå, det lykkedes mig rent faktisk at få menuen til at virke. skovenborg du får 30 point får din indsats. Resten nupper jeg.
18. juni 2003 - 19:07
#32
Jeg kom til at afvise kan du ikke lige smide et ny svar ?
18. juni 2003 - 19:15
#33
Okay, kunne du ikke også sige hvordan du gjorde - jeg har selv prøvet en hel del.
18. juni 2003 - 19:30
#34
Jo det kunne jeg da godt. Jeg løste problemet ved at lave en variabel som blev ændret hver gang man gik til et nyt menupunkt. På den måde kunne jeg sikre mig at menuen ikke loopede flere gange samme sted med en simpel lille if(variabel != lagnavn){vis menu}.
Vi tilbyder markedets bedste kurser inden for webudvikling