Avatar billede apo Praktikant
06. august 2005 - 19:54 Der er 35 kommentarer og
2 løsninger

Kompliceret skift af baggrundsfarve, i bestemt <td>

Hej :-)

Jeg har en FAQ der, lige som med alle andre FAQ's, fungerer ved at brugeren klikker på et link øverst på siden, og derefter sendes længere ned ad siden.

Spørgsmål:
Hvordan kan jeg ved klik på følgende:
<a href="#svar4">Spørgsmål4</a>

... Få baggrunden på denne (længere nede ad siden)...:
<td id="Svar4"></td>

... til at skifte farve i 10 sekunder, og derefter vende tilbage til sin oprindelige baggrundsfarve?

Meningen er at når en bruger klikker på et bestemt spørgsmål i FAQ'en, skal baggrunden fremhæves så brugeren hurtigt kan finde svarets overskrift mellem de andre svar.

Kan det laves forholdsvis simpelt, uden kilometerlang og tung kode?

Apo
Avatar billede busschou Praktikant
06. august 2005 - 20:00 #1
kan man ikke gøre noget ala
--
function setFarve(id){
  document.getElementById(id).style.bgcolor = 'farve';
  setTimeout('fjernFarve(id)', 10000);
}
function fjernFarve(id){
  document.getElementById(id).style.bgcolor = 'farve';
}

<a href="#svar4" onclick="setFarve('Svar4');">Spørgsmål4</a>
Avatar billede apo Praktikant
06. august 2005 - 20:12 #2
Hmm... Jeg kan sagtens se idéen, men den skifter ikke farve. Der sker intet :-/
Avatar billede apo Praktikant
06. august 2005 - 20:21 #3
Jeg har sat følgende i <head>:
<script type="text/javascript">
function setFarve(id){
  document.getElementById(id).style.bgcolor='#CA0000';
  setTimeout('fjernFarve(id)', 10000);
}
function fjernFarve(id){
  document.getElementById(id).style.bgcolor='#725B56';
}
</script>

Da jeg gætter på at det er stedet, scriptet skal placeres.
Avatar billede busschou Praktikant
06. august 2005 - 20:34 #4
hmm jeg kan få den til at skifte den ene men den gider ikke rigtig skifte tilbage igen
Avatar billede apo Praktikant
06. august 2005 - 20:35 #5
Hos mig skifter den ikke farve overhovedet...
Avatar billede olebole Juniormester
06. august 2005 - 20:35 #6
<ole>

setTimeout("fjernFarve('"+id+"')", 10000);

/mvh
</bole>
Avatar billede busschou Praktikant
06. august 2005 - 20:37 #7
denne her gider den første men ikke tilbage igen
---
<html>
<head>
<script type="text/javascript">
function setFarve(id){
  var elm = document.getElementById(id);
  elm.style.background = '#FFFFFF';
  setTimeout('fjernFarve('+elm+')', 5000);
}
function fjernFarve(elm){
  elm.style.background = '#00FF00';
}
</script>
</head>
<body>
<a href="#Svar4" onclick="setFarve('Svar4');">Spørgsmål4</a>

<table>
<tr><td style="background-color:#FFFF00;" id="Svar4">blabla</td></tr>
</table>
</body>
</html>
Avatar billede busschou Praktikant
06. august 2005 - 20:39 #8
med oles rettelse kommer den ned i funktionen fjernFarve , men så siger den at elm.style ikke har nogen properties
Avatar billede busschou Praktikant
06. august 2005 - 20:39 #9
troede ellers til at starte med at jeg kom med en god ide, men jeg kan ski ikke rigtig lure den :o/
Avatar billede olebole Juniormester
06. august 2005 - 20:40 #10
Jamen, 'elm' er jo kun elementets id, når funktionen kaldes med timeOut'en  ;o)
Avatar billede apo Praktikant
06. august 2005 - 20:41 #11
Det virker stadig som en god idé, vi skal bare have det til at virke :-)

Det undrer mig dog, at du kan få en farve frem når der intet sker hos mig...
Avatar billede olebole Juniormester
06. august 2005 - 20:42 #12
<head>
<script type="text/javascript">
function setFarve(id){
  var elm = document.getElementById(id);
  elm.style.background = '#FFFFFF';
  setTimeout("fjernFarve('"+id+"')", 5000);
}
function fjernFarve(id){
  document.getElementById(id).style.background = '#00FF00';
}
</script>
</head>
<body>
<a href="#Svar4" onclick="setFarve('Svar4');">Spørgsmål4</a>

