Avatar billede lsolesen Nybegynder
18. december 2003 - 14:51 Der er 18 kommentarer og
1 løsning

Formatere snyde-selectmenu

Jeg har lavet en snydeselectmenu (hvis formål er at den skal være tilgængelig - derfor har jeg ikke brugt en form select), men jeg kan ikke rigtig få stylet den ordentligt. Den skal styles relativt, så den er hypertilgængelig.

<script type="text/javascript">
<!-- Javascript fra www.webdesign101.dk
// modificeret af Lars Olesen, 18. december 2003

var ver3 = (navigator.appVersion.charAt(0) <= "3") ?     true : false;
var dom = (document.getElementById) ?     true : false;
var ie4 = (document.all && !document.getElementById) ?     true : false;
var ns4 = (document.layers) ?     true : false;
var ie5 = (document.all && document.getElementById) ?     true : false;
var n6 = (document.getElementById && !document.all) ?  true : false;
var msie = (document.all) ?true:false;
var ie6 = (navigator.appVersion.indexOf("MSIE 6") != -1)  ? true : false;

// funktioner til at åbne eller lukke element
function findObjekt(objekt) {
var blok;
      if (dom)
            blok = document.getElementById(objekt).style;
      else
    if (ie4)
            blok = document.all[objekt].style;
      else
    if (ns4)
            blok = document.layers[objekt];
      return blok;
}

function expand(objekt){
    var blok = findObjekt(objekt);
    blok.display="block"
}

function collapse(objekt){
    var blok = findObjekt(objekt);
    blok.display="none"
}

// vis eller skjul genvejsmenuen
menu1synlig=0; //menuen er skjult

function visMenu(objekt){
    if (menu1synlig==1){
        collapse(objekt);
        menu1synlig=0;
        return;
    }
    if (menu1synlig==0){
        expand(objekt);
        menu1synlig=1;
    }
}
//-->

</script>

<div id="genvejbar">
          <div>

              <ul id="navlist">
                  <li><a href="#" onclick="return visMenu('subnavlist'); return false;"><div class="right">&darr;</div>Genvej...</a>
                  <ul id="subnavlist">
                        <li><a href="/dagbog/">Dagbog</a></li>
                        <li><a href="/fotoalbum/">Fotoalbum</a></li>
                        <li><a href="/dialog/faq.php">Spørgsmål og svar</a></li>
                        <li><a href="/dialog/elevchat.php">Elevchat</a></li>

                        <li><a href="/langekurser/">Lange kurser</a></li>
                        <li><a href="/langekurser/fagoversigt.php">Dine fag</a></li>
                        <li><a href="/kortekurser/">Korte kurser</a></li>
                        <li><a href="/dialog/kontakt.php">Kontakt</a></li>
                    </ul></li>
              </ul>
          </div>

Med følgende stylesheet:

#genvejbar {
        font-weight: bold;
        font-size: 0.8em;
        width: 100%;
        padding: 2px;

        color: white;
        background: #661E1F url(none);
}

div#genvejbar ul {
        margin: 0;
        padding: 0;
       
        list-style-type: none;
       
        width: 12em;

        border: solid 1px black;
}

div#genvejbar ul li {
        margin: 0;
        padding: 0;
        color: black;
        display: inline;

}

div#genvejbar ul li a {
    display: block;
    color: black;
    background: white url(none);
    text-decoration: none;
}

div#genvejbar ul#navlist div.right {
    float:right;
    display: inline;
    background: #fff url(none);
    color: black;
    font-weight: bolder;
    cursor:pointer;
    cursor:hand;
}
   
div#genvejbar ul#subnavlist  {
    position: absolute;
    z-index: 1;

    display: none;
}

div#genvejbar ul#subnavlist li a:hover {
    color: black;
    background: #eee url(none);
}

Er der nogen der kan hjælpe. Listen kan ses i funktion på www.vih.dk

/lars
Avatar billede roenving Novice
18. december 2003 - 15:04 #1
div#genvejbar ul li a {
    display: block;
    color: black;
    background: white url(none);
    text-decoration: none;
    padding-bottom:5px;
}
Avatar billede Slettet bruger
18. december 2003 - 18:12 #2
Det kunne måske være en ide, at lave en onBlur-funktion til menuen, så den "folder sammen" igen, hvis man klikker uden for den.
Avatar billede lsolesen Nybegynder
18. december 2003 - 18:17 #3
sandbox - det er en rigtig god ide. Det gør jeg lige med det samme. Hvad med selve udseendet, er det acceptabelt nu?
Avatar billede roenving Novice
18. december 2003 - 18:20 #4
-- megt fint !-)

Jeg regnede nok med, at du kunne finde ud af at tilpasse dine andre li'er ...

