Avatar billede nat Nybegynder
12. november 2004 - 10:59 Der er 9 kommentarer og
1 løsning

vertical dropdownmenu viser undermenuer fra start

Jeg har en vertical dropdownmenu, der benytter CSS og javascript.
Mit problem er at alle undermenuer bliver vist fra start, og det skal de ikke

Her er den generede kode:

____________________________________________________________                   
<style>

#menuholder LI
{
    DISPLAY: block;
    FONT-WEIGHT: bold;
    FONT-SIZE: 12px;
    COLOR: #000000;
    MARGIN-BOTTOM: 0px;
    MARGIN-RIGHT: 0px;
    MARGIN-TOP: 0px;
    FONT-FAMILY: Verdana, Arial, Sans-Serif;
    FLOAT: left;
    WIDTH: 100%;
}
#menuholder UL
{
    border: #DDD9A7 1px solid;/*sætter border på drop-ud menuen*/
    padding: 0px 0px 0px 0px;
    MARGIN-TOP: 0px;
    MARGIN-BOTTOM: 0px;
    MARGIN-RIGHT: 0px;
    COLOR: #000000;
    FONT-WEIGHT: bold;
    FONT-SIZE: 12px;
    FONT-FAMILY: Verdana, Arial, Sans-Serif;
    DISPLAY: block;
    WIDTH: 220px; /*bredden på drop-ud menuen*/
}

.invisible
{
    MARGIN-TOP: -15px; /*rykker drop-ud menuen op eller ned, jo større plus ned, jo større minus op*/
    MARGIN-LEFT: 130px;/*rykker drop-ud menuen ud til højre*/
    POSITION: absolute;
    DISPLAY: none;
}

#menuholder LI A
{
    padding: 2px 2px 2px 2px;
    FONT-FAMILY: Verdana, Arial, Sans-Serif;
    FONT-WEIGHT: bold;
    FONT-SIZE: 12px;
    WIDTH: 100%;
    COLOR: #000000;
    TEXT-DECORATION: none;
}
.submenu
{
    PADDING-RIGHT: 5px;
    PADDING-LEFT: 20px;/*rykker teksten i drop-ud menuen til højre*/
    PADDING-BOTTOM: 2px;
    PADDING-TOP: 10px;/*afstanden mellem top og punkter samt mellem menu punkterne, kan også bruge line-height*/
    TEXT-DECORATION: none;
    text-align: left;
    FONT-FAMILY: Verdana, Arial, Sans-Serif;
    FONT-WEIGHT: bold;
    FONT-SIZE: 12px;
    COLOR: #000000;
    WIDTH: 100%;
    BACKGROUND-COLOR: #F4F2E6; /*baggrundsfarven på den uddroppede menu*/
    /*Gør dropout menuen gennemsigtig*/
    position: relative;
    z-index:1000;
    filter: alpha(opacity=90);
    /*Gør dropout menuen gennemsigtig slut*/
   
}
#menuholder LI A:hover
{
    COLOR: #000000;
}

#menuholder A.hassubmenu
{
    BACKGROUND-POSITION: 128px 7px;   
}
.menuclass
{   
    border: 0px 0px 0px 0px;
    FLOAT: right;
    MARGIN: 1px 1px 100%;
}

</style>
<NOINDEX>
    <table id=menuholder cellSpacing="0" cellPadding="0" width="190" border="0">
        <tr>
            <td align="left" valign="top">
                <UL class="menuclass">
                   
                            <li>
                                <button class=button onclick="navigate('/site/test/Test1/TestTest2/');" onfocus=blur()><a href="/site/test/Test1/" OnClick="SubMenuLink_OnClick" onmouseover="showSubMenu()" Runat=server>Test1</a></button>
                                <br>
                                <img class="usynligt" height="2px">
                                <UL class="invisible">
                                   
                                            <li><a href=/site/test/Test1/TestTest1/ Class='submenu' Runat=server>TestTest1</a></li>
                                       
                                            <li><a href=/site/test/Test1/TestTest2/ Class='submenu' Runat=server>TestTest2</a></li>
                                       
                                </UL>
                            </li>
                       
                            <li>
                                <button class=button onclick="navigate('/site/test/Test2/');" onfocus=blur()><a href="/site/test/Test2/" OnClick="SubMenuLink_OnClick" onmouseover="showSubMenu()" Runat=server>Test2</a></button>
                                <br>
                                <img class="usynligt" height="2px">
                                <UL class="invisible">
                                   
                                </UL>
                            </li>
                       
                            <li>
                                <button class=button onclick="navigate('/site/test/Test3/TestTest1/');" onfocus=blur()><a href="/site/test/Test3/" OnClick="SubMenuLink_OnClick" onmouseover="showSubMenu()" Runat=server>Test3</a></button>
                                <br>
                                <img class="usynligt" height="2px">
                                <UL class="invisible">
                                   
                                            <li><a href=/site/test/Test3/TestTest1/ Class='submenu' Runat=server>TestTest1</a></li>
                                       
                                </UL>
                            </li>
                       
                </UL>
            </td>
        </tr>
    </table>
