Avatar billede jakobdo Ekspert
02. april 2005 - 23:07 Der er 8 kommentarer og
1 løsning

Sende objekt videre i funktion

Jeg har en div, med koden: <div onmouseout="mouseout(this)">
Jeg brugte først koden:

function mouseOut(obj)
{
    obj.style.backgroundColor = "#4682B4";
    obj.style.color = "white";
    obj.childNodes[0].style.color = "white";
}
Og det virkede fint.
Nu ønskede jeg så i mellem tiden et delay, så prøvede følgende:

function mouseOut(obj)
{
    timeout = setTimeout("funcOut("+obj+")", 2000);
}

function funcOut(obj)
{
    obj.style.backgroundColor = "#4682B4";
    obj.style.color = "white";
    obj.childNodes[0].style.color = "white";
}

Men jeg får fejlen:

Error: missing ] after element list
Line: 37, Column: 16
Source Code:
funcOut([object HTMLDivElement])

Hvordan får jeg det til at virke?
Avatar billede roenving Novice
02. april 2005 - 23:24 #1
Grunden til fejlen er, at en tekst i en timeout først fortolkes, når tiden er udløbet, og indtil da er det bare en tekststreng ...

-- og for at skabe en tekststreng er javascript-fortolkeren så venlig at tænke: "Argh, man da ikke konkatenere en tekststreng med et objekt, så jeg må hellere kalde objektets .toSting()-metode, så konkateneringen kan ske" !-)

-- så løsningen er at opbevare objektet i en global variabel imens:

var outObj = null;
function mouseOut(obj)
{
    outObj = obj;
    timeout = setTimeout("funcOut()", 2000);
}

function funcOut()
{
  if(outObj){
    outObj.style.backgroundColor = "#4682B4";
    outObj.style.color = "white";
    outObj.childNodes[0].style.color = "white";
    outObj = null;
  }
}
Avatar billede olebole Juniormester
03. april 2005 - 00:08 #2
<ole>

Det er i hvert fald én løsning på problemet  :)
En anden kunne være at pakke funktions kaldet ind i en anonym funktion:

function mouseOut(obj) {
    timeout = setTimeout(function(){funcOut(obj)}, 2000);
}

function funcOut(obj) {
    obj.style.backgroundColor = "#4682B4";
    obj.style.color = "white";
    obj.childNodes[0].style.color = "white";
}

/mvh
</bole>
Avatar billede olebole Juniormester
03. april 2005 - 00:10 #3
Ved større JS-applikationer er sidste måde at foretrække, da man i sådanne situationer altid er lidt 'fedtet' med det globale scope  ;o)
Avatar billede roenving Novice
03. april 2005 - 00:11 #4
Tjah, sådan sker det, når man reagerer direkte på en fejlmeddelelse !-)

-- og jeg har så sent som i går netop brugt den konstruktion til netop det problem ...
Avatar billede olebole Juniormester
03. april 2005 - 00:12 #5
;D
Avatar billede jakobdo Ekspert
03. april 2005 - 08:26 #6
OleBole du er for sej! :o)
Smid et svar!
PS: Sidder du og keder dig sådan sent ud på aftenen, så du bliver nød til at sidde og "skrive" lidt med dig selv! :o)
Avatar billede futurefreak Nybegynder
03. april 2005 - 10:46 #7
Olebole >> Hej, har du ikke glemt noget :-)
Avatar billede jakobdo Ekspert
11. april 2005 - 21:20 #8
Jo, at smide et svar...
Avatar billede jakobdo Ekspert
30. maj 2005 - 17:11 #9
Så snupper jeg dem selv...
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