Avatar billede gregorian Nybegynder
13. september 2003 - 14:07 Der er 40 kommentarer og
1 løsning

H: hide/show funktion til en dropdownmenu

har siddet og kan ikek hitte ud af hvordan jeg nu skal gøre. jeg skal lave en dropdown-menu som viser nogle billeder, i en række under menupunkte, når musen trækkes henover. den række skal skjules igen når musen trækkes væk fra enten menupunktet eller undermenupunkteterne.

lige nu kan jeg kun få den til at skjule når jeg trækker musen henover igen, desværre, så tænkte på om i kunne hjælpe mig her.

eksempel: http://www.gregorian.dk/htx/index5.php

koden indtil videre:

<script language="JavaScript" type="text/JavaScript">
function DropDown (id,antal) {
    for(i=0;antal>i;i++){
        idx = id + i;
        if (!document.all && document.getElementById) {   
            menu = document.getElementById(idx).style;
        } else if(document.all && document.getElementById) {           
            menu = document.all(idx).style;
        } else {    // !IE5 && !NS6
            return false;
        }
        if (menu.visibility == 'hidden') {
            menu.display = '';
            menu.visibility = 'visible';
        } else {
            menu.display = 'none';
            menu.visibility = 'hidden';
        }
    }
}
</script>
<HTML>
<HEAD>
<TITLE>ide1</TITLE>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
</HEAD>
<BODY background="gif/bg2.gif" LEFTMARGIN=50 TOPMARGIN=0 MARGINWIDTH=0 MARGINHEIGHT=0>
<TABLE WIDTH=762 height=""  background="gif/bg.gif" BORDER=0 CELLPADDING=0 CELLSPACING=0 style="border=1px #7F99B2 solid;">
    <TR>
      <TD width="762" height="16" valign="top">
      <img src="menu/Untitled-1_01.gif" width="83" height="15" border="0" OnMouseOver="DropDown('årgange',3);">
      <img src="menu/Untitled-1_02.gif" OnMouseOver="DropDown('udd',2);" width="124" height="15">
      <img src="menu/Untitled-1_03.gif" width="171" height="15">
      <img src="menu/Untitled-1_04.gif" width="116" height="15"> 
    <TR>
        <TD height="21" valign="top">
        <img src="menu/Untitled-1_09.gif" id="udd0" style="display:none; visibility: hidden" width="83" height="13">
        <img src="menu/Untitled-1_08.gif" id="udd1" style="display:none; visibility: hidden" width="157" height="13">
        <img src="menu/Untitled-1_06.gif" id="årgange0" style="display:none; visibility: hidden" width="139" height="13">
        <img src="menu/Untitled-1_07.gif" id="årgange1" style="display:none; visibility: hidden" width="139" height="13">
        <img src="menu/Untitled-1_08.gif" id="årgange2" style="display:none; visibility: hidden" width="157" height="13">
    </table>
</BODY>
</HTML>

(tag jer ikke af mellemrummende mellem billederne, selvom det ikke er meningen )


tak på forhånd!
Avatar billede cdc Novice
13. september 2003 - 14:18 #1
har du prøvet med en onMouseOut
Avatar billede gregorian Nybegynder
13. september 2003 - 14:36 #2
ja men koden i javascriptes skal ændres
Avatar billede roenving Novice
13. september 2003 - 15:32 #3
Bortset fra at du laver for meget skal javascript-koden ikke ændres ...

function DropDown (id,antal) {
    for(i=0;antal>i;i++){
        idx = id + i;
        if (document.getElementById) {   
            menu = document.getElementById(idx).style;
        } else {    // !IE5 && !NS6
            return false;
        }
        if (menu.visibility == 'hidden') {
            menu.display = '';
            menu.visibility = 'visible';
        } else {
            menu.display = 'none';
            menu.visibility = 'hidden';
        }
    }
}

Og så:

      <img src="menu/Untitled-1_02.gif" OnMouseOver="DropDown('udd',2);" OnMouseOut="DropDown('udd',2);" width="124" height="15">