</NOINDEX>
<script language="javascript">
function showSubMenu()
{
    var objThis = this;   
   
    for(var i = 0; i < objThis.childNodes.length; i++)
    {
       
        if(objThis.childNodes.item(i).nodeName == "UL")
        {                           
            // only show block if there are items
            if (objThis.childNodes.item(i).innerHTML!="")
            {
            objThis.childNodes.item(i).style.display = "block";                       
            }
        }       
    }   
}

function hideSubMenu()
{                               
    var objThis = this;   
   
    for(var i = 0; i  < objThis.childNodes.length; i++)           
    {
        if(objThis.childNodes.item(i).nodeName == "UL")
        {               
            objThis.childNodes.item(i).style.display = "none";           
            return;
        }           
    }   
}           

function initialiseMenu()
{
    var objLICollection = document.getElementById('menuholder').getElementsByTagName("LI");       
   
    for(var i = 0; i < objLICollection.length; i++)
    {       
        var objLI = objLICollection[i];                                       
        for(var j = 0; j  < objLI.childNodes.length; j++)
        {
           
            if(objLI.childNodes.item(j).nodeName == "UL")
            {
                objLI.onmouseover=showSubMenu;
                objLI.onmouseout=hideSubMenu;
                for(var j = 0; j  < objLI.childNodes.length; j++)
                {
                    if(objLI.childNodes.item(j).nodeName == "A")
                    {                   
                       
                        objLI.childNodes.item(j).className = "hassubmenu";                               
                    }
                }
            }
        }
    }
}


</script>

____________________________________________________________

Kan nogen hjælpe?
Avatar billede skovenborg Nybegynder
12. november 2004 - 19:17 #1
umiddelbart ser det bare ud som om du skal tilføje:
display:none;
til din .submenu-klasse.
Avatar billede skovenborg Nybegynder
12. november 2004 - 20:33 #2
næ, undskyld - hvis det virkelig skal løses skal du (ud over at slette display:none; fra .submenu-klassen) ændre din invisible-klasse til:
.invisible
{
    MARGIN-TOP: -15px; /*rykker drop-ud menuen op eller ned, jo større plus ned, jo større minus op*/
    MARGIN-LEFT: 130px;/*rykker drop-ud menuen ud til højre*/
    POSITION: absolute;
    visibility:hidden;
}

Derudover kan du så ændre lidt på dit script:
function showSubMenu(objThis)
{

    for(var i = 0; i < objThis.childNodes.length; i++)
    {
        if(objThis.childNodes.item(i).nodeName == "UL")
        {
            // only show block if there are items
            if (objThis.childNodes.item(i).innerHTML!="")
            {
            objThis.childNodes.item(i).style.visibility = "visible";
            }
        }     
    } 
}

