Avatar billede mikkel_strack Nybegynder
22. april 2004 - 04:19 Der er 12 kommentarer og
1 løsning

Foldeud menu - undgå rettehelvede

Jeg har sån' en foldeud menu på min side. Bruger ikke frames el. iframes, så derfor har jeg menukoden på samtlige sider.

Problemet opstår hvis jeg skal rette i menuen (fx tilføje nyt menupunkt) - så skal jeg rette på samtlige sider, hvilket ik er så skide spændende.

Er der nogen måder hvorpå man kan undgå dette?? Jeg tænker på om det fx. er muligt at linke sin menu fra en ekstern fil ind i en celle.....eller noget helt andet???

Mvh. Mikkel
Avatar billede fixxxer Nybegynder
22. april 2004 - 05:14 #1
Nu kender jeg ikke din menu, men hvis du ikke har adgang til server-side programmering kan du lave en js-fil med indhold ala:

document.write('MENU');

og inkludere det sted på alle dine sider med <script src="menuindhold.js"></script>

Hvis du tør opgive noget af din kode kan jeg lave dig et mere konkret eksempel
Avatar billede mikkel_strack Nybegynder
22. april 2004 - 13:01 #2
Jeg har lavet en miniudgave af min mennu - beklager at koden er lidt grim, men det burde fremgå hvilke del af koden jeg gerne vil ha ud.
Håber du eller en anden kan hjælpe mig :o)

Mvh. Mikkel
************
<html>
<head>

<link rel="stylesheet" href="artikel.css" type="text/css">
<script>
ids = {                // undermenuer for hvert menupunkt
      rod: new Array( "menu1" )
      };

idObj = new Object();  // bruges til at huske de anvendte HTML-elementer

menuOff = false;    // sættes sand for NS4 og evt andre browsere der ikke
                    // understøtter denne menu
function hentId( id, menu ) {
    if ( document.getElementById )
        idObj[id] = document.getElementById(id);
    else if ( document.all )
        idObj[id] = document.all[id];
    if ( idObj[id] ) {
        return idObj[id];
    } else {
        alert( "denne browser kan ikke håndtere menuen korrekt." );
        menuOff = true;
        return null;
    }
}; //end hentId( string ) -> HTNL element

function fold( id, parentMenu ) {  // folder menupunkter ind og ud
    if ( menuOff || ! parentMenu ) return;

    var menu = ids[parentMenu];
    for (var i = 0; menu.length > i; i++) {

        var el = idObj[menu[i]] || hentId(menu[i]);
        if ( ! el ) return;
        if ( menu[i]==id && el.style.display=="none" ) {
            el.style.display =  "block";
        } else {
            if ( ids[menu[i]] ) fold( "alle", menu[i] );
                        // luk alle undermenuer til denne
            el.style.display = "none";
        }

    }
}; //end fold( string, string )

</SCRIPT>
<script language="JavaScript">
  function co(element,mode) {
    if (mode=="in") {
      cursortype = 'hand'
      colorval = '#6699cc'
    } else if (mode=="out") {
      cursortype = ''
      colorval = '#666666'
    }
  element.style.background=colorval;
  element.style.cursor=cursortype;
}
</script>

<script language="JavaScript">
  function co1(element,mode) {
    if (mode=="in") {
      cursortype = 'hand'
      colorval = '#6699cc'
    } else if (mode=="out") {
      cursortype = ''
      colorval = '#9a9a9a'
    }
  element.style.background=colorval;
  element.style.cursor=cursortype;
}
</script>

</head>

<BODY leftmargin="0" topmargin="0" rightmargin="0" bottommargin="0" marginwidth="0" marginheight="0" onload="fold('menu1','rod');">
<br><br><br>

<table cellpadding="0" cellspacing="0" align="center" border="1" width="600" height="440"><tr><td width="130" height="440">

<!----menu som skal væk-----!>

<table cellpadding="0" cellspacing="0"><tr><td bgcolor="#666666" width="130" height="440">

<table cellpadding="0" cellspacing="0" width="130">
<tr><td style="padding-left:0px;" bgcolor="#666666" onmouseover="co(this,'in');" onmouseout="co(this,'out');">
<a href="test1.html">&nbsp;Bestyrelsen</a>
</td></tr>

<tr><td bgcolor="#666666" onmouseover="co(this,'in');" onmouseout="co(this,'out');">
<a href="#" onclick="if (this.blur) this.blur(); fold('menu1','rod'); return false;">&nbsp;Instruktører</a>
<div id="menu1">
<table cellpadding="0" cellspacing="0" width="130"><tr><td style="padding-left:7px;" bgcolor="#9a9a9a" onmouseover="co1(this,'in');" onmouseout="co1(this,'out');">
<a class="under" href="test1.html">Voksen-instrutører</a></td></tr>
<tr><td style="padding-left:7px;" bgcolor="#9a9a9a" onmouseover="co1(this,'in');" onmouseout="co1(this,'out');"><a class="under" href="test1.html">B&U-instrutører</a></td></tr>
<tr><td style="padding-left:7px;" bgcolor="#9a9a9a" onmouseover="co1(this,'in');" onmouseout="co1(this,'out');"><a class="under" href="test1.html">Hjælpe-instruktører</a></td></tr></table>
</div>
</td></tr>