Avatar billede gregorian Nybegynder
13. september 2003 - 16:19 #4
den kan jeg godt se.. men hvad så når man trækker musen væk fra billedet (uddannelsen) så bliver menuen der ikke når man trækker den over de andre små pics.!
Avatar billede gregorian Nybegynder
13. september 2003 - 16:22 #5
mangler en form for forsinkelse på det hele..
Avatar billede gregorian Nybegynder
13. september 2003 - 17:34 #6
http://www.gregorian.dk/htx/index5.php

prøv lige at se hvordan den opfører sig.. mangler det at den skal forblive synlig når man tager musen over den nye menu som jo bliver vist.
Avatar billede roenving Novice
13. september 2003 - 19:43 #7
Okay, jeg ville personligt skille funktionerne ad:

function DropDown (id,antal,action) {
    for(i=0;antal>i;i++){
        idx = id + i;
        if (document.getElementById) {   
            menu = document.getElementById(idx).style;
        } else {    // !IE5 && !NS6
            return false;
        }
        if (action == 'in') {
            menu.display = '';
            menu.visibility = 'visible';
        } else {
            menu.display = 'none';
            menu.visibility = 'hidden';
        }
    }
}

Og så:

      <img src="menu/Untitled-1_02.gif" OnMouseOver="DropDown('udd',2,'in');" OnMouseOut="DropDown('udd',2,'out');" width="124" height="15">
Avatar billede gregorian Nybegynder
14. september 2003 - 12:19 #8
meget logisk ja.. men den skal jo virke som en dropdownmenu, så den undermenu som kommer frem skal jo blive der.. ikke bare forsvinde ved onmouseout..

kig der hvordan den opfører sig: http://www.gregorian.dk/htx/index5.php
Avatar billede gregorian Nybegynder
14. september 2003 - 12:31 #9
siden er nede kan jeg se ;(

RoenVing.. kan du hjælpe med at putte en form for tids forsinkelse på, hvor der skal være en chance for ½ sek til at trække musen over den menu som kommer frem, til at den skjuler den igen?
Avatar billede roenving Novice
14. september 2003 - 12:48 #10
var timeoutId=0;
var active=0;
var activeId="";
function DropDown (id,antal,action) {
    if (!document.getElementById)return false;
    if(!timeoutId==0)
        clearTimeout(timeoutId);
    timeoutId=0;
    if (action != 'in') {
        timeoutId = setTimeOut('hideDropDown',500);
        active = antal;
        activeId = id;
    } else {
        for(i=0;antal>i;i++){
            idx = id + i;
            menu = document.getElementById(idx).style;
            menu.display = '';
            menu.visibility = 'visible';
        }
    }
}

function hideDropDown() {
    timeoutId=0;
    for(i=0;antal>i;i++){
        idx = id + i;
        menu = document.getElementById(idx).style;
        menu.display = 'none';
        menu.visibility = 'hidden';
    }
}

function delayHide(){
    if(!timeoutId==0)
        clearTimeout(timeoutId);
    timeoutId=0;
}

-- så skal du på undermenuerne også kalde DropDown('udd',2,'in');

-- jeg droppede at bruge delayHide, men nu stod den der, og jeg kunne ikke lige overskue, om du måske fik brug for den !-)
Avatar billede gregorian Nybegynder
14. september 2003 - 12:53 #11
fejl i linie 11.
Avatar billede gregorian Nybegynder
14. september 2003 - 12:54 #12
timeoutId = setTimeOut('hideDropDown',500);
Avatar billede roenving Novice
14. september 2003 - 12:55 #13
Hov:

function hideDropDown() {
    timeoutId=0;
    for(i=0;active>i;i++){
        idx = activeId + i;
        menu = document.getElementById(idx).style;
        menu.display = 'none';
        menu.visibility = 'hidden';
    }
}
Avatar billede roenving Novice
14. september 2003 - 12:56 #14
Talte lige anderledes, men der er ofte linjetællingsforskelle, så jeg fandt jo en anden fejl ...
Der mangler funktionsparanteser:
timeoutId = setTimeOut('hideDropDown()',500);
Avatar billede gregorian Nybegynder
14. september 2003 - 12:59 #15
Avatar billede gregorian Nybegynder
14. september 2003 - 13:09 #16
skal de rikke være klammer her?

    if(!timeoutId==0)
        clearTimeout(timeoutId);
        timeoutId=0;
