Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Código está dando erro

Eu tentei analisar várias vezes onde está o erro mas não consegui identificar. Alguém poderia me ajudar a solucionar?

function tocaSom (idElementoAudio) {
    document.querySelector(idElementoAudio).play();
}

const TeclasSom = document.querySelectorAll('.teclado');

for(let contador= 0; contador < TeclasSom.length; contador++) {

    const teclas = TeclasSom[contador];
    const instrumento = teclas.classList[1]; 
    const idAudio = `#som_ ${instrumento}`;

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

No console aparece erro no "tocaSom(idAudio)" e no " document.querySelector(idElementoAudio).play();"

4 respostas

Bom dia Gabrielle, tudo joia ?

Consegue mandar os erros aqui? Ajudaria bastante para podermos entender o motivo do erro.

Fico no aguardo.

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Quando clico nas teclas aparece a mensagem de erro e o som não é reproduzido.

Dei uma olhado no código final que foi disponibilizado no curso. Acho que provavelmente tema ver com a sua variável "TeclasSom". Onde você pega o elemento de classe "teclado". Nesse caso o correto não seria pegar os elementos com classe "teclas " ?

solução!

O erro está na seleção da classe '.tecla' na função querySelectorAll, você colocou '.teclado'. Lembre-se que '.tecla' foi definido lá no arquivo HTML pela instrutora então devemos usar o mesmo nome. Outro erro foi dar um espaço entre #som_ e ${instrumento}. Acontecem vários erros assim por descuido nosso...

function tocaSom (idElementoAudio) {
    document.querySelector(idElementoAudio).play();
}

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

for(let contador= 0; contador < teclasSom.length; contador++) {
    const teclas = teclasSom[contador];
    const instrumento = teclas.classList[1]; 
    const idAudio = `#som_${instrumento}`;

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

Dica: Inicialize o nome das variáveis sempre com letra minúscula por questões estéticas e de boa prática, já que é um padrão amplamente adotado.