/ Forside / Teknologi / Udvikling / Java Scripts / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Java Scripts
#NavnPoint
molokyle 5410
Klaudi 2799
smorch 2439
kim 1360
Harlekin 1134
bentjuul 984
gibson 800
severino 695
Random 675
10  konsulent.. 626
Javascript: setTimeout virker ikke?
Fra : Morten


Dato : 16-04-07 13:03

Hej når jeg afvikler nedenstående side på XP med explorer så virker det
ikke. Jeg ønsker noget så simpelt som en tæller der med skal tælle fra 1 til
5 med et sekunds mellemrum. Nogen der ved hvorfor dulen det ikke virker?

<html>
<head>
</head>
<body onLoad="Counter();">
<body>


<SCRIPT LANGUAGE="JavaScript">
function Counter() {
var i = 1;
function setCounter() {
i += 1;
if (i < 5) {
document.write(i);
setTimeout("setCounter()",1000);
}
}
setCounter();
}
</SCRIPT>


</body>
</html>



 
 
Birger Sørensen (16-04-2007)
Kommentar
Fra : Birger Sørensen


Dato : 16-04-07 17:11

Morten wrote in dk.edb.internet.webdesign.clientside:
> Hej når jeg afvikler nedenstående side på XP med explorer så virker det
> ikke. Jeg ønsker noget så simpelt som en tæller der med skal tælle fra 1 til
> 5 med et sekunds mellemrum. Nogen der ved hvorfor dulen det ikke virker?
>
> <html>
> <head>
> </head>
> <body onLoad="Counter();">
> <body>
>
>
> <SCRIPT LANGUAGE="JavaScript">
> function Counter() {
> var i = 1;
> function setCounter() {
> i += 1;
> if (i < 5) {
> document.write(i);
> setTimeout("setCounter()",1000);
> }
> }
> setCounter();
> }
> </SCRIPT>
>
>
> </body>
> </html>
>
>

Fordi det hele står inde i "function Counter()" der aldrig bliver kaldt...
Noget i retning af :

<SCRIPT LANGUAGE="JavaScript">
var i = 0;

function setCounter() {
i += 1;
if (i < 5) {
document.write(i);
setTimeout("setCounter()",1000);
}
}

setTimeout("setCounter()",1000);
</SCRIPT>

Birger

--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

John S. Thomsen (16-04-2007)
Kommentar
Fra : John S. Thomsen


Dato : 16-04-07 20:58

Birger Sørensen wrote:
> Morten wrote in dk.edb.internet.webdesign.clientside:
>> Hej når jeg afvikler nedenstående side på XP med explorer så virker det
>> ikke. Jeg ønsker noget så simpelt som en tæller der med skal tælle fra 1 til
>> 5 med et sekunds mellemrum. Nogen der ved hvorfor dulen det ikke virker?
>>
>> <html>
>> <head>
>> </head>
>> <body onLoad="Counter();">
>> <body>
>>
>>
>> <SCRIPT LANGUAGE="JavaScript">
>> function Counter() {
>> var i = 1;
>> function setCounter() {
>> i += 1;
>> if (i < 5) {
>> document.write(i);
>> setTimeout("setCounter()",1000);
>> }
>> }
>> setCounter();
>> }
>> </SCRIPT>
>>
>>
>> </body>
>> </html>
>>
>>
>
> Fordi det hele står inde i "function Counter()" der aldrig bliver kaldt...

Man skal aldrig sige aldrig

<body onLoad="Counter();">

> Noget i retning af :
>
> <SCRIPT LANGUAGE="JavaScript">
> var i = 0;
>
> function setCounter() {
> i += 1;
> if (i < 5) {
> document.write(i);

BOOM! You are dead!

"document.write ... After the page has completed loading, the rules
change. Instead of adding content to the page, it will replace the page."

-- http://www.howtocreate.co.uk/tutorials/javascript/writing

Det vil sige, at setCounter() slet ikke eksisterer, når den kaldes efter
1 sekund.

> setTimeout("setCounter()",1000);
> }
> }
>
> setTimeout("setCounter()",1000);
> </SCRIPT>
>
> Birger
>