Avatar billede roenving Novice
14. september 2003 - 13:11 #17
Den havde jeg ikke lige overvejet ...

Prøv en gang med:

var timeoutId = new Array();
for(i=0;4>i;i++)timeoutId[i]=0;

og så:
    if(!timeoutId[antal]==0)
        clearTimeout(timeoutId[antal]);

    if (action != 'in') {
        timeoutId[antal] = setTimeOut('hideDropDown()',500);

og

function hideDropDown() {
    timeoutId[active]=0;

-- du skal lige checke, at der ikke kommer konflikter andre steder, måske må du finde et andet navngivningsskema for at få det til at virke !-)
Avatar billede roenving Novice
14. september 2003 - 13:16 #18
Nej, ingen klammer behøves, da den under alle omstændigheder skal være 0, så er det ligegyldigt om den er det i forvejen !-)


Men en lille fejl:
    if(!timeoutId[antal]==0)
        clearTimeout(timeoutId[antal]);
    timeoutId[antal]=0;
Avatar billede gregorian Nybegynder
14. september 2003 - 13:17 #19
hvad skal erstattes? kan ikke lige s det
Avatar billede gregorian Nybegynder
14. september 2003 - 13:19 #20
er det:
    if(!timeoutId==0)
        clearTimeout(timeoutId);
      timeoutId=0;
Avatar billede gregorian Nybegynder
14. september 2003 - 13:20 #21
den laver stadigvæk fejl ved onmouseout fra hovedmenuen
Avatar billede roenving Novice
14. september 2003 - 13:23 #22
var timeoutId = new Array();
for(i=0;4>i;i++)timeoutId[i]=0;
var active=0;
var activeId="";
function DropDown (id,antal,action) {
    if (!document.getElementById)return false;
    if(!timeoutId[antal]==0)
        clearTimeout(timeoutId[antal]);
    timeoutId[antal]=0;
    if (action != 'in') {
        timeoutId[antal] = setTimeOut('hideDropDown()',500);
        active = antal;
        activeId = id;
    } else {
        for(i=0;antal>i;i++){
            idx = id + i;
            menu = document.getElementById(idx).style;
            menu.display = '';
            menu.visibility = 'visible';
        }
    }
}

function hideDropDown() {
    timeoutId[active]=0;
    for(i=0;active>i;i++){
        idx = activeId + i;
        menu = document.getElementById(idx).style;
        menu.display = 'none';
        menu.visibility = 'hidden';
    }
}
Avatar billede gregorian Nybegynder
14. september 2003 - 13:33 #23
heller ikke.

roenving - skal på arb nu, så kan ikke svare her før om 9 timer , desværre.
skriver lige i aften i den her tråd...
;) tak indtil videre.. tror ikke selv jeg havde fundet ud af den her delay function,
Avatar billede roenving Novice
14. september 2003 - 13:39 #24
Jeg vil lige prøve at kigge lidt, men jeg har ikke villet hente billederne, så ...

Men du har en alvorlig fejl, som hedder å

Danske bogstaver må _ikke_ bruges i javascript-identifikatorer !-)
Avatar billede roenving Novice
14. september 2003 - 13:46 #25
<HTML>
<HEAD>
<TITLE>ide1</TITLE>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
<script language="JavaScript" type="text/JavaScript">
var timeoutId = new Array();
for(i=0;4>i;i++)timeoutId[i]=0;
var active=0;
var activeId="";
function DropDown (id,antal,action) {
    if (!document.getElementById)return false;
    if(!timeoutId[antal]==0)
        clearTimeout(timeoutId[antal]);
    timeoutId[antal]=0;
    if (action != 'in') {
        timeoutId[antal] = setTimeout('hideDropDown()',100);
        active = antal;
        activeId = id;
    } else {
        for(i=0;antal>i;i++){
            idx = id + i;
            menu = document.getElementById(idx).style;
            menu.display = '';
            menu.visibility = 'visible';
        }
    }
}

