Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Bug] Código não executa o tocaSom

Meu código parou de executar a função toca som ou apresentar QUALQUER erro, eu consegui usando uma forma alternativa, mas queria entender o porque não funciona normalmente, ele entra na repetição mas não executa a função pra dar erros


function tocaSom(idAudio = null){
    document.querySelector(idAudio).play();
}

const listaSons = document.querySelectorAll('.tecla');

let contador = 0;

/*
listaSons.forEach((e, i)=>{
    e.addEventListener('click', function(){
        tocaSom();
    })
})
    */
while (contador < listaSons.length) {
    
    listaSons[contador].onclick = tocaSom;
 
    contador++;
}

1 resposta
solução!

Oi João!

No seu loop while, você está atribuindo a função tocaSom diretamente ao onclick, mas sem passar o parâmetro necessário.

Para resolver isso, podemos usar uma função anônima para garantir que o ID correto seja passado para a função tocaSom quando a tecla for clicada.

Aqui está uma versão ajustada do seu código:


while (contador < listaSons.length) {
    const tecla = listaSons[contador];
    const idAudio = `#som_${tecla.classList[1]}`; // Aqui o pulo do gato

    tecla.onclick = function() {
        tocaSom(idAudio);
    };

    contador++;
}

Reforço que em casos de dúvidas, conte sempre com o fórum da comunidade Alura! Bons estudos!

Sucesso

Um grande abraço e até mais!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!