Problema com setTimeout javascript

4 respostas
Z

Pessoal tenho esta função que vai colocando “.” em uma mensagem de Aguarde… O problema que desta maneira esta sendo criado variáveis threads.
E mesmo eu fazendo,
window.clearTimeout(timeAguarde);
já foram criadas várias…

como que eu posso resolver isso :?

var timeAguarde = null;	
function Aguarde(paramReticencias){

   if(document.getElementById("mensagemCarregando").innerHTML.length < 12){

      document.getElementById("mensagemCarregando").innerHTML = "Aguarde.";

      if(paramReticencias < 4){

         for(i=1;i<=paramReticencias;i++){            
            document.getElementById("mensagemCarregando").innerHTML += ".";
         }//for

         timeAguarde = setTimeout("Aguarde("+ (paramReticencias+1) +")",200);      

      }else{

         timeAguarde = setTimeout("Aguarde(0)",200);

      }//if

   }//if
}

4 Respostas

D

Não seria algo assim que você gostaria não?!

&lt;html&gt;
	&lt;head&gt;
		&lt;script&gt;
			var timeAguarde = null;
			function mostrarAguarde() {
				var span = document.getElementById(&quot;mensagemCarregando&quot;);
				if (span.innerHTML.length &lt; 12) {
					span.innerHTML += &quot;.&quot;;
				} else {
					span.innerHTML = &quot;Aguarde&quot;;
				}
				timeAguarde = setTimeout(&quot;mostrarAguarde()&quot;, 200);
			}
			
			function Aguarde() {
				var span = document.getElementById(&quot;mensagemCarregando&quot;);
				if (span.style.display == &quot;none&quot;) {
					span.innerHTML = &quot;Aguarde&quot;;
					span.style.display = &quot;&quot;;
					mostrarAguarde();
				} else {
					clearTimeout(timeAguarde);
					span.innerHTML = &quot;&quot;;
					span.style.display = &quot;none&quot;;
				}
			}
		&lt;/script&gt;
	&lt;/head&gt;
	&lt;body&gt;
		&lt;span id="mensagemCarregando" style="display=none;"&gt;&lt;/span&gt;<br>
		&lt;input type="button" value="Carregar" onclick="Aguarde();"&gt;
	&lt;/body&gt;
&lt;/html&gt;
Z
[quote=dmarcosm]Não seria algo assim que você gostaria não?!
var timeAguarde = null;
			function mostrarAguarde() {
				var span = document.getElementById(&quot;mensagemCarregando&quot;);
				if (span.innerHTML.length &lt; 12) {
					span.innerHTML += &quot;.&quot;;
				} else {
					span.innerHTML = &quot;Aguarde&quot;;
				}
				timeAguarde = setTimeout(&quot;mostrarAguarde()&quot;, 200);
			}
			
[code][/quote]

Cada vez que vc chama o mostrarAguarde é criado um novo processo pelo [code]setTimeout(&quot;mostrarAguarde()&quot;, 200);
E quando vc for parar
clearTimeout(timeAguarde);
ele só vai parar o último processo que foi criado. :x
D

Na verdade ele não para o último. A função clearTimeout simplesmente impede que o timeout que você fez anteriormente seja executado. A cada setTimeout ele coloca dentro daquela variável o código e o tempo que falta para executá-lo novamente. Com o clear você cancela a chamada ou método!

Copia o código HTML e roda ele na sua máquina que você vai ver! =]

Z

dmarcosm:
Na verdade ele não para o último. A função clearTimeout simplesmente impede que o timeout que você fez anteriormente seja executado. A cada setTimeout ele coloca dentro daquela variável o código e o tempo que falta para executá-lo novamente. Com o clear você cancela a chamada ou método!

Copia o código HTML e roda ele na sua máquina que você vai ver! =]

Entendi, eu achava que toda vez que ele passava pelo setTimeout era criando um novo processo.
Valeu.
[]'s

Criado 3 de outubro de 2007
Ultima resposta 3 de out. de 2007
Respostas 4
Participantes 2