function hideSubMenu(objThis)
{
    for(var i = 0; i  < objThis.childNodes.length; i++)
    {
        if(objThis.childNodes.item(i).nodeName == "UL")
        {             
            objThis.childNodes.item(i).style.visibility = "hidden";
            return;
        }         
    }

hvorefter du så også skal ændre lidt på dit script - jeg kunne i hvert fald ikke få det til at virke på andre måder:
<UL class="menuclass">
                 
                            <li>
                                <button class=button onclick="navigate('/site/test/Test1/TestTest2/');"  onmouseover="showSubMenu(this.parentNode)" onmouseout="hideSubMenu(this.parentNode);" onfocus=blur()><a href="/site/test/Test1/" OnClick="SubMenuLink_OnClick"  Runat=server>Test1</a></button>
                                <br>
                                <img class="usynligt" height="2px">
                                <UL class="invisible">
                                 
                                            <li><a href=/site/test/Test1/TestTest1/ Class='submenu' Runat=server>TestTest1</a></li>
                                     
                                            <li><a href=/site/test/Test1/TestTest2/ Class='submenu' Runat=server>TestTest2</a></li>
                                     
                                </UL>
                            </li>
                     
                            <li>
                                <button class=button onclick="navigate('/site/test/Test2/');"  onmouseover="showSubMenu(this.parentNode)" onmouseout="hideSubMenu(this.parentNode);" onfocus=blur()><a href="/site/test/Test2/" OnClick="SubMenuLink_OnClick" Runat=server>Test2</a></button>
                                <br>
                                <img class="usynligt" height="2px">
                                <UL class="invisible">
                                 
                                </UL>
                            </li>
                     
                            <li>
                                <button class=button onclick="navigate('/site/test/Test3/TestTest1/');"  onmouseover="showSubMenu(this.parentNode)" onmouseout="hideSubMenu(this.parentNode);" onfocus=blur()><a href="/site/test/Test3/" OnClick="SubMenuLink_OnClick" Runat=server>Test3</a></button>
                                <br>
                                <img class="usynligt" height="2px">
                                <UL class="invisible">
                                 
                                            <li><a href=/site/test/Test3/TestTest1/ Class='submenu' Runat=server>TestTest1</a></li>
                                     
                                </UL>
                            </li>
                     
                </UL>
Avatar billede skovenborg Nybegynder
12. november 2004 - 20:34 #3
den er ikke helt færdig, da, som du kan se, menuerne forsvinder på en temmelig dum måde. Men det var mere et eksempel på at vise/skjule menuerne. Desuden vidste jeg ikke helt hvordan menuerne skulle sættes og fungere, for står de ikke lidt mærkeligt, som man ser dem nu (altså ud fra din oprindelige kode)?
Avatar billede roenving Novice
13. november 2004 - 01:11 #4
Avatar billede nat Nybegynder
15. november 2004 - 09:43 #5
skovenborg: Hvad mener du med at de står mærkeligt? Som den (menuen) er nu, fungerer den fint, og mit oprindelige problem var (som du har selv har fundet udfra din seneste kommentar), at min verticale drop-ud menu benytter UL Li og derfor "ødelægger" andre layout mæssige ting.
Dette ville jeg uden om, og fik noget hjælp til, som også hjalp på det problem. Dog kom der et nyt - det jeg har her, nemlig at submenuerne er synlige fra start - og det er jo ikke normal adfær for en drop-ud menu... Så det ville jeg gerne have fikset. Derfor flyttede jeg spørgsmålet herover, da meget tyde på at det var et javascript problem mere end et css.
Det "kode" jeg har vist her, er den html-kode der bliver generet når det bliver kørt. Oprindeligt at menuen inde i en asp.net side.. Måske det er det du mener med at det står mærkeligt?
Avatar billede nat Nybegynder
15. november 2004 - 10:23 #6
Skovenborg: har nu afprøvet det du har lavet - og det fungerer ikke... Nu bliver submenuer bare slet ikke vist (og de kommer heller frem)
Avatar billede nat Nybegynder
15. november 2004 - 15:21 #7
okay - jeg har fundet ud af hvorfor at det ikke virkede i allerførste omgang. Så mit spørgsmål er ikke længere aktuelt.
Hvis du vil have pointne, så smid lige et svar skovenborg.
Også dig roenving eftersom at noget fra dit første svar, rent faktisk var med til løsningen. Der skulle ID på, det skulle bare sættes rigtigt i css'en, ellers fungerer det ikke (fx. have jeg skrevet: #menuholder LI men man skal skrive LI#menuholder)
Avatar billede skovenborg Nybegynder
16. november 2004 - 01:13 #8
her er et svar så :-)

Og jo jeg havde testet det, hvor det umiddelbart virkede nogenlunde (som jeg sagde ikke perfekt). Det er dog muligt jeg ikke nåede at se løsningen i IE, og derfor kan det være tingene ser anderledes ud det. Det var bare sådan før at undermenuerne (i mozilla i hvert fald) lå temmelig langt fra menu-punkterne, hvilket jeg syntes så lidt mærkeligt ud. Men måske er det bare mig ;-)
Avatar billede nat Nybegynder
18. november 2004 - 08:54 #9
Giver lige roenving en dag til, ellers er alle pointne dine skovenborg
Avatar billede roenving Novice
18. december 2004 - 22:50 #10
Jeg har desværre ikke haft så meget tid til E* siden starten af november, men els velbekomme !-)
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