<table>
<tr><td style="background-color:#FFFF00;" id="Svar4">blabla</td></tr>
</table>
</body>
</html>
Avatar billede busschou Praktikant
06. august 2005 - 20:43 #13
hmrm synes jeg havde været der :o/ ... nå hvad
Avatar billede busschou Praktikant
06. august 2005 - 20:44 #14
olebole >> hvorfor er elm egentlig kun id´et der? elm er jo sat til at være document.getElementById ... men den kan måske ikke huske hele elementet ?
Avatar billede apo Praktikant
06. august 2005 - 20:45 #15
ole > Det virker nu. Men der går nogle sekunder inden farven kommer frem.
Avatar billede apo Praktikant
06. august 2005 - 20:45 #16
... Og den ser ikke ud til at forsvinde igen?
Avatar billede busschou Praktikant
06. august 2005 - 20:46 #17
nu kan jeg jo lige så godt lære lidt når ole er her :o)
Jeg synes jeg prøvede som en gal med style.background-color og bgcolor osv
Men den meldte fejl på begge
burde background-color ikke virke?
Avatar billede busschou Praktikant
06. august 2005 - 20:47 #18
apo >> den er sat til tre farver, gul så hvid så grøn
Avatar billede apo Praktikant
06. august 2005 - 20:49 #19
Hos mig går den fra hvid til grøn. Det virker som om, at scriptet gør det omvendte:

Baggrunden er hvis de første 5 seukunder og skifter så til grøn (vedblivende farve).
Avatar billede olebole Juniormester
06. august 2005 - 20:49 #20
'background' eller 'backgroundColor', når property'en sættes med JS  :)

<script type="text/JavaScript">
function setFarve(id){
  var elm = document.getElementById(id);
  elm.style.backgroundColor = '#FFFFFF';
  setTimeout("fjernFarve('"+id+"')", 5000);
}
function fjernFarve(id){
  document.getElementById(id).style.background = '#00FF00';
}
</script>

<table style="background-color:#00FF00" cellspacing="5" cellpadding="10" border="1">
<tr>
    <td><a href="#test" onclick="setFarve('test')">TEST</a></td>
</tr>
<tr>
    <td>Top
        <br><br><br><br><br><br><br><br><br><br><br><br><br>
        <br><br><br><br><br><br><br><br><br><br><br><br><br>
        Bund</td>
</tr>
<tr>
    <td id="test">Denne celle skal farves</td>
</tr>
</table>

Funker fint  :)
Avatar billede olebole Juniormester
06. august 2005 - 20:49 #21
- farverne vælges bare som ønsket  :)
Avatar billede busschou Praktikant
06. august 2005 - 20:50 #22
apo >> den er sat til gul til at starte med, så skifter den til hvis i fem sekunder, og så grøn som den bliver ved med
Avatar billede busschou Praktikant
06. august 2005 - 20:50 #23
Jeg satte kun de tre farver for at se hvad der skete :o)
Det er klart at den som er gul nu skal være den samme farve som den der er grøn nu hehe
Avatar billede busschou Praktikant
06. august 2005 - 20:51 #24
ole >> dvs generelt ingen bindestreger i css navne når de refereres til i js ? så er jeg det klogere :o)
Avatar billede busschou Praktikant
06. august 2005 - 20:53 #25
altså hvis din baggrund skal være hvid før og efter men grøn undervejs, så
.-----
<head>
<script type="text/javascript">
function setFarve(id){
  var elm = document.getElementById(id);
  elm.style.background = '#00FF00';
  setTimeout("fjernFarve('"+id+"')", 5000);
}
function fjernFarve(id){
  document.getElementById(id).style.background = '#FFFFFF';
}
</script>
</head>
<body>
<a href="#Svar4" onclick="setFarve('Svar4');">Spørgsmål4</a>

<table>
<tr><td style="background-color:#FFFFFF;" id="Svar4">blabla</td></tr>
</table>
</body>
</html>
Avatar billede olebole Juniormester
06. august 2005 - 20:54 #26
En bindestreg bliver til et stort bogstav. Det er den generelle regel:

background-color => backgroundColor
border-width => borderWidth
z-index => zIndex
... osv  :)

Man kan i øvrigt også bruge en anonym funktion i timeOut'en og dermed medsende en reference til selve objektet:

function setFarve(id){
  var elm = document.getElementById(id);
  elm.style.backgroundColor = '#FFFFFF';
  setTimeout(function(){fjernFarve(elm)}, 5000);
}
function fjernFarve(elm){
  elm.style.background = '#00FF00';
}
Avatar billede jesper-moeller Nybegynder
06. august 2005 - 21:04 #27
Pas på case-sensetivty

