Avatar billede humlebien Novice
12. januar 2010 - 08:54 Der er 1 kommentar og
1 løsning

Skift baggrund OG tekst ved mouseover

Jeg har en tabel, som menu, hvorpå jeg gerne vil lave lidt mouseover-"fiks-fakserier" :o)

Når musen er over TD vil jeg gerne skifte baggrundsbillede og tekst. Dette har jeg løst på denne måde:

<script language="JavaScript">
function changeText(menu)
{
    if(menu == 'uddOn') {
        document.getElementById("udd").innerHTML='Menu 1<br>Menu 2<br>Menu 3'
    }
    if(menu == 'uddOff') {
        document.getElementById("udd").innerHTML=Uddannelse'
    }
}
</script>
<style>
td.off {
    background-image:url(images/gray-box.gif);
    height:105px;
    font-family:Arial, Helvetica, sans-serif;
    font-size:10pt;
    color:#FFF;
}

td.on {
    background-image:url(images/box-red.gif);
    height:105px;
    font-family:Arial, Helvetica, sans-serif;
    font-size:10pt;
    color:#FFF;
}
</style>

....snip....
<td width="180" class="off" onmouseover="this.className='on';changeText('uddannelseOn');" onmouseout="this.className='off';changeText('uddannelseOff');" id="udd" />Dette er en test</td>
....snip....

men men men..... jeg vil jo gerne have nogle links i min "On"-tekst, men når man så fører musen over et link, så forstår browseren det som en mouseout dvs. baggrund og tekst går tilbage til Off-tilstand....

Hvordan kan jeg klare det???
Avatar billede intenz Novice
12. januar 2010 - 13:13 #1
Jeg har lavet et eksempel der virker, og skrevet kommentarer så du kan finde rundt i koden.

Jeg har også skrevet dine funktioner om, så du ikke skal ind og rette i dem manuelt for hver TD felt. Der er et array nederst, hvor du kan tilføje det onmouseover/out tekst du skal bruge.

Men prøv at kig på det og spørg hvis det er :)

<script language="JavaScript">
var t; // variablen til at holde timeout events
function td_hover(e) { // funktion til at køre onmouseover/out events
    if (link_hover == 0) { // er vi på et link?
        t = setTimeout(function(){changeText(e)},50); // timeout på hover event, så vi kan slukke for den igen, hvis det er et link vi er over
    }
}

function changeText(e) { // funktion til at ændre teksten
    current_class = e.className; // hvilken klasse er vi på?
    if(current_class == 'off') { // vi er off og skal on
        e.className='on';
        e.innerHTML = mouse_events[e.id+'_over']; // hent tekst fra array
        var children = e.getElementsByTagName('a');
   
        for (var i=0; i<children.length; i++) { // håndter onmouseover/out events på eventuelle links i teksten
            children[i].onmouseover = setLinkHover;
            children[i].onmouseout = setLinkHover;
        }

    } else { // vi er on og skal off
        e.innerHTML = mouse_events[e.id+'_out']; // onmouseout tekst fra array
        e.className='off';
    }
}

var link_hover = 0;
function setLinkHover() { // håndter onmouseover/out på links
    clearTimeout(t); // fjern vores timeout

    // håndter variabler til at styre om vi er på et link
    if (link_hover == 0) link_hover = 1;
    else link_hover = 0;
}

// tekst indhold til onmouseover/out. format: ID_over - ID_out
var mouse_events = [];
mouse_events['udd_over'] = '<a href="gsdg">Menu 1</a><br>Menu 2<br>Menu 3';
mouse_events['udd_out'] = 'Uddannelse';
</script>
<style>
td.off {
    background-image:url(images/gray-box.gif);
    height:105px;
    font-family:Arial, Helvetica, sans-serif;
    font-size:10pt;
}

td.on {
    background-image:url(images/box-red.gif);
    height:105px;
    font-family:Arial, Helvetica, sans-serif;
    font-size:10pt;
}
</style>
<table border=1>
    <tr>
        <td width="180" class="off" onmouseover="td_hover(this);" onmouseout="td_hover(this);" id="udd">Dette er en test</td>
    </tr>
</table>
Avatar billede intenz Novice
19. januar 2010 - 16:32 #2
Det ville være rart hvis du fulgte op på det når man nu har brugt tid at hjælpe dig.......
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