<tr><td style="padding-left:0px;" bgcolor="#666666" onmouseover="co(this,'in');" onmouseout="co(this,'out');">
<a href="test1.html">&nbsp;Træningssteder</a>
</td></tr>

<tr><td style="padding-left:0px;" bgcolor="#666666" onmouseover="co(this,'in');" onmouseout="co(this,'out');">
<a href="test1.html">&nbsp;Kontakt</a>
</td></tr>
</table>

</td></tr></table>
<!----menu som skal væk-----!>

</td>
<td style="padding:10px;">
Dette er Forsiden!!
</td></tr>


</BODY>
</HTML>
Avatar billede roenving Novice
22. april 2004 - 13:12 #3
<!----menu som skal væk-----!>
<script type="text/javascript" src="menu.js"></script>
<!----menu som skal væk-----!>

-------------------------------------------------------------------------------------
-- og menu.js skal så indeholde (og _intet andet !-)

txt='<table cellpadding="0" cellspacing="0"><tr><td bgcolor="#666666" width="130" height="440">';
txt+='<table cellpadding="0" cellspacing="0" width="130">';
txt+='<tr><td style="padding-left:0px;" bgcolor="#666666" onmouseover="co(this,\'in\');" onmouseout="co(this,\'out\');">';
txt+='<a href="test1.html">&nbsp;Bestyrelsen</a>';
txt+='</td></tr>';
txt+='<tr><td bgcolor="#666666" onmouseover="co(this,\'in\');" onmouseout="co(this,\'out\');">';
txt+='<a href="#" onclick="if (this.blur) this.blur(); fold(\'menu1\',\'rod\'); return false;">&nbsp;Instruktører</a>';
txt+='<div id="menu1">';
txt+='<table cellpadding="0" cellspacing="0" width="130"><tr><td style="padding-left:7px;" bgcolor="#9a9a9a" onmouseover="co1(this,\'in\');" onmouseout="co1(this,\'out\');">';
txt+='<a class="under" href="test1.html">Voksen-instrutører</a></td></tr>
<tr><td style="padding-left:7px;" bgcolor="#9a9a9a" onmouseover="co1(this,\'in\');" onmouseout="co1(this,\'out\');"><a class="under" href="test1.html">B&U-instruktører</a></td></tr>';
txt+='<tr><td style="padding-left:7px;" bgcolor="#9a9a9a" onmouseover="co1(this,\'in\');" onmouseout="co1(this,\'out\');"><a class="under" href="test1.html">Hjælpe-instruktører</a></td></tr></table>';
txt+='</div>';
txt+='</td></tr>';
txt+='<tr><td style="padding-left:0px;" bgcolor="#666666" onmouseover="co(this,\'in\');" onmouseout="co(this,\'out\');">';
txt+='<a href="test1.html">&nbsp;Træningssteder</a>';
txt+='</td></tr>';
txt+='<tr><td style="padding-left:0px;" bgcolor="#666666" onmouseover="co(this,\'in\');" onmouseout="co(this,\'out\');">';
txt+='<a href="test1.html">&nbsp;Kontakt</a>';
txt+='</td></tr>';
txt+='</table>';
txt+='</td></tr></table>';
document.write(txt);

-- jeg tror jeg fik alle escapes med, men det er nemt at få en til at smutte, så du skal kigge grundigt efter !-)
Avatar billede fixxxer Nybegynder
22. april 2004 - 17:04 #4
roenving >> jeg lavede engang et program der lavede sådan en document.write js-fil, inden jeg gik over til server-side og SSI.

Min version ville se sådan her ud:
(og alle escapes er med ;-)