#svar4 er ikke = "Svar4"

citat fra indlæget

"Spørgsmål:
Hvordan kan jeg ved klik på følgende:
<a href="#svar4">Spørgsmål4</a>
... Få baggrunden på denne (længere nede ad siden)...:
<td id="Svar4"></td>"

"function setFarve(id){
  function setFarve(id).style.bgcolor = 'farve';
  setTimeout('fjernFarve(id)', 10000);
}
function fjernFarve(id){
  document.getElementById(id).style.bgcolor = 'farve';
}
<a href="#svar4" onclick="setFarve('Svar4');">Spørgsmål4</a>"
Avatar billede olebole Juniormester
06. august 2005 - 21:07 #28
- og da brugen af den anonyme funktion jo i virkeligheden er dobbelkonfekt, kunne vi ligeså godt korte det ned til:

function setFarve(id){
  var elm = document.getElementById(id);
  elm.style.backgroundColor = '#FFFFFF';
  setTimeout(function(){elm.style.backgroundColor="#00FF00"}, 5000);
}

- og endda kan vi nøjes med at retablere farven ved at sætte den til 'den tomme streng':

function setFarve(id){
  var elm = document.getElementById(id);
  elm.style.backgroundColor = '#FFFFFF';
  setTimeout(function(){elm.style.backgroundColor=""}, 5000);
}

- hvilket gør koden lidt lettere at vedligeholde.
Endnu lettere at vedligeholde bliver det, hvis highlight farven sættes i en global variabel, hvor sidens andre variabler sættes (hvis der er tale om flere scripts):

var hiLight = "#ffffff";

function setFarve(id){
  var elm = document.getElementById(id);
  elm.style.backgroundColor = hiLight;
  setTimeout(function(){elm.style.backgroundColor=""}, 5000);
}
Avatar billede busschou Praktikant
06. august 2005 - 21:10 #29
hehe skulle lige til at spørge med den anonyme funktion
Den giver bedst mening i det sidste eksempel :o)
Avatar billede apo Praktikant
06. august 2005 - 21:11 #30
Genialt! Det virker nu (Og både i IE og FF) :-)

Jeg skiftede scriptene ud i takt med olebole skiftede scriptene ud, så jeg er kommet frem til:

<script type="text/javascript">
var hiLight = "#ffffff";

function setFarve(id){
  var elm = document.getElementById(id);
  elm.style.backgroundColor = hiLight;
  setTimeout(function(){elm.style.backgroundColor=""}, 5000);
}
</script>

Er løsningen.
Avatar billede apo Praktikant
06. august 2005 - 21:13 #31
olebole og busschou, hvis I lægger svar så er der points til jer begge :-)

Jeg fordeler dem således: olebole 20pts og busschou 10pts
Avatar billede busschou Praktikant
06. august 2005 - 21:14 #32
fair for mig :o)
Jeg har vist lidt at lære endnu om javascript, meen det kommer vel :o)
Avatar billede olebole Juniormester
06. august 2005 - 21:15 #33
busschou>> Ja, da det er så kort et uddtryk, der skal afvikles, er det nok bedst her.

Er der tale om en større funktion, ville det dog give bedst overblik at bruge en separat funktion, som blev kaldt fra den anonyme funktion - som i det første eksempel  :)

- og et svar :)
Avatar billede apo Praktikant
06. august 2005 - 21:18 #34
Busschou > Det ser da ellers ud til at gå fremad :-)

Takker for hjælpen. Jeg har også selv lært lidt mere i dag... Points er givet :-)

// Lukker

Apo
Avatar billede olebole Juniormester
06. august 2005 - 21:27 #35
- var der ikke hele tiden tydelige fremskridt for en pæn flok brugere, tror jeg ikke, der ville være noget benzin til at drive Eksperten. Det er dét, der gør det sjovt at hænge ud og hjælpe for 'svarerne'  :)

- og tak for points  ;o)
Avatar billede apo Praktikant
06. august 2005 - 21:51 #36
Velbekomme :-)

Det har du jo ret i. Og man kan virkelig lære meget her på E, hvis man vil. Mere end man umiddelbart kan læse sig til i alverdens tutorials netop fordi, der her er mulighed for, at spørge omkring specifikke problemstillinger; og via svarene 'lære sig frem' til brugbare løsninger, på baggrund af andres viden og erfaringer.

Samtidig er det både sjovt og lærerigt, at hjælpe andre herinde, når man kan :-)
Avatar billede apo Praktikant
21. august 2005 - 23:04 #37
For de interesserede, er der en fortsættelse af spørgsmålet her: http://www.eksperten.dk/spm/641492

Apo
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