Birger Sørensen (16-04-2007)
Kommentar
Fra : Birger Sørensen


Dato : 16-04-07 21:33

John S. Thomsen wrote in dk.edb.internet.webdesign.clientside:
> Birger Sørensen wrote:
> > Morten wrote in dk.edb.internet.webdesign.clientside:
> >> Hej når jeg afvikler nedenstående side på XP med explorer så virker det
> >> ikke. Jeg ønsker noget så simpelt som en tæller der med skal tælle fra 1 til
> >> 5 med et sekunds mellemrum. Nogen der ved hvorfor dulen det ikke virker?
> >>
> >> <html>
> >> <head>
> >> </head>
> >> <body onLoad="Counter();">
> >> <body>
> >>
> >>
> >> <SCRIPT LANGUAGE="JavaScript">
> >> function Counter() {
> >> var i = 1;
> >> function setCounter() {
> >> i += 1;
> >> if (i < 5) {
> >> document.write(i);
> >> setTimeout("setCounter()",1000);
> >> }
> >> }
> >> setCounter();
> >> }
> >> </SCRIPT>
> >>
> >>
> >> </body>
> >> </html>
> >>
> >>
> >
> > Fordi det hele står inde i "function Counter()" der aldrig bliver kaldt...
>
> Man skal aldrig sige aldrig
>
> <body onLoad="Counter();">
>
> > Noget i retning af :
> >
> > <SCRIPT LANGUAGE="JavaScript">
> > var i = 0;
> >
> > function setCounter() {
> > i += 1;
> > if (i < 5) {
> > document.write(i);
>
> BOOM! You are dead!
>
> "document.write ... After the page has completed loading, the rules
> change. Instead of adding content to the page, it will replace the page."
>
> -- http://www.howtocreate.co.uk/tutorials/javascript/writing
>
> Det vil sige, at setCounter() slet ikke eksisterer, når den kaldes efter
> 1 sekund.
>
> > setTimeout("setCounter()",1000);
> > }
> > }
> >
> > setTimeout("setCounter()",1000);
> > </SCRIPT>
> >
> > Birger
> >


Tror nu ikke nogen dør af det...

<SCRIPT LANGUAGE="JavaScript">
var i = 1;

function setCounter() {
i += 1;
if (i < 5) {
nr.innerText = i;
setTimeout("setCounter()",1000);
}
}

setTimeout("setCounter()",1000);
</SCRIPT>

<body>
<span id="nr"></span>


Birger

--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

Christian Hansen (17-04-2007)
Kommentar
Fra : Christian Hansen


Dato : 17-04-07 06:40

Hej Morten

Du benytter nestede funktioner, det er IE ikke glad for - desværre.
Derydover skal du ikke have 2 bodytags - det er IE heller ikke glad for.
Document.write er ikke godt at bruge til løbende indhold - brug i stedet
eksempelvis innerHTML. Når man ønsker en handling gentaget mere end
en gang, er setInterval mere praktisk i brug end setTimeout.

Jeg har for lang tid siden lavet et skript, der tæller ned. Du kan se
det her:

<http://www.chrsen.dk/fundanemt/files/scripter/javascript/misc/countdown.html>

Mvh Christian

Morten wrote:
> Hej når jeg afvikler nedenstående side på XP med explorer så virker det
> ikke. Jeg ønsker noget så simpelt som en tæller der med skal tælle fra 1 til
> 5 med et sekunds mellemrum. Nogen der ved hvorfor dulen det ikke virker?
>
> <html>
> <head>
> </head>
> <body onLoad="Counter();">
> <body>
>
>
> <SCRIPT LANGUAGE="JavaScript">
> function Counter() {
> var i = 1;
> function setCounter() {
> i += 1;
> if (i < 5) {
> document.write(i);
> setTimeout("setCounter()",1000);
> }
> }
> setCounter();
> }
> </SCRIPT>
>
>
> </body>
> </html>
>
>

Morten (17-04-2007)
Kommentar
Fra : Morten


