03. august 2009 - 22:10Der er
19 kommentarer og 1 løsning
Javascript "tabbing"
Hej eksperter,
Jeg er igang med at lave en menu hvor det sidst-klikkede menu-punkt (DIV) skal have className='activelink' mens alle andre skal have 'link'.
function menuClick() { if (document.getElementsByClassName) { var elts = document.getElementsByClassName('activelink'); for (var i = 0; i < elts.length; ++i) elts[i].className = 'link'; } this.className='activelink'; }
Her er et eks. på et menu-punkt: <div class="activelink" onclick="java script:menuClick();" style="background-image: url('img/menu_arkiv.png'); width: 64px;"></div>
Den sætter film menu-punkterne til 'link' i FireFox, men sætter desværre ikke menu-punktet jeg klikkede på, til 'activelink'.
Udover dét, så virker det overhovedet ikke i IE 7.0 :)
Tag elementet med som parameter: onclick="menuClick(this);"
og i funktionen
function menuClick(agurk) { if (document.getElementsByClassName) { var elts = document.getElementsByClassName('activelink'); for (var i = 0; i < elts.length; ++i) elts[i].className = 'link'; } agurk.className='activelink'; }
Det er "dyrt" for browseren at skifte className - man anbefaler normalt kun at skifte de attributter, der skal ændres.
Nogen speciel grund til det skal virke i IE? Det er vist den der document.getElementsByClassName der ikke er i alle browsere - hvis jeg ellers husker korrekt.
Alle mine menu-punkter er placeret imellem følg. DIV's som har et ID jeg kan referere til, hvis det skulle være nogen hjælp? Så kunne scriptet måske endda slippe for at søge hele dokumentet igennem.
Husk, at property navnene i oStyles skal være i CamelCase. Hvis der er en bindestreg i navnet, skal den fjernes, og det andet ord skal staves med stort:
var oStyles = { on: { backgroundImage: "url(noget_on.gif)", color: "red" }, off: { backgroundImage: "url(noget_off.gif)", color: "#000" } };
Der skal stå backgroundImage ... ikke background-image
Bemærkede dog at scriptet ikke nulstiller den menu jeg som standard har markeret som "aktiv" når siden loader første gang, medmindre jeg klikker på det først.
Hvordan sætter jeg "var oActiveLink" til et bestemt menu-punkt, i tilfælde hvor siden skal reloades?
Du skal stadig erklære variablen globalt. Så burde det virke =)
<script type="text/javascript"> var oActiveLink = null; var oStyles = { on: { background: "yellow", color: "red" }, off: { background: "#efefef", color: "#000" } }; function setActiveLink(oLnk) { var css; if (oActiveLink) { css = oActiveLink.style; for (var x in oStyles.off) css[x] = oStyles.off[x]; } oActiveLink = oLnk; css = oActiveLink.style; for (var x in oStyles.on) css[x] = oStyles.on[x]; }
Så må du lægge et link til forsøget. Muligvis sætter du en onload et andet sted - og overskriver dermed den, vi har lavet her. Hvis du har noget: <body onload="fooBar()" ...>
- eller i en eller anden JS-kode/JS-fil: window.onload = fooBar;
- eller: window.onload = function(){ fooBar(); }
- så erstat det med: window.onload = function(){ fooBar(); oActiveLink = document.getElementById("p_arkiv"); }
Kan være at jeg opretter et nyt emne igen inden længe, da jeg pt. ikke lige kan gennemskue hvordan jeg får javascriptet til at ligge i en ekstern fil, og så samtidig vælge hvilken farve tab'et skal have, ud fra hvilken .css fil der er inkluderet. :)
Selvtak og tak for points. Det andet må vi se på til den tid ;o)
Synes godt om
Ny brugerNybegynder
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.