1
resposta

não funciona com o while mas com o for sim...

tentei fazer de uma maneira diferente porém ficou dando erro falando que a propriedade play não pode ser lida, fui ler os tópicos e vi que uma pessoa fez o código igual o meu porém usou um for e tava funcionando certinho, alguém pode me explicar o motivo disso?

meu codigo:

var botoes = document.querySelectorAll(".tecla");
var audios = document.querySelectorAll("audio");


var i = 0

function tocaSom(i) {
    audios[i].play();
}


while (i < audios.length) {
    botoes[i].onclick = function () {
        tocaSom(i);
    };
    i++;
}

o código dele usando for:

var botoes = document.querySelectorAll(".tecla");
var audios = document.querySelectorAll("audio");


var i = 0

function tocaSom(i) {
    audios[i].play();
}


for (let i = 0; i < botoes.length; i++) {
    botoes[i].onclick = function () {
        tocaSom(i);
    }
}

o erro que aparece > Insira aqui a descrição dessa imagem para ajudar na acessibilidade

1 resposta

Olá Carlos, tudo bem?

Peço desculpa pela demora para responder o seu tópico.

O erro do seu código ocorre por conta da limitação presente no while, ele realiza tudo o que há dentro depois checa essa condição, logo o que está acontecendo é que, o valor do seu i que está sendo passado para a função tocaSom() é apenas o último valor, que no caso seria 9.

Você pode visualizar isso usando um console.log(i) dentro da função tocaSom(), ao fazer isso no console do navegador você pode visualizar o valor que está sendo passado.

Logo utilizando a estrutura de repetição for você não terá esse problema. Espero que eu tenha lhe ajudado, caso ainda tenha dúvidas ou problemas com relação a este tópico, estarei a sua disposição. Abraços e bons estudos!

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