1
resposta

Incluindo Classe no JavaScript

Uma coisa interessante que aconteceu , que ainda não entendi o por quê, é que se tentarmos setar, dentro do for ou while, valores ou atributos por mrio de variaveis que não estão setads como constantes dentro do laço, o javascript não consegue entender como setagem, ou seja, eu não pude usar listaDeTeclas[x].onclick , eu tive se enviar a lista para uma constante e depois setar ela dentro do laço.

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

function tocasom(tecla) {
    document.querySelector(tecla).play();
}

const numeroTeclas = listaDeTeclas.length;


for (var n = 0; n < numeroTeclas; n++) {
    const teclar = listaDeTeclas[n];

   teclar.onclick = function () {
        tocasom(`#som_${teclar.classList[1]}`);
    }

   teclar.onkeydown = function () {
       teclar.classList.add('ativa');
    }

   teclar.onkeyup = function () {
       teclar.classList.remove('ativa');
    }
        }
1 resposta

Olá João Paulo, tudo bem?

Sua dúvida é bem interessante pois conceitos básicos de algoritmo e estrutura de dados podem causar grandes problemas. Nesse caso, não dá certo setar uma const já existente dentro de um laço (while ou for), pois se trata de uma constante, ou seja, o valor atribuído fora do laço não pode ser alterado diretamente.

Para que o código funcione, assim como você fez, o ideal é criar uma referência (const listaDeTeclas) para poder receber a lista com todas as teclas do Alura Fone, ficando const listaDeTeclas = document.querySelectorAll('input[type=button]').

Em outras palavras, você pode atribuir valores de uma constante a outra nova constante setada para alterá-los, e não fazer isso diretamente.

Em caso de mais dúvidas, me coloco à disposição.

Grande abraço e bons estudos!

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