-- iøvrigt vil det vel også være logisk at skifte ned-pilen ud med en op-pil, når den udfoldes !-)
Avatar billede lsolesen Nybegynder
18. december 2003 - 18:24 #5
roenving > Ja, det har du ret i. Men det kræver vist noget mere javascript. Må lige tænke over, hvordan det kan lade sig gøre :)

sandbox > Gad vide hvor jeg lige skal gøre af sådan en onblur-funktion. Det går jo ikke at sætte den på Genvej... linket, for så forsvinder menuen jo, når jeg trykker på et af de underliggende menupunkt. Hm, tænker...
Avatar billede roenving Novice
18. december 2003 - 18:30 #6
<li><a href="#" onclick="visMenu('subnavlist');d=this.childNodes[0];if(d.innerHTML=='&darr;'){d.innerHTML='&uarr;'}else{d.innerHTML='&darr;'}; return false;"><div class="right">&darr;</div>Genvej...</a>
Avatar billede roenving Novice
18. december 2003 - 18:32 #7
Du bruger jo i forvejen en variabel til at styre om den er åben, så du kan jo bruge den som parameter, når du vil blurre ...
Avatar billede Slettet bruger
18. december 2003 - 19:00 #8
Javascript er så absolut ikke min stærke side, så det jeg siger nu skal tages med et vist forbehold.

Jeg kunne forestille mig, at javascript indeholder noget, der kan fortælle dig, hvor der kommer nyt fokus, når et element mister fokus.

Så kan du kalde onblur-funktionen fra alle elementerne i din select, men checke for om det ny fokus er givet til et andet element i den, før du folder sammen.

Hvis fokus er blevet flyttet til et andet element i din select, skal du bare vente på onblur i den.
Avatar billede lsolesen Nybegynder
18. december 2003 - 19:01 #9
roenvig 18:30:35 > Jeg har forsøgt at køre dit javascript ind i min funktion, så det ser sådan her ud:

function findObjekt(objekt) {
var blok;
      if (dom)
            blok = document.getElementById(objekt).style;
      else
    if (ie4)
            blok = document.all[objekt].style;
      else
    if (ns4)
            blok = document.layers[objekt];
      return blok;
}

function visMenu(objekt){

  var obj = findObjekt(objekt);
  var d=obj.childNodes[0];

  if(d.innerHTML==\'&darr;\') {
    d.innerHTML=\'&uarr;\';
  }
  else{
    d.innerHTML=\'&darr;\';
  }


    if (menu1synlig==1){
        collapse(objekt);
        menu1synlig=0;
        return;
    }
    if (menu1synlig==0){
        expand(objekt);
        menu1synlig=1;
    }
}

Det giver imidlertid det problem, at min menu ikke vil åbnes nu, og det skyldes garanteret, at jeg har lavet en fejl :)

roenving 18:32:46 > Det forstår jeg vist ikke. Jeg må erkende, at jeg ikke er særlig skrap til javascript :(
Avatar billede lsolesen Nybegynder
18. december 2003 - 19:02 #10
sandbox > jeg tror nok at vi sejler i samme sø så, hvad angår skarphed udi javascripten :)
Avatar billede roenving Novice
18. december 2003 - 19:22 #11
-- det er jo ikke det objekt du vil vise, den er childNode af !-)

-- præcis derfor lagde jeg den direkte ind i <a>-tagget !o]

-- og jeg fik ideen på vej mod noget andet, så jeg har ikke testet, hvordan innerHTML ser ud med sådan en fætter, men jeg vil da prøve om lidt ...
Avatar billede lsolesen Nybegynder
18. december 2003 - 19:24 #12
Tænkte, at nu hvor objektnavnet bliver sendt med, så kunne det lade sig gøre, men guess not. Glæder mig til den nye "fætter" :)
Avatar billede roenving Novice
18. december 2003 - 19:43 #13
Den virker bare med min kode ...

-- så var der bare det der med blur() ?-)
Avatar billede lsolesen Nybegynder
18. december 2003 - 20:05 #14
I Mozilla er det kun første gang pilen vender sig? Men ellers en elegant løsning.

Jeg undrer mig over, at min menu ikke virker i Opera - har du evt. nogen bud på det?
Avatar billede roenving Novice
18. december 2003 - 20:19 #15
Kan være, det er den, som ikke forstår display='block' men i stedet skal have display="" ?-)
Avatar billede roenving Novice
18. december 2003 - 20:46 #16
Denne her virker fuldstændig efter hensigten i webwriteren, men blurrer ikke i IE og sender ikke videre i Mozilla ?-)

-- i hvert fald stof til videre-arbejde ...

