Ir ao conteúdo
  • Cadastre-se

Javascript Atrelando valores array do DOM à evento


Posts recomendados

Olá pessoal,
Estou aprendendo JS há alguns meses. Como todo processo de aprendizagem aparecem certas lacunas, dúvidas....
A minha é a seguinte: Estou tendo dificuldade em atrelar elementos do tipo (arrays/listas/vetores) retornados pelos
métodos do DOM e atrelá-los a eventos
. Nesse código abaixo eu queria transformar cada dia de um calendário em
um objeto clicável e estou tendo dificuldade em manipular os vetores retornados e atrelá-los a CADA DIA,
alguém pode dar essa luz ??

 

segue o código:

<script>
		window.onload = function(){
			var msg = document.getElementById("msg");
			
			var el = document.getElementById("mes");
			var elemento = el.getElementsByClassName("dia");
            
			
			
              /*
			  elemento[0].onclick =  function(){
				 elemento[0].style.backgroundColor = "#ccc";
			  }
			  */
			  elemento[1].onclick =  function(){
				 elemento[1].style.backgroundColor = "#ccc";
			  }
			  elemento[2].onclick =  function(){
				 elemento[2].style.backgroundColor = "#ccc";
			  }
			  elemento[3].onclick =  function(){
				 elemento[3].style.backgroundColor = "#ccc";
			  }
			  
			  
		}
	
</script>

</head>

<body>

    <table id="mes">
    	<tr>
    		<td class="dia">1</td><td class="dia">2</td><td class="dia">3</td><td class="dia">4</td><td class="dia">5</td><td class="dia">6</td><td class="dia">7</td>
    	</tr>
    	<tr>
    		<td class="dia">8</td><td class="dia">9</td><td class="dia">10</td><td class="dia">11</td><td class="dia">12</td><td class="dia">13</td><td class="dia">14</td>    		
    	</tr>
    	<tr>
     		<td class="dia">15</td><td class="dia">16</td><td class="dia">17</td><td class="dia">18</td><td class="dia">19</td><td class="dia">20</td><td class="dia">21</td>   		
    	</tr>
     	<tr>
    		<td class="dia">22</td><td class="dia">23</td><td class="dia">24</td><td class="dia">25</td><td class="dia">26</td><td class="dia">27</td><td class="dia">28</td>    		
    	</tr>
     	<tr>
    		<td class="dia">29</td><td class="dia">30</td><td class="dia">31</td>   		
    	</tr>       	   	    	    	
    </table>

</body>
</html>

Já usei função fora do onLoad, já usei loop for mas to quebrando a cabeça aqui.

 

Eu gostaria que um único botão (O DIA) em uma função conseguisse fazer o trabalho, tipo assim:

      

     

  elemento[x].onclick =  function(){
                 elemento[x].style.backgroundColor = "#ccc";
        }

 

qual a forma correta de fazer isso ????

 

agradeço a ajuda.

 

Link para o comentário
Compartilhar em outros sites

@Fernando Riba Oi Fernando, tudo bem?

Você pode usar um for loop para fazer isso! Aliás uma observação: o que o método getElementsByClassName retorna é parecido com uma array, mas na verdade não é uma array e sim um HTMLCollection, mas isso só vai nos dar problemas se utilizarmos métodos pré-definidos para arrays(não todos, mas a grande maioria sim), o que no caso não irá funcionar por não ser uma array. Mas nós vamos apenas utilizar o método length que é suportado pelo HTMLCollection então não nos trará nenhum problema:

const elemento = el.getElementsByClassName("dia");

function test() {
	console.log('working');
}

for(let x = 0; x < elemento.length; x++) {
	elemento[x].addEventListener('click', test);
}

Veja se você entendeu o que está acontecendo, qualquer coisa é só perguntar!

Abraços.

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...