Avatar billede -master-d- Nybegynder
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å..)
Avatar billede skovenborg Nybegynder
17. juni 2003 - 16:46 #1
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)?
Avatar billede -master-d- Nybegynder
17. juni 2003 - 16:53 #2
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...
Avatar billede -master-d- Nybegynder
17. juni 2003 - 16:54 #3
Prøv igen nu.
Avatar billede skovenborg Nybegynder
17. juni 2003 - 17:10 #4
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 :)
Avatar billede skovenborg Nybegynder
17. juni 2003 - 17:10 #5
undskyld det var ikke der men ved hide();
Avatar billede -master-d- Nybegynder
17. juni 2003 - 17:12 #6
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.
Avatar billede skovenborg Nybegynder
17. juni 2003 - 17:12 #7
samt show(); det er der hvor den melder fejl
Avatar billede -master-d- Nybegynder
17. juni 2003 - 17:17 #8
Nu virker menuen da slet ikke, det kan jeg da godt se, hmmm...
Avatar billede skovenborg Nybegynder
17. juni 2003 - 17:20 #9
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
Avatar billede -master-d- Nybegynder
17. juni 2003 - 17:27 #10
Nej det virker heller ikke.
Avatar billede -master-d- Nybegynder
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>
Avatar billede skovenborg Nybegynder
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;
Avatar billede skovenborg Nybegynder
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.
Avatar billede skovenborg Nybegynder
17. juni 2003 - 18:22 #14
Det sidste er dog kun i mozilla - IE virker sådan cirka ligesom det gjorde før.
Avatar billede -master-d- Nybegynder
17. juni 2003 - 18:51 #15
okay, tak.
Avatar billede skovenborg Nybegynder
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.
Avatar billede roenving Novice
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)
Avatar billede olebole Juniormester
18. juni 2003 - 11:30 #18
<ole>

Men så skal vi lige have enkelte gåseøjne inde i de dobbelte  ;o)

/mvh
</bole>
Avatar billede roenving Novice
18. juni 2003 - 12:28 #19
>>ole
der er kun eet niveau ...
Avatar billede olebole Juniormester
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
Avatar billede roenving Novice
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)
Avatar billede olebole Juniormester
18. juni 2003 - 12:58 #22
Hehe .... jeg laver selv den fejl. Ikke hvergang - men hver anden eller tredie  ;o)
Avatar billede -master-d- Nybegynder
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 ?
Avatar billede skovenborg Nybegynder
18. juni 2003 - 13:52 #24
måske skulle du så bare bruge dit første script - det virkede bedre.
Avatar billede -master-d- Nybegynder
18. juni 2003 - 14:02 #25
jaeh, men det virkede ikke godt nok.
Avatar billede -master-d- Nybegynder
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">&nbsp;</div>
<!--Menu lag | DO NOT DELETE THIS-->

</body>

I kan bare fjerne det der asp kode som er med...
Avatar billede -master-d- Nybegynder
18. juni 2003 - 15:26 #27
funktionen lager() er ikke i brug den kan i også bare slette.
Avatar billede skovenborg Nybegynder
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?
Avatar billede -master-d- Nybegynder
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.
Avatar billede -master-d- Nybegynder
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.
Avatar billede -master-d- Nybegynder
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.
Avatar billede -master-d- Nybegynder
18. juni 2003 - 19:07 #32
Jeg kom til at afvise kan du ikke lige smide et ny svar ?
Avatar billede skovenborg Nybegynder
18. juni 2003 - 19:15 #33
Okay, kunne du ikke også sige hvordan du gjorde - jeg har selv prøvet en hel del.
Avatar billede -master-d- Nybegynder
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}.
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

Zealand Business College

Faglærer til Data/IT på ZBC i Ringsted

Netcompany A/S

Network Engineer

Forsvarets Efterretningstjeneste

Network engineer - Routing & Switching

Capgemini Danmark A/S

AI Data Architect

KMD A/S

Projektleder