Newsgroup: it.comp.lang.javascript
Titolo: Countdown

Ciao a tutti
io ho un piccolo problema di comprensione nel javascript..
probabilmente dovuto alla mia inesperienza.
Cercavo di fare un esercizio semplice di un orologio ed un countdown. Il 
problema è che funziona solo in parte. Ho creato 4 funzioni:
<script language="javascript">
function fiveSeconds(conto){
	var x = --conto
	document.getElementById('testo2').innerHTML =('Mancano '+x+' secondi')
}
function countDown(){
	setInterval("fiveSeconds(5);",1000)
}
function timeOut(){
	var orologio= new Date()
	var ora=orologio.getHours()
	if (ora<10){ora='0'+ora}
	var minuti=orologio.getMinutes()
	if (minuti<10){minuti='0'+minuti}
	var secondi=orologio.getSeconds()
	if (secondi<10){secondi='0'+secondi}
	document.getElementById('testo').innerHTML =('Sono le: 
'+ora+':'+minuti+':'+secondi+'.')
}
function doing(){
	setInterval("timeOut();",1000)
}
</script>
<div id="testo">Clicca <a href="javascript:doing()">qui </a>per attivare 
l'orologio..</div>
<div id="testo2">Clicca <a href="javascript:countDown()">qui </a>per 
attivare il conto alla rovescia..</div>
Il problema effettivo è che, mentre l'orologio funziona correttamente, 
il countdown no. Ho anche capito di cosa si tratta ma non so come fare 
per sistemare..
In pratica, per il countdown ho 2 funzioni: fiveSeconds e countDown. La 
prima è quella che dovrebbe eseguire il lavoro vero e proprio, la 
seconda quella che lo lancia ogni X secondi.
Il problema è che mettendo un valore quando richiamo la funzione (in 
questo caso 5) ogni volta che mi richiama la funzione parte sempre da 5 
ed il risultato è sempre e solo 4.
Come faccio a passargli un valore, una volta sola, in modo che ad ogni 
richiamo della funzione sia un numero inferiore, simulando appunto un 
countdown?
Probabilmente è molto semplice, ma con tecnologia lato client ho 
un'esperienza pari a 0!!
Grazie a tutti per l'attenzione e l'eventuale aiuto.
Ciao, Kevin.

 countdown?
devi richiamare se stessa: la countDown una sola volta (per eseguire
fiveSeconds), è la fiveSeconds che richiama sè stessa passando come
parametro conto-- (finché conto-- non diventa uguale a zero ovviamente,
altrimenti ti passa ai negativi)
-- 
"qualcuno è andato per età
 qualcuno perchè già dottore
 e insegue una maturità, si è sposato, fa carriera
 ed è una morte un po' peggiore"
									    F.G.

 
Ciao Cristiano, innanzitutto grazie per la risposta che suppongo mi sia 
stata di aiuto, quanto meno ora fa un'iterazione. Ho tolto la funzione 
countDown che mi sembrava inutile a questo punto, e ho modificato la 
funzione fiveSeconds così:
function fiveSeconds(conto){
	if(conto==0){
		document.getElementById('testo2').innerHTML =('Aggiornamento 
completato!') }
	else{
		var x = parseInt(conto--);
     	document.getElementById('testo2').innerHTML =('Mancano '+x+' 
secondi');
		setInterval("fiveSeconds('x');",1000);
	}
 
}
La prima esecuzione funziona, dandomi giustamente 5, poi anzichè il 4, 
un secondo dopo, mi dice che non è un numero: NaN.
Alchè (come vedi dall'esercizio) ho messo parseInt(conto--) ma non mi 
cambia nulla. La consolle degli errori javascript di firefox non mi 
segnala alcunchè. Dov'è che sbaglio?
Grazie ancora!
Ciao, Kevin.

 		setInterval("fiveSeconds('x');",1000);
fai attenzione a setInterval e setTimeout: se usi setTimeout così va bene
perché lo ri-esegui ogni tot, invece setInterval esegue automaticamente
ogni x secondi ... quindi quanto sopra non va bene. Se vuoi usare
setInterval devi salvarti l'handle della function e poi stopparla quando
arriva a 0 con clearInterval:
 
https://developer.mozilla.org/en/DOM/window.setInterval
A parte questo, devi fornire il valore di x (con quello che hai scritto non
stai passando come parametro il valore di x, ma proprio il carattere "x",
che è appunto NaN...), del tipo
 setTimeout("fiveSeconds("+x+")",1000);
-- 
"Emancipate yourselves from mental slavery;
None but ourselves can free our minds"
									    B.M.

Cristiano Larghi ha scritto:

Grazie per il prezioso aiuto!!
Ho fatto così e funziona:
function fiveSeconds(conto){
  	if(parseInt(conto)==0){
	document.getElementById("testo2").innerHTML =("Aggiornamento 
completato!") }
  	else{
		var x = parseInt(conto);
		x--; //modifica interessata
      	document.getElementById("testo2").innerHTML =("Mancano "+x+" 
secondi");
  		setTimeout("fiveSeconds("+x+")",1000); // altra modifica interessata
 
	}
}
Ciao e grazie ancora!
Kevin

 TP/BP/Delphi/jscr/&c, FAQ items, links.