25. marts 2004 - 23:49Der er
9 kommentarer og 1 løsning
Skifte farve på tekst og celle baggrund
Jeg er ved at lave nogle faneblade, hvor teksten er mørk og celle bagrunden er lys, når man så trykker på linket i cellen skifter den så til lys tekst farve og mørk baggrundsfarve, men jeg kan ikke få teksten på den som skal skifte tilbage igen til at ændre sig tilbage. Det er lidt svært at forklare, men se her:
<script language="JavaScript"> function change(nr) { if (nr != "") { var dark = '#666666'; var light = '#CCCCCC'; var linkid = 'a' + nr; for (x=1;x<4;x++) { if(document.getElementById(x).style.background == dark) { document.getElementById(x).style.background = light; document.getElementById(x).style.color = dark; } } document.getElementById(nr).style.background = dark; document.getElementById(linkid).style.color = light; } } </script>
function change(nr){ if(arguments.length>0){ var dark='#666666'; var light='#CCCCCC'; var linkid='a'+nr; for(x=1;x<4;x++){ if(document.getElementById(x).style.background==dark){ document.getElementById(x).style.background=light; if(x!=nr) document.getElementById('a'+x).style.color=dark; } } document.getElementById(nr).style.background=dark; document.getElementById(linkid).style.color=light; } }
desuden bør dine id'er ikke kun være et tal - i stedet for 1, 2 og 3 burde du kalde dem td1, td2 og td3
Der ligger et link i cellerne - og det er det link, der skal skifte farve. Desuden er det ikke nødvendigt, at bladre alle igennem i en løkke. Vi kan nøjes med at lægge det aktive element i en global variabel og sætte styles på den:
<script type="text/JavaScript"> var actTab = false; var dark = "#666666"; var light = "#CCCCCC"; function change(inx) { var elm = document.getElementById("t"+inx); var a = document.getElementById("a"+inx); if (actTab) { var actTabInx = actTab.id.split("t")[1]; actTab.style.backgroundColor = light; document.getElementById("a"+actTabInx).style.color = dark; } elm.style.backgroundColor = dark; a.style.color = light; actTab = elm } </script>
... og det her script er nok en anelse mere 'sexy':
<script type="text/JavaScript"> var actTab = false; var dark = "#666666"; var light = "#CCCCCC"; function change(inx) { var elm = document.getElementById("t"+inx); var a = document.getElementById("a"+inx); if (actTab) { actTab.elm.style.backgroundColor = light; actTab.a.style.color = dark; } elm.style.backgroundColor = dark; a.style.color = light; actTab = {"elm":elm, "a":a} } </script>
Tak for al den hjælp, jeg har nu brugt olebole's forslag, for det med at jeg kunne slippe for løkken tiltalte mig lidt.
>>olebole Jeg har en a:hover style på linket i cellen, og den virker første gang, dvs. at når man har klikket på linket og klikket på et andet link bagefter, så den har løbet dit script igennem, og skiftet tilbage til start udseenet, så forsvinder denne a:hover effekt. Det er ikke fordi det betyder så meget, men det ville da være fedt hvis dette også virkede.
Hehe ... det anede mig, dette spm. ville blive det næste :) Lad os lige se på logikken - og hvad der egentlig er ønskeligt (eller rettere, hvad _jeg_ synes - så må vi se, om du er enig ... hehe).
Hover-effekten skal signallere til brugeren: "Her er en funktionalitet, du kan udløse med et klik". Derfor bør hover-effekten kun være aktiv, når det pågældende faneblad er 'passivt'. Er det aktivt, vil der jo ikke ske noget nyt ved et klik. Til gengæld skal vi altså retablere hover-effekten, når vi atter gør et faneblad 'passivt' ...... enig?
Hvis du i forvejen har lagt farver og 'fine ting' på i CSS, vil jeg mene, dette vil kunne gøre det: actTab.elm.style.backgroundColor = ""; actTab.a.style.color = ""; du kan sikkert selv se, hvad det er for linier jeg retter i scriptet :)
Jeg har ikke testet det, men vil afgjort mene, at browserne vil opfatte dette som: "Vend tilbage til default-tilstanden" - og dermed retablere hover-effekten.
Er du ikke enig - eller min rettelse ikke gør, hvad jeg 'påstår' - må du vende tilbage, så finder vi en JS-løsning i stedet for CSS-hover'en ;o) /mvh
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.