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());
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 deaddEventListener
, ahora pasanquestionSelector
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.