Avatar billede funkyloonie Nybegynder
27. maj 2003 - 11:14 Der er 25 kommentarer og
1 løsning

Overførsel af parameter fejler

mit problem opstår når setTimeout kaldes. parameteren som er et id overføres ikke/fejler. hvordan skal jeg gøre? afvikel evt. koden herunder.

window.setTimeout("clock(cup)", 1000);


<html>
<head></head>
<body>
<SCRIPT LANGUAGE='JavaScript'>
<!-- Begin

function clock(cup) {   

    window.setTimeout("clock(cup)", 1000);
}
//  End -->
</script>

                <form name='clock'>
                <input readonly style="background-color:CCCCCC;color:black;" id='cup_1' maxlength="0" type='text' size='42' name='timeleft' style='border: 0'>                        <br><span style='line-height: 20px'>&nbsp;<br>&nbsp;</span>
                </form>

<SCRIPT LANGUAGE='JavaScript'>
<!-- Begin
clock(document.getElementById("cup_1"));
//  End -->
</script>

</body>
</html>
Avatar billede nikolajdu Nybegynder
27. maj 2003 - 11:16 #1
window.setTimeout("clock("+cup+")", 1000);

Sådan?
Avatar billede Slettet bruger
27. maj 2003 - 11:18 #2
For det første har du både en form og en funktion med samme navn, hvilket kan give problemer. For det andet kan du ikke overføre objekter med setTimeout ligesom du fx kan overføre strenge.
Det nemmeste vil være at lægge en reference til objektet i en global variabel.
Avatar billede funkyloonie Nybegynder
27. maj 2003 - 11:18 #3
det giver en fejl om at et object ikke er defineret
Avatar billede funkyloonie Nybegynder
27. maj 2003 - 11:19 #4
hvis jeg så overfører objektets navn som en streng vil det måske lade sig gøre?
Avatar billede funkyloonie Nybegynder
27. maj 2003 - 11:27 #5
denne virker helelr ikek men er måske tættere på en løsning..?

<html>
<head></head>
<body>
<SCRIPT LANGUAGE='JavaScript'>
<!-- Begin

function clock(c) {   
    var cup = document.getElementById(c);
    setTimeout("clock("+c+")", 1000);
}
//  End -->
</script>

                <form name='clock'>
                <input readonly style="background-color:CCCCCC;color:black;" id='cup_1' maxlength="0" type='text' size='42' name='timeleft' style='border: 0'>                        <br><span style='line-height: 20px'>&nbsp;<br>&nbsp;</span>
                </form>

<SCRIPT LANGUAGE='JavaScript'>
<!-- Begin
clock("cup_1");
//  End -->
</script>

</body>
</html>
Avatar billede roenving Novice
27. maj 2003 - 13:52 #6
Du kan ikke opverføre parametre i et argument til setTimeout ;-|

-- så prøv (lidt besværligere, men hva'-):

<html>
<head></head>
<body>
<SCRIPT LANGUAGE='JavaScript'>
<!-- Begin
var c;
function clock() {   
    var cup = document.getElementById(c);
    setTimeout("clock()", 1000);
}
//  End -->
</script>

                <form name='clock'>
                <input readonly style="background-color:CCCCCC;color:black;" id='cup_1' maxlength="0" type='text' size='42' name='timeleft' style='border: 0'>                        <br><span style='line-height: 20px'>&nbsp;<br>&nbsp;</span>
                </form>

<SCRIPT LANGUAGE='JavaScript'>
<!-- Begin
c="cup_1"
clock();
//  End -->
</script>

</body>
</html>
Avatar billede funkyloonie Nybegynder
27. maj 2003 - 14:42 #7
sagen er desværre den at meningen er at der skal køre flere ure og denne metode vil desværre ikke kunne bruges. jeg lukker senere idag hvis der ikke er kommet nogle indlæg som jeg kan bruge.
Avatar billede roenving Novice
27. maj 2003 - 14:52 #8
-- hvorfor ikke ?-)

              <form name='clock'>
                <input readonly style="background-color:CCCCCC;color:black;" id='cup_1' maxlength="0" type='text' size='42' name='timeleft' style='border: 0'>                        <br><span style='line-height: 20px'>&nbsp;<br>&nbsp;</span>
                </form>

