Dynamisk meny
del 1 |  del 2 |  del 3
 
 
Vi skal nå lage et javascript med to funksjoner. En funksjon som skal hete "vis_skjul" tar seg av vising og skjuling av menyene, og funksjonen "bytt_knapp" bytter om på bildene som representerer knappen. Javascriptet skal stå øverst i html-dokumentet, innenfor head-taggen.
    <html>
    <head>

      <script language="JavaScript">

      </script>

    </head>

    ...

    </html>
 


Funksjonen "vis_skjul" tar ett argument. Argumentet sier hvilken av menyene vi skal utføre endringer på. Hvis menyen er skjult skal den vises, og hvis den er synlig skal den skjules. For å finne ut om menyen er skjult eller ikke, kan vi spørre tabellradens style.display-egenskap.
    function vis_skjul(valg) {
      if(document.all["under_" + valg].style.display == "none")
      {
        // den er skjult, og skal vises
      }
      else
      {
        // den er synlig og skal skjules
      }
    }
document.all er en referanse til alle objekter i html-dokumentet som har navnet som skrives inni klammeparentesen. Inni klammen har jeg skrevet "under_" + valg. Hvis vi sender med "diverse" som argument når vi kaller på funksjonen (i del 3) vil javascriptet ha en referanse til alle objekter som heter "under_diverse", som er tabellraden som inneholder alle linkene. Dette ble definert i del 1.

Hvis objektet's style.display-egenskap har verdien "none" betyr det at den ikke vises;
-det som vises er ingenting.
 


Nå gjenstår bare koden som foretar selve visingen og skjulingen av objektene. Vi ønsker å skjule den tabellraden som kun er en blå linje i tillegg til tabellraden med linkene. For å skjule setter vi style.display = "none", og for å vise setter vi style.display = '', som egentlig er null. Vi må også skifte bildet som representerer knappen. Den skal vise pil opp når menyen vises, og pil ned når menyen er skjult.
    function vis_skjul(valg) {
      if(document.all["under_" + valg].style.display == "none")
      {
        document.all["velger_" + valg].src = opp_on.src document.all["under_" + valg].style.display = '' document.all["skille_" + valg].style.display = ''
      }
      else
      {
        document.all["velger_" + valg].src = ned_on.src document.all["under_" + valg].style.display = "none" document.all["skille_" + valg].style.display = "none"
      }
    }
 


Vi må også ha en funksjon som bytter bildene som representerer knappen. Dette fordi knappen skal endre farge når man peker på en av menyene. Dette gjør at knappen blir lettere å oppdage for brukere som ikke vet hvordan menyen er oppbygd og hvordan den virker.
    function bytt_knapp(valg, on_off)
    {

    }
Argumentet valg angir hvilken meny's knapp som skal forandres. Det andre argumentet angir om knappen skal være opplyst eller ikke.
 


Vi definerer at "on" i det andre argumentet skal bety at knappen skal være opplyst, og at "off" skal bety at den er i normal tilstand. Vi lager så en if-setning som skjekker dette.
    function bytt_knapp(valg, on_off) {
      if(on_off == "on")
      {

      }
      else if(on_off == "off")
      {

      }
    }
 


Vi må nå finne ut om bildet vi skal forandre er en opp-pil eller om det er en ned-pil. Vi lager derfor if-setninger for dette også.
    function bytt_knapp(valg, on_off) {
      if(on_off == "on")
      {
        if(document.all["velger_" + valg].src == ned.src)
          // knappen er en belyst ned-pil
        else if(document.all["velger_" + valg].src == opp.src)
          // knappen er en belyst opp-pil
      }
      else if(on_off == "off")
      {
        if(document.all["velger_" + valg].src == ned_on.src)
          // knappen er en ned-pil med normal tilstand
        else if(document.all["velger_" + valg].src == opp_on.src)
          // knappen er en opp-pil med normal tilstand
      }
    }
Som vi husker fra del 1 fikk knappen navnet "velger_diverse". Ved å sette "diverse" som første argument når vi kaller denne metoden er det knappen i diverse-menyen vi gjør endringer på.
 


Hvis knappen for øyeblikket er en ned-pil, skal den forandres til en ned-pil med en annen farge/tilstand og vice versa. Vi skriver koden som forandrer bildet.
    function bytt_knapp(valg, on_off) {
      if(on_off == "on")
      {
        if(document.all["velger_" + valg].src == ned.src)
          document.all["velger_" + valg].src = ned_on.src
        else if(document.all["velger_" + valg].src == opp.src)
          document.all["velger_" + valg].src = opp_on.src
      }
      else if(on_off == "off")
      {
        if(document.all["velger_" + valg].src == ned_on.src)
          document.all["velger_" + valg].src = ned.src
        else if(document.all["velger_" + valg].src == opp_on.src)
          document.all["velger_" + valg].src = opp.src
      }
    }
Det kan se ut som denne funksjonen virker akkurat like bra selv om vi hadde kuttet ut det andre argumentet og de ytterste if-setningene. Men man ville da kunne oppleve at knappen hadde "kommet ut av rytme" av og til. Den ville da slått seg på når man ikke peket på menyen o.s.v.
 


Det eneste vi mangler nå er en funksjon som skal kalles når sida først vises. Denne funksjonen skal laste ned de nødvendige bildene og lagre dem i variablene som vi har brukt ovenfor. Ved å ha bildene lastet ned på forhånd kan de vises straks vi har behov for dem. Uten denne funksjonen ville skiftingen av bildene hengt lenge etter, fordi man måtte ventet på at de skulle lastes ned hver gang.
    function oppstart() {
      opp = new Image()
      opp_on = new Image()
      ned = new Image()
      ned_on = new Image()

      opp.src = "opp.gif"
      opp_on.src = "opp_on.gif"
      ned.src = "ned.gif"
      ned_on.src = "ned_on.gif"
    }
De fire første setningene lager nye image-objekter som vi kan lagre bildene i. De fire siste setningene laster ned bildene og lagrer dem i variablene. Dette virker dessverre bare på den nyeste versjonen av Internet Explorer. Men man må uansett ta denne funksjonen med, siden vi refererer til disse variablene ellers i scriptet.

->del 3