Dato : 17-04-07 08:06

Begge eksempler virker. Takker mange gange for svarene :).



Morten (17-04-2007)
Kommentar
Fra : Morten


Dato : 17-04-07 09:09

Egentlig søger jeg en løsning hvor denne nedtælling er en underframe og hvor
den hver 5 sekund skal undersøges om en anden underframe viser siden
rigtigt. Den anden underframe har en metarefresh indbygget og kan måske
pludselig få en "siden kan ikke vises" fejl. Så er det at
nedtællingsscriptet gerne skulle kunne finde ud af det og så indsætte en ny
side i den anden underframe som ikke virker.

Herunder er nedtællingsscriptet som anbefalet herinde. Problemet er at

txt = window.document.write(parent.frames["meta"].document.location.href);

hele tiden er den samme selvom jeg fremprovokerer at den anden underframe
med navn meta får en "siden kan ikke vises". Jeg havde regnet med at txt
blev ingenting menn det sker altså ikke.



<html>
<head>
<SCRIPT LANGUAGE="JavaScript">
var i = 0;

function setCounter() {
i += 1;
if (i < 500) {
txt = window.document.write(parent.frames["meta"].tu);
nr.innerText = txt;
setTimeout("setCounter()",1000);
}
}

setTimeout("setCounter()",1000);
</SCRIPT>
</head>


<body>
<span id="nr"></span>
<p></p>
</body>
</html>



Birger Sørensen (17-04-2007)
Kommentar
Fra : Birger Sørensen


Dato : 17-04-07 13:52

Morten wrote in dk.edb.internet.webdesign.clientside:
> Egentlig søger jeg en løsning hvor denne nedtælling er en underframe og hvor
> den hver 5 sekund skal undersøges om en anden underframe viser siden
> rigtigt. Den anden underframe har en metarefresh indbygget og kan måske
> pludselig få en "siden kan ikke vises" fejl. Så er det at
> nedtællingsscriptet gerne skulle kunne finde ud af det og så indsætte en ny
> side i den anden underframe som ikke virker.
>
> Herunder er nedtællingsscriptet som anbefalet herinde. Problemet er at
>
> txt = window.document.write(parent.frames["meta"].document.location.href);
>
> hele tiden er den samme selvom jeg fremprovokerer at den anden underframe
> med navn meta får en "siden kan ikke vises". Jeg havde regnet med at txt
> blev ingenting menn det sker altså ikke.
>
>
>
> <html>
> <head>
> <SCRIPT LANGUAGE="JavaScript">
> var i = 0;
>
> function setCounter() {
> i += 1;
> if (i < 500) {
> txt = window.document.write(parent.frames["meta"].tu);
> nr.innerText = txt;
> setTimeout("setCounter()",1000);
> }
> }
>
> setTimeout("setCounter()",1000);
> </SCRIPT>
> </head>
>
>
> <body>
> <span id="nr"></span>
> <p></p>
> </body>
> </html>
>
>

Du kan prøve at bruge document.URL i stedet. Den er principielt den samme som
document.location.href - men jeg mener den giver den viste i stedet for den
søgte...
Alternativt kan du måske bruge document.title. Den giver titlen på det viste
document. Hvis den søgte side ikke kan findes, skulle den jo så være noget
andet..

txt = window.document.write(parent.frames["meta"].document.title);
if ( txt != "forventet title") { // hent den igen..
}

Birger

--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

Morten (18-04-2007)
Kommentar
Fra : Morten


Dato : 18-04-07 14:31

document.title giver fint titlen men der er noget der fuldstændig mangler i
min logik om programmering. Nestående skriver title selvom jeg sætter txt =
"a"????? Der sker altså et eller andet mærkeligt når jeg kalder "txt =
window.document.write(parent.frames["meta"].document.title);"


<html>
<head>
<SCRIPT LANGUAGE="JavaScript">
var i = 0;
var txt = "";

function setCounter() {
i += 1;
if (i < 500) {
txt = window.document.write(parent.frames["meta"].document.title);
txt = "a";

nr.innerText = txt;
setTimeout("setCounter()",1000);
}
}

