¿Por qué no funciona Establecer tiempo de espera de JavaScript? [closed]

2 minutos de lectura

avatar de usuario
james dorfmann

Estoy tratando de usar setTimeout, pero no funciona. Cualquier ayuda es apreciada.

¿Alguien sabe cómo arreglar esto?

var button = document.getElementById("reactionTester");
var start  = document.getElementById("start");

function init() {
    var startInterval/*in milliseconds*/ = 1000;
    setTimeout(startTimer(), startInterval);
}

function startTimer() {
    document.write("hey");
}

  • Aprender como depurar JavaScript. Está intentando acceder a un elemento DOM antes de que exista. Consulte ¿Por qué jQuery o un método DOM como getElementById no encuentras el elemento?. Y por favor explica qué exactamente no está trabajando.

    – Félix Kling

    02/01/2014 a las 20:10


  • posible duplicado de ¿Por qué se ejecuta el método inmediatamente cuando uso setTimeout?

    – Félix Kling

    02/01/2014 a las 20:14

avatar de usuario
Matt Catellier

Si se encuentra en una situación en la que necesita pasar parámetros a la función que desea ejecutar después del tiempo de espera, puede envolver la función “nombrada” en una función anónima.

es decir, funciona

setTimeout(function(){ startTimer(p1, p2); }, 1000);

es decir, no funcionará porque llamará a la función de inmediato

setTimeout( startTimer(p1, p2), 1000);

  • ¿Qué pasa si tienes que pasar una variable?

    – Jeff

    14 mayo 2015 a las 18:04

  • @Jeff – ¿Puedes dar más detalles?

    – j08691

    14 mayo 2015 a las 18:34

  • Lo siento, eso fue redactado mal. Descubrí lo que estaba tratando de hacer… Estaba tratando de pasar una función que requiere una variable como mi primer argumento. Acabo de envolverlo en una función anónima.

    – Jeff

    14 mayo 2015 a las 18:35

Usar:

setTimeout(startTimer,startInterval); 

Está llamando a startTimer() y alimenta su resultado (que no está definido) como un argumento para setTimeout().

avatar de usuario
usuario126587

Si desea pasar un parámetro a la función retrasada:

    setTimeout(setTimer, 3000, param1, param2);

avatar de usuario
glenn ferrie

Por favor cambie su código de la siguiente manera:

<script>
    var button = document.getElementById("reactionTester");
    var start = document.getElementById("start");
    function init() {
        var startInterval/*in milliseconds*/ = Math.floor(Math.random()*30)*1000;
        setTimeout(startTimer,startInterval); 
    }
    function startTimer(){
        document.write("hey");
    }
</script>

A ver si eso ayuda. Básicamente, la diferencia es que hace referencia a la función ‘startTimer’ en lugar de ejecutarla.

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad