Avatar billede virus Nybegynder
18. juni 2003 - 22:01 Der er 11 kommentarer og
1 løsning

setTimeout hvordan?

Hvordan ændre jeg baggrundsfarve på en <td> ved onmouseover efter 2 sek? Plz help :)
Avatar billede roenving Novice
18. juni 2003 - 22:04 #1
function newColor(){
document.getElementById("minTd").style.backgroundColor="#663300";
}

setTimeout("newColor()", 2000)

og så din celle:

<td id="minTd">
Avatar billede roenving Novice
18. juni 2003 - 22:06 #2
-- og hvis det skal være onmouseover på cellen, så:

<td id="minTd" onmouseover='setTimeout("newColor()", 2000);'>
Avatar billede virus Nybegynder
18. juni 2003 - 22:09 #3
Istedet for 'getElementById("minTd")' ville jeg så ikke kunne smide 'this' ind?
Avatar billede roenving Novice
18. juni 2003 - 22:20 #4
Jeg har med vilje undladt at give parametre, fordi der er en uenighed mellem standarderne og virkeligheden ...

Herinde har jeg lært at man godt må overføre værdier med setTimeout mens standarden udtrykkeligt nævner, at det må man ikke ...

Men under alle omstændigheder får du problemer med objekt-referencen, så jeg vil anbefale en afart af det ovenstående, for overførsel af værdier er ved hjælp af en tekststreng, f.eks.

setTimeout("newColor('"+tdNavn+"')",2000)
Avatar billede virus Nybegynder
18. juni 2003 - 22:42 #5
Skriver lige så du kan se hvad hele min ide er :)

<table>
    <tr>
        <td bgcolor="gray" onmouseover="
            setTimeout(this.style.backgroundColor='#FFFFFF' ,0);
            setTimeout(this.style.backgroundColor='#D8D3D3' ,200);
            setTimeout(this.style.backgroundColor='#939F6F' ,400);
            setTimeout(this.style.backgroundColor='#76883E' ,600);
            setTimeout(this.style.backgroundColor='#657A24' ,800);
            setTimeout(this.style.backgroundColor='#495A14' ,1000);
            ">Test</td>
    </tr>
</table>


Det er altså så godt jeg kan finde ud af det, jeg kan bare ikke forstå hvorfor jeg ikke kan smide 'this' med som variabel på en funktion, og at scriptet ovenover blot springer til den sidste farve :/
Avatar billede roenving Novice
18. juni 2003 - 23:15 #6
Nu har du det jo nok ikke som du har skrevet det her, for det skulle meget gerne bare generere en javascript-fejl (der er linjeskift i !-)

Første argument til en setTimeout er en tekststreng, som _skal_ være en funktionsreference, så du må finde en anden måde at gøre det på, f.eks.

<script lang...>
activeElement = null;
function newColor(farve){
if(activeElement)activeElement.style.backgroundColor=farve;
}
</script>


<table>
    <tr>
        <td bgcolor="gray" onmouseover="activeElement=this;setTimeout("newColor('"+'#FFFFFF'+"')",0);setTimeout("newColor('"+'#D8D3D3'+"')",200);setTimeout("newColor('"+'#939F6F'+"')",400);setTimeout("newColor('"+'#76883E'+"')",600); setTimeout("newColor('"+'#657A24'+"')",800);setTimeout("newColor('"+'#495A14'+"')",1000);">Test</td>
    </tr>
</table>

-- og det her virker heller ikke ...

-- jeg tror du må definere din skiftDogFarveFunktion udenfor alt, og så kan du måske bruge teknikken, med at finde elementet frem som vist med activeElement
Avatar billede virus Nybegynder
18. juni 2003 - 23:52 #7
Alright roenving, du har givet mig lidt at arbejde videre med, javascript er bare _lige_ min kop te :)
Men man skal jo starte frem for alt, thx igen, smid lige et svar :)
Avatar billede roenving Novice
19. juni 2003 - 00:03 #8
Denne virker:

<HTML>
<HEAD>
<script language="javascript">
var colors =['#FFFFFF','#D8D3D3','#939F6F','#76883E','#657A24','#495A14'];
var num = 0;
var actElement = null;
function newColor(){
if(actElement)actElement.style.backgroundColor=colors[num];
num = (num+1)%5;
if (num!=0)setTimeout("newColor()",200)
}
</script>
</HEAD>
<BODY>

<table>
    <tr>
<td id="minTd" bgcolor="gray" onmouseover="actElement=this;newColor();">Test</td>
    </tr>
</table>

</BODY>
</HTML>
Avatar billede roenving Novice
19. juni 2003 - 00:04 #9
-- og du må godt få et svar nu hvor det virker ...
'-)
Avatar billede roenving Novice
19. juni 2003 - 00:11 #10
-- og en lille fejl ...

der skal stå 6, fordi der er 6 elementer:

num = (num+1)%6;
Avatar billede virus Nybegynder
19. juni 2003 - 00:30 #11
Hvis det ikke var af fare for at lyde lidt for kærlig ville jeg sige du er en sviske!
Jeg har smidt points op til 200, for det er virkeligt virkeligt virkeligt lækkert! :o
Avatar billede roenving Novice
19. juni 2003 - 00:32 #12
Jamen jeg takker da mange gange ;~}
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