1
resposta

Código alternativo

Eu escrevi o seguinte código. Mas ele não deu certo. Alguém pode me ajudar a identificar o porque?

function tocaSom (idElementoAudio) {
    document.querySelectorAll('audio')[idElementoAudio].play();
}

const listaDeTeclas = document.querySelectorAll('.tecla');
let contador = 0;

while (contador < listaDeTeclas.length) {
    listaDeTeclas[contador].onclick = function () {
        tocaSom(contador);
    }
    contador++;
}
1 resposta

Fala Vitor! Beleza?

Eu consegui observar um problema no seu código (mas não sei é o único):

Quando você chama a função tocaSom(contador) dentro do while, ela vai executar o seguinte:

  • document.querySelectorAll('audio')[contador].play()

Considerando que o contador esteja em 0, document.querySelectorAll('audio')[0] vai retornar o elemento exatamente como está escrito no HTML:

O que você precisa que seja retornado na função para o play funcionar é um seletor específico desse elemento. No caso o ID.

Eu acabei de postar a minha solução aqui no Fórum, seguindo exatamente a sua lógica de listar os áudios e buscar o ID. Dá uma olhada lá e qualquer coisa dá um toque. https://cursos.alura.com.br/forum/topico-sugestao-codigo-alternativo-para-atribuir-os-audios-aos-botoes-329934