setTimeout("setCounter()",1000);
</SCRIPT>
</head>
<body>
<span id="nr"></span>
<p></p>
</body>
</html>



Birger Sørensen (18-04-2007)
Kommentar
Fra : Birger Sørensen


Dato : 18-04-07 19:54

Morten wrote in dk.edb.internet.webdesign.clientside:
> document.title giver fint titlen men der er noget der fuldstændig mangler i
> min logik om programmering. Nestående skriver title selvom jeg sætter txt =
> "a"????? Der sker altså et eller andet mærkeligt når jeg kalder "txt =
> window.document.write(parent.frames["meta"].document.title);"
>
>
> <html>
> <head>
> <SCRIPT LANGUAGE="JavaScript">
> var i = 0;
> var txt = "";
>
> function setCounter() {
> i += 1;
> if (i < 500) {
> txt = window.document.write(parent.frames["meta"].document.title);
> txt = "a";
>
> nr.innerText = txt;
> setTimeout("setCounter()",1000);
> }
> }
>
> setTimeout("setCounter()",1000);
> </SCRIPT>
> </head>
> <body>
> <span id="nr"></span>
> <p></p>
> </body>
> </html>
>
>

Nej, det er godt nok... :)
document.write() skal skrive til et åbent dokument. Dvs. det skal normalt åbnes
først og lukkes bagefter.
document.open();
document.write(...);
document.close();
Det betyder at indholdet i document erstattes med det du skriver.
I dit script bliver txt formentlig sat til "undefined", da document.write ikke
returnerer noget.
Efterfølgende sætter du txt til "a", som du sætter in i tag nr - men det
eksisterer ikke længere.
Du bør faktisk få en fejl der, og du skal se titlen på skærmen.
Hvis du skriver
txt = parent.frames["meta"].document.title;
skulle du se dit "a"...

Håber det er forståeligt... :)

Birger


--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

Morten (19-04-2007)
Kommentar
Fra : Morten


Dato : 19-04-07 12:00

Hej Birger. Du har ret i at den viser title men jeg får godt nok ingen fejl.

Nå - men det du skriver med at bruge

parent.frames["meta"].document.title;

virker :). Og nu får jeg også den aktuelle tile "siden blev ikke fundet" når
refresh frames provokeres til at gå ned. Nu kan jeg komme videre selv om jeg
ikke helt forstår det du skriver om hvordan det virker. Men det kommer nok
på et tidspunkt når jeg har arbejdet lidt mere med javascript. Tak for
hjælpen.



Birger Sørensen (19-04-2007)
Kommentar
Fra : Birger Sørensen


Dato : 19-04-07 13:16

Morten wrote in dk.edb.internet.webdesign.clientside:
> Hej Birger. Du har ret i at den viser title men jeg får godt nok ingen fejl.
>
> Nå - men det du skriver med at bruge
>
> parent.frames["meta"].document.title;
>
> virker :). Og nu får jeg også den aktuelle tile "siden blev ikke fundet" når
> refresh frames provokeres til at gå ned. Nu kan jeg komme videre selv om jeg
> ikke helt forstår det du skriver om hvordan det virker. Men det kommer nok
> på et tidspunkt når jeg har arbejdet lidt mere med javascript. Tak for
> hjælpen.
>
>

Velbekomme Morten.
Det er også i den lidt mere avancerede ende...
Som hovedregel, skal du kun bruge document.write( 'tekst') direkte i body - der
vil 'tekst' blive blandet med sidens øvrige indhold, (og det er ikke ret tit
man har noget i javascript der skal vises på skærmen, allerede inden siden er
færdig med at loade..)
Når document.write(..) anvendes i funktioner, slettes sidens aktuelle indhold
og erstattes af det du "writer" (tekst), og det er heller ikke ret tit, det er
det, der er brug for...

Birger

--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

Søg
Reklame
Statistik
Spørgsmål : 177580
Tips : 31968
Nyheder : 719565
Indlæg : 6409079
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste