es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

La selección de elementos al azar de una matriz en el evento de clic no funciona.

He escrito algunas funciones generadoras de preguntas que funcionan bien. Luego, coloqué esas funciones en una matriz. Cuando el usuario hace clic en el botón nueva pregunta, debería elegir aleatoriamente un tipo de pregunta de la matriz, pero solo se está haciendo aleatorio cuando cargo la página en lugar de hacer clic en el botón. Gracias de antemano.

(questionTypeZero y questionTypeOne son funciones que funcionan).
let questionArray =[questionTypeZero, questionTypeOne];
function questionSelector(){
return questionArray[Math.floor(Math.random()*2)]
};
window.addEventListener('load', questionSelector());
newQuestion.addEventListener('click', questionSelector());

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    El problema con el código es que los event listeners llaman a la función inmediatamente en lugar de esperar a que ocurra el evento. Para solucionarlo, se puede cambiar los event listeners para que llamen a la función como un callback en lugar de llamarla directamente.

    “`(questionTypeZero y questionTypeOne son funciones trabajando).
    let questionArray = [questionTypeZero, questionTypeOne];
    function questionSelector() {
    return questionArray[Math.floor(Math.random()*2)];
    };
    window.addEventListener(‘load’, questionSelector);
    newQuestion.addEventListener(‘click’, questionSelector );

    Al eliminar los paréntesis de questionSelector() en las declaraciones de addEventListener, ahora pasan questionSelector como una referencia a las funciones en lugar de llamarla inmediatamente. Esto asegura que la aleatorización ocurra sólo cuando se desencadena el evento.

Comments are closed.