function hideDropDown() {
    timeoutId[active]=0;
    for(i=0;active>i;i++){
        idx = activeId + i;
        menu = document.getElementById(idx).style;
        menu.display = 'none';
        menu.visibility = 'hidden';
    }
}
</script>
</HEAD>
<BODY background="gif/bg2.gif" LEFTMARGIN=50 TOPMARGIN=0 MARGINWIDTH=0 MARGINHEIGHT=0>
<TABLE WIDTH=762 height=""  background="gif/bg.gif" BORDER=0 CELLPADDING=0 CELLSPACING=0 style="border=1px #7F99B2 solid;">
    <TR>
      <TD width="762" height="16" valign="top">
      <img src="menu/Untitled-1_01.gif" width="83" height="15" border="0" OnMouseOver="DropDown('aargange',3,'in')" OnMouseOut="DropDown('aargange',3,'out');">
      <img src="menu/Untitled-1_02.gif" OnMouseOver="DropDown('udd',2,'in');" OnMouseOut="DropDown('udd',2,'out');" width="124" height="15">
      <img src="menu/Untitled-1_03.gif" width="171" height="15">
      <img src="menu/Untitled-1_04.gif" width="116" height="15"> 
    <TR>
        <TD height="21" valign="top">
        <img src="menu/Untitled-1_09.gif" id="udd0" OnMouseOver="DropDown('udd',2,'in');" OnMouseOut="DropDown('udd',2,'out');" style="display:none; visibility: hidden" width="83" height="13">
        <img src="menu/Untitled-1_08.gif" id="udd1" OnMouseOver="DropDown('udd',2,'in');" OnMouseOut="DropDown('udd',2,'out');" style="display:none; visibility: hidden" width="157" height="13">
        <img src="menu/Untitled-1_06.gif" id="aargange0" OnMouseOver="DropDown('aargange',3,'in');" OnMouseOut="DropDown('aargange',3,'out');" style="display:none; visibility: hidden" width="139" height="13">
        <img src="menu/Untitled-1_07.gif" id="aargange1" OnMouseOver="DropDown('aargange',3,'in');" OnMouseOut="DropDown('aargange',3,'out');" style="display:none; visibility: hidden" width="139" height="13">
        <img src="menu/Untitled-1_08.gif" id="aargange2" OnMouseOver="DropDown('aargange',3,'in');" OnMouseOut="DropDown('aargange',3,'out');" style="display:none; visibility: hidden" width="157" height="13">
    </table>
</BODY>
</HTML>
Avatar billede gregorian Nybegynder
14. september 2003 - 22:41 #26
http://www.gregorian.dk/htx/index5.php

ej hvor lækkert man. ;) - det virker.
dog et lille problem nu, som jeg måske ikke helt havde tænkt over.. når man går fra et menupunkt til et andet, går der jo stadigvæk 0,5 sek før den fjerner det gamle, men viser det nu med det samme:

burde der ikke være en delay på 0,5 sek på at vise menupunktet så?
eller er der en bedre løsning på det?
tjek linket.
Avatar billede roenving Novice
14. september 2003 - 22:52 #27
Næh, den skal fjernes som en del af processen (og jeg har forøvrigt sat den ned til 1/10-del sekund !-)

-- kigger lige på det !-)
Avatar billede gregorian Nybegynder
14. september 2003 - 22:53 #28
så jeg faktisk godt.. meget bedre timing.
takker
Avatar billede roenving Novice
14. september 2003 - 23:04 #29
Den gør godt nok tingene et par gange for meget men med 4 menuer vil ingen opdage det !-)

Bemærk, at menus-variablen skal udfyldes -- håber du kan gennemskue hvordan -- når du aktiverer resten af menuerne !-)

<script language="JavaScript" type="text/JavaScript">
var timeoutId = new Array();
for(i=0;4>i;i++)timeoutId[i]=0;
var active=0;
var activeId="";
var menus = [['udd',2],['aargange',3]];
function DropDown (id,antal,action) {
    if (!document.getElementById)return false;
    if(!timeoutId[antal]==0)
        clearTimeout(timeoutId[antal]);
    timeoutId[antal]=0;
    if (action != 'in') {
        timeoutId[antal] = setTimeout('hideDropDown()',100);
        active = antal;
        activeId = id;
    } else {
            for(i=0;menus.length>i;i++){
                if(menus[i][0]!=id)hideDropDown(menus[i][0],menus[i][1]);
            }
        for(i=0;antal>i;i++){
            idx = id + i;
            menu = document.getElementById(idx).style;
            menu.display = '';
            menu.visibility = 'visible';
        }
    }
}

