Avatar billede anjensen1 Novice
14. oktober 2001 - 13:38 Der er 19 kommentarer og
1 løsning

timeOut med parametre

Hej
Jeg har denne kontruktion
(ser forfærdeligt ud osv -men det er oxå kun en test ..)

<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">
<HTML>
<HEAD>
    <TITLE>[Ingen titel]</TITLE>
<!-- Minus AutoDato -->
<META NAME=\"Generator\" CONTENT=\"Stone\'s WebWriter 3\">
<STYLE TYPE=\"text/css\">
</STYLE>

<SCRIPT TYPE=\"text/javascript\">
<!--
var farvet;
var timerID=null;

function change(objID,farvet)
{
if (farvet==true) objID.bgColor=\'red\'; else objID.bgColor=\'white\';
farvet=!farvet;
/* timeout med parametre: setTimeout(function, msec[, arg1[, ..., argN]])*/
    timerID=setTimeout(\"change()\",500,objID,farvet);

}



function change2()
{
if (farvet==true) nr2.bgColor=\'red\'; else nr2.bgColor=\'white\';
farvet=!farvet;
/*timeout uden params setTimeout(expression, msec)*/
  timerID=setTimeout(\"change2()\",500);
}


-->
</SCRIPT>

</HEAD>
<BODY>
<TABLE BORDER=\"1\">
<TR>
    <TD ID=\"nr1\" onmouseover=\"change(nr1,true)\">1111111111</TD>
</TR>
<TR>
    <TD ID=\"nr2\" onmouseover=\"change2(nr2,true)\">2222222222</TD>
</TR>
</TABLE>



<P class=\"datoen\" > Opdateret d. 2001 </P>

</BODY>
</HTML>

funktion change er med parametre og virker IKKE
funktion change2 er uden parametre og virker

Mit spørgsmål er: hvad er der galt med
function change(objID,farvet)

og hvordan overføres/anvendes generelt parametre sammen med timeOut

mvh. a.

Avatar billede jakoba Nybegynder
14. oktober 2001 - 13:46 #1
har du prøvet:
    timerID=setTimeout( change ,500,objID,farvet);

mvh JakobA
Avatar billede roenving Novice
14. oktober 2001 - 13:46 #2
Har du (i den med parametre) prøvet:

timerID=setTimeout(\"change(objID,farvet)\",500);

Desuden mangler der en ordentlig reference til dine objekter -- det kan godt være at du (og måske IE) kan gennemskue, at når du skriver \'nr2\', så menes der det td-element, som hedder \'nr2\', men hvis det skal gøres ordentlig må der lidt mere reference til, f.eks. (IE4+):

document.all[objID]...

eller (IE5+;NS6+)
document.getElementById(objID)...

hth
jes
Avatar billede anjensen1 Novice
14. oktober 2001 - 13:48 #3
..øv i tabellen skal det naturligvis være
<TD ID=\"nr2\" onmouseover=\"change2()\">2222222222</TD>

uden params i kaldet
lille dummer..
Avatar billede anjensen1 Novice
14. oktober 2001 - 13:56 #4
Hej begge
Flot at få svar så hurtigt!
Jacob
      timerID=setTimeout( change ,500,objID,farvet);
Giver
    --> Error: udefined er ikke object

Jes
timerID=setTimeout(\"change(objID,farvet)\",500);
Giver :
Error: objID er ikke defineret
Det er NETOP det der er underligt! objID \'går tabt\'

Det med referencen skal jeg lige kigge på -men du har jo ret!

mvh- a.
Avatar billede anjensen1 Novice
14. oktober 2001 - 14:01 #5
Jes
document.all[objID].bgColor=\'red\'
giver -document.all[objID] -er ikke et objekt
??
Avatar billede jakoba Nybegynder
14. oktober 2001 - 14:05 #6
i funktionen

function change(objID,farvet)
{
if (farvet==true) objID.bgColor=\'red\'; else objID.bgColor=\'white\';
farvet=!farvet;
/* timeout med parametre: setTimeout(function, msec[, arg1[, ..., argN]])*/
    timerID=setTimeout(\"change()\",500,objID,farvet);

}

er  objId  og  farvet  parameternavne, og de navne eksisterer kun imens funktionen kører.
med
    timerID=setTimeout(\"change(objID,farvet)\",500);
bliver navnene lagt i en streng der først fortolkes 555ms efter funktionen er færdig. Det vil definitivt ikke gå godt.

Vi kan sige:
    timerID=setTimeout(\"change(objID,\"+farvet+\")\",500);

så vil parameteren  farvet  blive evalueret og dens værdi blive skrevet ind i strengen.

Men en objektreferences værdi kan slet ikke skrives i en streng, så der skal noget andet til.

mvh JakobA

Avatar billede anjensen1 Novice
14. oktober 2001 - 14:05 #7
Det gør
document.all.objID.style.bgColor=\'red\';
også..
Hvad er der galt?
Avatar billede jakoba Nybegynder
14. oktober 2001 - 14:07 #8
Næe, objId er jo navnet på objektet (eller burde være det. \'nr1\' med plinger om :-)), så det går:
    timerID=setTimeout(\"change(\"+objID+\",\"+farvet+\")\",500);

mvh JakobA
Avatar billede jakoba Nybegynder
14. oktober 2001 - 14:10 #9
Ups. og vi skal sørge for det stadig er en streng når det ankommer til funktionen change:
    timerID=setTimeout(\"change(\'\"+objID+\"\',\"+farvet+\")\",500);

mvh JakobA
Avatar billede anjensen1 Novice
14. oktober 2001 - 14:13 #10
Jamen Jacob
de to param objId  og  farvet bliver jo sendt med \'ud\' af funktionen som aktuelle parametre de skulle dermed være \'bevaret\' -Det er jo det normale -Eks
function1(noget)
{ function2(noget)
}

function2(nogetIgen)
{ document.write(\'nu skrives noget \',noget)
}

Hvorfor er det anderledes med timeout
..nja DEN er jo en del af sproget...!
Humlen må ligge i
setTimeout(function, msec[, arg1[, ..., argN]])
som er sprogets syntaks..
Derfor troede jeg
timerID=setTimeout(\"change()\",500,objID,farvet);
var den rigtige men den kør ikke..
Avatar billede anjensen1 Novice
14. oktober 2001 - 14:18 #11
Min sidste var før dine gnyffer *s*
Med den sidste kommer der ingen fejl men det kører ikke
//timerID=setTimeout(\"change(\'\"+objID+\"\',\"+farvet+\")\",500);

Denne her kører heller ikke
timerID=setTimeout(\"change()\",500,+\'\"+objID+\"\',\"+farvet+\");
Avatar billede jakoba Nybegynder
14. oktober 2001 - 14:21 #12
Jeg tror også du skal bruge det andet format. Men første parameter er funktionen (dvs blot funktionens navn), ikke en streng med et funktionskald i.
altså:
    timerID=setTimeout( change ,500,objID,farvet);

Jeg har lige tested og det virker faktisk. Den undefined du fik kom nok af at javascript kikkede efter en variabel ved navn  nr1  og kunne ikke finde en, der skal citationstegn om:

    <TD ID=\"nr1\" onmouseover=\"change(\'nr1\',true)\">1111111111</TD>

mvh JakobA
Avatar billede anjensen1 Novice
14. oktober 2001 - 14:24 #13
timerID=setTimeout(\"change(\'\"+objID+\"\',\"+farvet+\")\",500);

Afleverer den ikke blot strenge?
Er begrebet \'ID\' ikke gået fløjten på vejen??

Jeg vég sq ikke... 8:|
Avatar billede anjensen1 Novice
14. oktober 2001 - 14:26 #14
VIRKER DET:))
Gider du klistre det ind ?

Avatar billede anjensen1 Novice
14. oktober 2001 - 14:37 #15
<TD ID=\"nr1\" onmouseover=\"change(\'nr1\',true)\">1111111111</TD>
med
timerID=setTimeout( change ,500,objID,farvet);

giver
Error undefined er ikke et objekt
:|
Avatar billede roenving Novice
14. oktober 2001 - 14:40 #16
Du bliver i hvert fald, som jakoba og jeg har skrevet flere gange nødt til at overføre dine parametre til funktionen, de er ulovlige som parametre til setTimeout.
Avatar billede anjensen1 Novice
14. oktober 2001 - 14:44 #17
>>jes
Nej ifølge js1.3 spec kan der overføres param (argumenetr) ved
/* setTimeout(function, msec[, arg1[, ..., argN]])
Det er netop dét der er humlen

Avatar billede jakoba Nybegynder
14. oktober 2001 - 15:02 #18
Gaah. Jo det virker, men kun i Netscape. Og der virker resten af din kode ikke et dyt.

Har lavet en testdemo: http://www.jakoba.dk/eksperten/exp120686.html

mvh JakobA
Avatar billede anjensen1 Novice
14. oktober 2001 - 15:17 #19
Superflot jacob!
Det er flot set at der skulle laves den gnyf-gymnastik!
tak!
Avatar billede roenving Novice
15. oktober 2001 - 09:08 #20
Jamen, så har jeg jo igen lært noget (også vha. 120900) =;·]
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