<!doctype html public "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>E selectbox</title>
<style type="text/css">
#genvejbar {
        font-weight: bold;
        font-size: 0.8em;
        width: 100%;
        padding: 2px;

        color: white;
        background: #661E1F url(none);
}

div#genvejbar ul {
        margin: 0;
        padding: 0;
       
        list-style-type: none;
       
        width: 12em;

        border: solid 1px black;
}

div#genvejbar ul li {
        margin: 0;
        padding: 0;
        color: black;
        display: inline;

}

div#genvejbar ul li a {
    display: block;
    color: black;
    background: white url(none);
    text-decoration: none;
    padding-bottom:5px;
}

div#genvejbar ul#navlist div.right {
    float:right;
    display: inline;
    background: #fff url(none);
    color: black;
    font-weight: bolder;
    cursor:pointer;
    cursor:hand;
}
   
div#genvejbar ul#subnavlist  {
    position: absolute;
    z-index: 1;

    display: none;
}

div#genvejbar ul#subnavlist li a:hover {
    color: black;
    background: #eee url(none);
}
</style>

<script type="text/javascript">
// modificeret af Lars Olesen, 18. december 2003

var dom = (document.getElementById) ?    true : false;
var ie4 = (document.all && !document.getElementById) ?    true : false;
var ns4 = (document.layers) ?    true : false;

// funktioner til at åbne eller lukke element
function findObjekt(objekt) {
var blok;
      if (dom)
            blok = document.getElementById(objekt).style;
      else
    if (ie4)
            blok = document.all[objekt].style;
      else
    if (ns4)
            blok = document.layers[objekt];
      return blok;
}

function expand(objekt){
    var blok = findObjekt(objekt);
    blok.display="block"
}

function collapse(objekt){
    var blok = findObjekt(objekt);
    blok.display="none"
}

// vis eller skjul genvejsmenuen
menu1synlig=false; //menuen er skjult

function visMenu(objekt){
    clTi();
    if (menu1synlig){
        collapse(objekt);
        menu1synlig=false;
        document.getElementById('pil').innerHTML="&darr;";
    }else{
        expand(objekt);
        menu1synlig=true;
        document.getElementById('pil').innerHTML="&uarr;";
    }
}
var timer = 0, menu = "";
function clTi(){
  if(timer!=0){
    clearTimeout(timer);
    timer = 0;
    }
  return true;
}
</script>
</head>
<body>
<div id="genvejbar">
          <div>

              <ul id="navlist">
                  <li><a href="#" onblur="menu='subnavlist';timer=setTimeout('visMenu(menu)',100);" onclick="menu='subnavlist';visMenu(menu); return false;"><div id='pil' class="right">&darr;</div>Genvej...</a>
                  <ul id="subnavlist">
                        <li><a href="/dagbog/" onblur="menu='subnavlist';timer=setTimeout('visMenu(menu)',100);" onclick="menu='';alert(timer);clTi();">Dagbog</a></li>
                        <li><a href="/fotoalbum/" onblur="menu='subnavlist';timer=setTimeout('visMenu(menu)',100);" onclick="menu='';alert(timer);clTi();">Fotoalbum</a></li>
                        <li><a href="/dialog/faq.php" onblur="menu='subnavlist';timer=setTimeout('visMenu(menu)',100);" onclick="menu='';alert(timer);clTi();">Spørgsmål og svar</a></li>
                        <li><a href="/dialog/elevchat.php" onblur="menu='subnavlist';timer=setTimeout('visMenu(menu)',100);" onclick="menu='';alert(timer);clTi();">Elevchat</a></li>

                        <li><a href="/langekurser/" onblur="menu='subnavlist';timer=setTimeout('visMenu(menu)',100);" onclick="menu='';alert(timer);clTi();">Lange kurser</a></li>
                        <li><a href="/langekurser/fagoversigt.php" onblur="menu='subnavlist';timer=setTimeout('visMenu(menu)',100);" onclick="menu='';alert(timer);clTi();">Dine fag</a></li>
                        <li><a href="/kortekurser/" onblur="menu='subnavlist';timer=setTimeout('visMenu(menu)',100);" onclick="menu='';alert(timer);clTi();">Korte kurser</a></li>
                        <li><a href="/dialog/kontakt.php" onblur="menu='subnavlist';timer=setTimeout('visMenu(menu)',100);" onclick="menu='';alert(timer);clTi();">Kontakt</a></li>
                    </ul></li>
              </ul>
          </div>
</body>
</html>
Avatar billede lsolesen Nybegynder
10. juni 2006 - 17:35 #17
Svar venligst!
Avatar billede roenving Novice
25. juli 2006 - 01:05 #18
Oki '-)
Avatar billede roenving Novice
28. juli 2006 - 15:32 #19
-- og tak for point ;~}
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