function hideDropDown(id,antal) {
        if(hideDropDown.arguments.length==2){
                act = antal;
                actId = id;
        }else{
                act = active;
                actId = activeId;
        }
    timeoutId[active]=0;
    for(i=0;act>i;i++){
        idx = actId + i;
        menu = document.getElementById(idx).style;
        menu.display = 'none';
        menu.visibility = 'hidden';
    }
}
</script>
Avatar billede roenving Novice
14. september 2003 - 23:07 #30
-- og så burde man jo:

<script language="JavaScript" type="text/JavaScript">
var active=0;
var activeId="";

var menus = [['udd',2],['aargange',3]];

var timeoutId = new Array();
for(i=0;menus.length>i;i++)timeoutId[menus[i][0]]=0;

function DropDown (id,antal,action) {
    if (!document.getElementById)return false;
    if(!timeoutId[id]==0)
        clearTimeout(timeoutId[id]);
    timeoutId[antal]=0;
    if (action != 'in') {
        timeoutId[id] = setTimeout('hideDropDown()',100);
        active = antal;
        activeId = id;
    } else {
            for(i=0;menus.length>i;i++){
                if(menus[i][0]!=id)hideDropDown(menus[i][0],menus[i][1]);
            }
        for(i=0;antal>i;i++){
            idx = id + i;
            menu = document.getElementById(idx).style;
            menu.display = '';
            menu.visibility = 'visible';
        }
    }
}

function hideDropDown(id,antal) {
        if(hideDropDown.arguments.length==2){
                act = antal;
                actId = id;
        }else{
                act = active;
                actId = activeId;
        }
    timeoutId[actId]=0;
    for(i=0;act>i;i++){
        idx = actId + i;
        //alert(idx);
        menu = document.getElementById(idx).style;
        menu.display = 'none';
        menu.visibility = 'hidden';
    }
}
</script>

Hæ, så burde den være der !-)
Avatar billede gregorian Nybegynder
14. september 2003 - 23:10 #31
;) så er den der ;) lækkert man..

hmm.. kan du se menuen. det mellemrum der er imellem top og undermenu.. hvorn i H fjerne jeg det.. har sat de pics ind i en tabel, hvor de vises jo..
har prøvet en hel del men kan ikke lige huske hvad mannu gør det.. den er tynd nu stregen men jeg vil godt have det sidste væk
Avatar billede gregorian Nybegynder
14. september 2003 - 23:10 #32
Avatar billede gregorian Nybegynder
14. september 2003 - 23:43 #33
har løst det.. tak roenving.. du er super.
kom en nogle svar så har du point ;) fandme lækkert..
kanon ;)))
Avatar billede roenving Novice
14. september 2003 - 23:51 #34
<style type="text/css">
table,img,tr,td{
margin:0px;
border:0px;
padding:0px;
border-collapse:collapse;
font-size:0px;
}
</style>

-- så er der kun en eneste pixel imellem, og jeg har ikke fundet den endnu !-)
Avatar billede roenving Novice
14. september 2003 - 23:51 #35
Bingo '-)
Avatar billede roenving Novice
14. september 2003 - 23:55 #36
Forøvrigt skal du lige ændre dit billede: Untitled-1_02.gif, så du staver uddannelsen rigtigt ,-)
Avatar billede gregorian Nybegynder
15. september 2003 - 14:08 #37
det er rigtigt ja ;) tak for hjælpen:
Avatar billede roenving Novice
15. september 2003 - 16:08 #38
-- og tak for points ;~}
Avatar billede gregorian Nybegynder
15. september 2003 - 19:42 #39
roenving..
har lidt problemer med at adde flere menuer..
delay frunctionen ser ikke ud at til at virke ordentligt. ;(
link: http://www.htx.gregorian.dk/index6.php

kan du lige forklare mig hvad jeg har gjort galt her?
Avatar billede gregorian Nybegynder
15. september 2003 - 22:29 #40
roenving.. fandt fejlen i det hele ;).
ligemeget med alt det der.. tak for hjælpen igen så.
Avatar billede gregorian Nybegynder
15. september 2003 - 23:48 #41
eller nej... skal tilføje flere menuerpunkter til scriptet.. HOW!!
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