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

meu codigo esta dando erro

Uncaught TypeError: Cannot set properties of null (setting 'onclick') at main.js:5:46

4 respostas

manda o js e o html, por favor

<title>Alura MIDI</title>
<script src="../js/main.js"></script>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Montserrat:wght@500;600&display=swap" rel="stylesheet">

<link rel="icon" type="image/png" href="images/bateria.png">
<link rel="stylesheet" href="css/reset.css">
<link rel="stylesheet" href="css/estilos.css">
<h1>Alura Midi</h1>

<section class="teclado">
    <button onclick="tocaSomPom()" id="som_tecla_pom" class="tecla tecla_pom">Pom</button>
    <button  class="tecla tecla_clap">Clap</button>
    <button  class="tecla tecla_tim">Tim</button>

    <button class="tecla tecla_puff">Puff</button>
    <button class="tecla tecla_splash">Splash</button>
    <button class="tecla tecla_toim">Toim</button>

    <button class="tecla tecla_psh">Psh</button>
    <button class="tecla tecla_tic">Tic</button>
    <button class="tecla tecla_tom">Tom</button>
</section>

<audio controls src="sounds/keyq.wav" id="som_tecla_pom"></audio>
<audio controls src="sounds/keyw.wav" id="som_tecla_clap"></audio>
<audio controls src="sounds/keye.wav" id="som_tecla_tim"></audio>
<audio controls src="sounds/keya.wav" id="som_tecla_puff"></audio>
<audio controls src="sounds/keys.wav" id="som_tecla_splash"></audio>
<audio controls src="sounds/keyd.wav" id="som_tecla_toim"></audio>
<audio controls src="sounds/keyz.wav" id="som_tecla_psh"></audio>
<audio controls src="sounds/keyx.wav" id="som_tecla_tic"></audio>
<audio controls src="sounds/keyc.wav" id="som_tecla_tom"></audio>
function tocaSomPom (){
document.querySelector('#som_tecla_pom').play();
}

document.querySelector('.tecla_pom').onclick = tocaSomPom;

Algumas observações:

  • Nessa linha: <button onclick="tocaSomPom()" id="som_tecla_pom" class="tecla tecla_pom">Pom</button>, o id som_tecla_pom se repete, ele aparece na primeira tag áudio da página, o id não pode se repetir, diferente do class. Se deixar da maneira que está, o javascript, na linha document.querySelector('#som_tecla_pom').play(); irá pegar o botão, e não a tag audio, porque ele segue a ordem dos elementos que forem aparecendo no DOM;

  • Nessa mesma linha, temos o onclick="tocaSomPom(), então não há a necessidade de atribuir a função novamente no javascript com o onclick.

Voltando ao seu problema: Não encontrei nenhum erro de sintaxe na parte do javascript, verifique se você importou corretamente o arquivo javascript e revise o seu código, talvez você consiga encontrar o erro. Espero que ajude :) bom dia

solução!

Matheus, nesta linha: button onclick="tocaSomPom()" id="som_tecla_pom" class="tecla tecla_pom">Pom

Esta id não deve aparecer, já que esta id é referente ao áudio e não ao botão. Além disso, pode retirar o JS na linha HTML O correto seria: button class="tecla tecla_pom">Pom

E assim o código vai identificar corretamente todos os seletores.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software