<SCRIPT LANGUAGE='JavaScript'>
<!-- Begin
c="cup_1"
clock();
//  End -->
</script>
              <form name='clock'>
                <input readonly style="background-color:CCCCCC;color:black;" id='cup_2' maxlength="0" type='text' size='42' name='timeleft' style='border: 0'>                        <br><span style='line-height: 20px'>&nbsp;<br>&nbsp;</span>
                </form>

<SCRIPT LANGUAGE='JavaScript'>
<!-- Begin
c="cup_2"
clock();
//  End -->
</script>
Avatar billede funkyloonie Nybegynder
27. maj 2003 - 14:55 #9
når siden er loadet vil c være "cup_2" og derfor vil begge tråde af clock arbejde med det id.
Avatar billede funkyloonie Nybegynder
27. maj 2003 - 14:58 #10
løsningen er så at lave clock_1() og clock_2() funktioner men det er ikke så kønt. overvejer pt. hvad løsningen skal være.
Avatar billede roenving Novice
27. maj 2003 - 15:03 #11
Jamen, så skal du da bare sætte den til det du ønsker den skal være, hvis du skal ændre ...

-- du kan sagtens have 100 timere igang ad gangen ...

prøv f.eks.

function clock() {   
    var cup = document.getElementById(c);
    alert(setTimeout("clock()", 1000));
}

-- så får du to forskellige id'er hvis du gør som ovenstående ...

Hvis du så har brug for at ændre, skal du gemme id'et for det skal bruges til at resette timeout'en.

Hvis du skal bruge det til et ur, skulle du forøvrigt overveje at bruge setInterval - som kommer igen og igen -- se et eksempel på det på

http://www.eksperten.dk/spm/357273
Avatar billede funkyloonie Nybegynder
27. maj 2003 - 15:50 #12
kan du vise et helt sammenhængende eksempel hvor jeg kan se at det virker for jeg tror ikke helt på at det kan lykkes på den måde. vil gerne se at clock() skiftevis arbejder med "cup_1" og "cup_2", evt ved alert(c);.
Avatar billede roenving Novice
27. maj 2003 - 16:08 #13
Sådan ?-)

<html>
<head>
<title>TÆLLERNE</title>
<script language="javascript">

var nu = new Date();
var snart = new Date(2003,4,30);
var snartmsek = snart.getTime();
var ids = new Object();
var taendt;

function startTael() {
  ids[0]=setInterval(tael1,500);
  ids[1]=setInterval(tael2,1000);
  ids[2]=setInterval(tael3,5000);
  taendt=true;
}

function tael1(){
  document.tform.t1.value=parseInt(document.tform.t1.value)+1
}

function tael2(){
  nu = new Date();
  msek = snartmsek - nu.getTime();
  var sek = Math.floor(msek/1000);
  var min = Math.floor(sek/60);
  var tim = Math.floor(min/60);
  var dg = Math.floor(tim/24);
  sek = sek%60;
  min = min%60;
  tim = tim%24;
  document.tform.t2.value = "" + dg + " dg. " + tim + " t. " + min + " min. " + sek + " sek.";
  //setTimeout(startTael(), 1000);
}

function tael3(){
  document.tform.t3.value=parseInt(document.tform.t3.value)+1
}

function toggleStart(){
  if (taendt){
    clearInterval(ids[1]);
  }else{
    ids[1]=setInterval(tael2,1000);
  }
  taendt=!taendt;
}



</script>
</head>

