Pregunta

Estoy tratando de incrementar un valor de cada segundo en el lado del cliente con jQuery
esto es lo que hizo:

<script type="text/javascript">
        $(document).ready(function increment(){
            $("#counter").text(parseInt($("#counter").text())+1);
            setTimeout(increment(),1000)
        })
    </script>

esto no está funcionando como se esperaba y me sale un error "demasiado recursividad".
alguna idea sobre esto?

¿Fue útil?

Solución

Trate

$(document).ready(function () {       
    function increment(){
        $("#counter").text(parseInt($("#counter").text())+1);
        setTimeout(increment,1000);
    };            
    increment();
});

Por cierto, no es setInterval() para llamar a una función en repetidas ocasiones a una conjunto de intervalos, rathering de la llamada recursiva a una función con setTimeout()

$(document).ready(function () {       
    var interval = setInterval(increment,1000);     
});

function increment(){
    $("#counter").text(parseInt($("#counter").text())+1);            
}  

Otros consejos

increment() es un llamada para la subasta, no una referencia a la misma. Cuando usted está tratando de configurarlo para la subasta a ser llamado de nuevo, en realidad estás llamando de nuevo inmediatamente. Si alguna vez se volvió, su valor de retorno sería trasladado a setTimeout, pero nunca, ya que simplemente llama a sí misma una y otra vez hasta que se obtiene un error de recursividad profunda.

La solución es simplemente para eliminar los paréntesis, por lo que eres referencia el incremento de la función, y no llamar a él.

setTimeout(increment, 1000) debe ser la sintaxis correcta, ya que está pasando una referencia a una función.

recursiva llamando setTimeout() sin un criterio de parada no se recomienda. La pila se fundirá con el tiempo. Usando setInterval() debe ser seguro.

Una manera más simple: "Una función que se llama tan pronto como se creó y se repite dentro de los intervalos de 1000 ms si 'algo' no es cierto"

(function(){
    if (something) {
        doSomething();
    } else {
        setTimeout(arguments.callee, 1000);
    }
})();
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top