document.write('<table cellpadding="0" cellspacing="0"><tr><td bgcolor="#666666" width="130" height="440">');
document.write('<table cellpadding="0" cellspacing="0" width="130">');
document.write('<tr><td style="padding-left:0px;" bgcolor="#666666" onmouseover="co(this,\'in\');" onmouseout="co(this,\'out\');">');
document.write('<a href="test1.html">&nbsp;Bestyrelsen</a>');
document.write('</td></tr>');
document.write('<tr><td bgcolor="#666666" onmouseover="co(this,\'in\');" onmouseout="co(this,\'out\');">');
document.write('<a href="#" onclick="if (this.blur) this.blur(); fold(\'menu1\',\'rod\'); return false;">&nbsp;Instruktører</a>');
document.write('<div id="menu1">');
document.write('<table cellpadding="0" cellspacing="0" width="130"><tr><td style="padding-left:7px;" bgcolor="#9a9a9a" onmouseover="co1(this,\'in\');" onmouseout="co1(this,\'out\');">');
document.write('<a class="under" href="test1.html">Voksen-instrutører</a></td></tr>');
document.write('<tr><td style="padding-left:7px;" bgcolor="#9a9a9a" onmouseover="co1(this,\'in\');" onmouseout="co1(this,\'out\');"><a class="under" href="test1.html">B&U-instrutører</a></td></tr>');
document.write('<tr><td style="padding-left:7px;" bgcolor="#9a9a9a" onmouseover="co1(this,\'in\');" onmouseout="co1(this,\'out\');"><a class="under" href="test1.html">Hjælpe-instruktører</a></td></tr></table>');
document.write('</div>');
document.write('</td></tr>');
document.write('<tr><td style="padding-left:0px;" bgcolor="#666666" onmouseover="co(this,\'in\');" onmouseout="co(this,\'out\');">');
document.write('<a href="test1.html">&nbsp;Træningssteder</a>');
document.write('</td></tr>');
document.write('<tr><td style="padding-left:0px;" bgcolor="#666666" onmouseover="co(this,\'in\');" onmouseout="co(this,\'out\');">');
document.write('<a href="test1.html">&nbsp;Kontakt</a>');
document.write('</td></tr>');
document.write('</table>');
document.write('</td></tr></table>');
Avatar billede fixxxer Nybegynder
22. april 2004 - 17:07 #5
jeg lavede også programmet så de kan decode, således hvis man ønsker at rette sin menu, og derefter lave den tilbage til en js-fil.

mikkel_strack >> er du interesseret i det program?

jeg kan kun sige at jeg brugte det med stor succes til netop samme formål
Avatar billede roenving Novice
22. april 2004 - 17:08 #6
Ingen overhovedet inden for et etableret programmeringsmiljø vil nogensinde anbefale, at man bruger en særdeles ressourcekrævende procedure flere gange end højst nødvendigt, derfor er din løsning gak i forhold til den jeg gav ...

Brug _kun_ document.write een gang, hvis du overhovedet kan komme af sted med det, saml udskriften smmen i en buffer først, det koster stort set intet !-)
Avatar billede fixxxer Nybegynder
22. april 2004 - 17:11 #7
jeg tror situationen ville være anderleden hvis man lavede 1000 kald til document.write. her har vi vist kun fat ca 20 stykker, uden at have talt dem.
Avatar billede roenving Novice
22. april 2004 - 19:07 #8
2 er een for mange ...
Avatar billede mikkel_strack Nybegynder
23. april 2004 - 00:17 #9
Jeg kom til at acceptere fixxxers svar - selvom det var meningen af roenving skulle ha haft de fleste point.
Har oprettet et nyt hvor du lige kan smide et svar roenving
http://www.eksperten.dk/spm/492434

Og tak for hjælpen begge to - I er nogle knage!! :o)
Avatar billede fixxxer Nybegynder
23. april 2004 - 23:55 #10
takker for point, god weekend :)
Avatar billede olebole Juniormester
24. april 2004 - 01:04 #11
<ole>

... og roenving har i øvrigt helt ret. Enhver, der er vandt til at programmere/kode, kunne aldrig få skyggen af en tanke om at skrive ud til skærmen på den måde. Det er hel elementær viden, at det performer elendigt ... og det gælder i øvrigt alle sprog. Man har derfor forsynet flere sprog med en indbygget buffer-funktionalitet, som vi dog er nødt til at lave selv i JS.
I øvrigt er det endnu mere effektivt at push'e til et array, som join'es tilsidst. På den måde opnår man en performance-forbedring på flere hundrede _gange_ ... vel at mærke ikke flere hundrede procent  ;o)

Om det er få eller mange linier, så er det dårlig kodeskik - og det skal man aldrig lære videre  :)

/mvh
</bole>
Avatar billede roenving Novice
24. april 2004 - 01:09 #12
Tjah, i hvert fald er der et principielt problem i at få tiden, der går, til at være mere en 100% kortere *rotfl*
Avatar billede olebole Juniormester
24. april 2004 - 01:22 #13
Det er jo lige det ... med lidt kvantemekanik skulle det dog nok kunne lade sig gøre  ;o)

jakoba lavede engang dette eksempel, der viser forskellen mellem streng-konkatenering og array-joining:
  http://hjem.get2net.dk/Jakob.Aggernaes/temp/exp109806.html

Hvis du så indregner forskellen mellem streng-konkatenering og udskrivning i en løkke - så kommer du lynhurtigt op i en faktor 'adskillige tusinde' ...!  =8-O
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

Seneste spørgsmål Seneste aktivitet
I dag 10:21 Ny printer, men hvilken Af mort1 i Printere
I går 19:41 USB på Linux Af Uvanga i Linux
12/0818:26 Hvilken type mus Af mort1 i PC
11/0813:21 ms Forms Af leahcim i Andet software
10/0821:30 Blokeret på Snapchat? Af LineP i Chat & Messaging