<body onload='startTael()'>
<form name="tform">
<!-- : <input type=text name="t0"><br> -->
Tæl hvert ½ sekund:&nbsp;&nbsp;<input type=text name="t1" value=0><br>
Tæl hvert sekund:&nbsp;&nbsp;<input type=text name="t2">&nbsp;&nbsp;&nbsp;<input type=button onclick="toggleStart()" value="tænd/sluk"><br>
Tæl hvert 5. sekund:&nbsp;&nbsp;<input type=text name="t3" value=0>
</form></body>
</html>
Avatar billede funkyloonie Nybegynder
27. maj 2003 - 16:17 #14
ok. jeg tror godt jeg kan få noget ud af det. det jeg skal lave skal være 100% dynamisk. hvis du giver et svar så får du points.
Avatar billede roenving Novice
27. maj 2003 - 16:20 #15
Velbekomme '-)
Avatar billede roenving Novice
27. maj 2003 - 19:56 #16
Takker for points ;~}
Avatar billede funkyloonie Nybegynder
27. maj 2003 - 19:57 #17
jeg takker mest
Avatar billede Slettet bruger
27. maj 2003 - 20:44 #18
Man kan godt overføre parametre med setTimeout. Det gøres bare på denne måde:

setTimeout("clock('" + c + "');", 100);
Avatar billede roenving Novice
27. maj 2003 - 21:22 #19
>>phoenixv -- jeg har forsøgt at finde noget, som kunne underbygge hvad du skriver, men det er ikke lykkedes mig ...

Det skal siges at min påstand bygger på et udsagn fra Danny Goodman (Javascript Bible) -- og han nævner så en argument-overførsels-metode, som jeg så har kunnet genfinde i http://devedge.netscape.com/library/manuals/2000/javascript/1.3/reference/window.html

setInterval(function, msec[, arg1[, ..., argN]]) og
setTimeout(function, msec[, arg1[, ..., argN]])

-- men er det fuldt implementeret i hvilke browsere ?-)
Avatar billede Slettet bruger
27. maj 2003 - 22:14 #20
Det, setTimeout funktionen gør, er at afvikle den streng, som man har givet den med en eval-lignende funktion. Derfor kan du tilføje så mange strenge e.l. du vil, så længe det er gjort korrekt.
Se fx dette, der er testet i IE6, NS7 og Opera7:

<html>
<head>
<script>
function skift(txt) {
  document.body.innerHTML = txt + " " + new Date().toGMTString();
  setTimeout("skift('" + txt + "');", 1000);
}
</script>
</head>
<body onLoad="skift('bla');">
</body>
</html>
Avatar billede Slettet bruger
27. maj 2003 - 22:17 #21
I øvrigt kan jeg heller ikke få Danny Goodman's eksempel til at virke.
Avatar billede Slettet bruger
27. maj 2003 - 22:18 #22
Hov, det virker i Netscape:

<html>
<head>
<script>
function skift() {
  txt = skift.arguments[0];
  document.body.innerHTML = txt + " " + new Date().toGMTString();
  setTimeout(skift, 1000, txt);
}
</script>
</head>
<body onLoad="skift('bla');">
</body>
</html>

Dog ikke i hverken IE6 eller Opera7.
Avatar billede roenving Novice
27. maj 2003 - 22:33 #23
-- Danny nævner netop at det kun virker i Netscape ...

-- ved du forøvrigt hvor man finder en reference til hvilke objekter man Skal have i sin implementering af ECMA-script ?-)

-- efter lidt roden rundt på ecma-international.org (endnu et sted det var svært at finde rundt på !-| opgav jeg at finde andet end referencer til core ECMA-262 + udvidelserne i de senere udgaver -- men intet om browser-objekter, egenskaber og metoder ...
Avatar billede Slettet bruger
28. maj 2003 - 12:23 #24
Jeg har også haft store problemer med at finde nyttige referencer til ECMA-script. Det er simpelthen en jungle, og derfor har jeg delvist opgivet. Den bedste metode er fx at læse ugentlige JavaScript-klummer e.l., hvor eksperter giver deres syn på sagen.

I tilfældet med setTimeout er mit eksempel dog helt "lovligt" og meget brugt.
Avatar billede roenving Novice
28. maj 2003 - 13:55 #25
Muy bueno ,-)

-- så har jeg igen lært noget ...

-- jeg lærer, ergo lever jeg *gg*
Avatar billede Slettet bruger
29. maj 2003 - 11:11 #26
:)
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