Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

168
Visualizações
me sale "Error de tipo no capturado: no se puede leer la propiedad 'alternar' de indefinido" cada vez que hago clic en la imagen

Traté de hacer que un elemento apareciera después de que un usuario hiciera clic en una imagen. Usé classlist.toggle para eso, pero cuando hago clic en la imagen, aparece el mensaje de error "Error de tipo no detectado: no se puede leer la propiedad 'alternar' de indefinido" en la consola. Y por supuesto que no está funcionando 🙁

 const plusbtn = document.querySelector(".btn-img"); const drop = document.getElementsByClassName("boxes") plusbtn.addEventListener('click', () => { drop.classList.toggle("box-drop"); })
 .boxes { border: 1px solid rgba(39, 81, 197, 0.39); margin-top: 50px; padding: 15px; display: none; flex-direction: row; justify-content: space-around; } .btn-img { align-self: center; filter: grayscale(50%); cursor: pointer; } .box-drop { display: flex; }
 <section> <h1>RESOURCES</h1> <div class="resource-boxes"> <div class="box1"> <div class="top"> <img src="../images/plus.png" alt="" class="btn-img"> </div> <div class="boxes"> <a href=""> <div class="minibox"> <span class="minibox-txt">Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet consectetur, adipisicing elit. Numquam, enim! </span> </div> </a> </div> </div> </div> </section>

about 4 years ago · Juan Pablo Isaza
2 Respostas
Responde à pergunta

0

getElementsByClassName devuelve una HTMLCollection . Debe recorrer todos los elementos de esa colección para poder acceder a ellos.

Pero , dado que ya usa .querySelector() , también podría

  • use .querySelectorAll() que devuelve una NodeList que ofrece por defecto un .forEach()
  • En lugar de ocultar elementos donde están definidos por estilos, utilice en su lugar una clase de utilidad reutilizable como .u-none{ display: none; }

 const EL_btnPlus = document.querySelector(".btn-img"); const ELS_drop = document.querySelectorAll(".boxes"); EL_btnPlus.addEventListener('click', () => { ELS_drop.forEach(EL => EL.classList.toggle("u-none")); });
 .boxes { display: flex; } /* Utility classes */ .u-none { display: none; }
 <img class="btn-img" src="https://lh3.googleusercontent.com/a/AATXAJzyljorAsMuzZ3OQ6B7g_2EU0bkA4lk3iH076AR=k-s64" alt=""> <div class="boxes u-none">Box one</div> <div class="boxes u-none">Box two</div>

about 4 years ago · Juan Pablo Isaza Relatório

0

drop es una lista de elementos (ver el valor de retorno de getElementsByClassName ). Tienes que recorrerlo y alternar la clase en cada elemento individual:

 const plusbtn = document.querySelector(".btn-img"); const drop = [...document.getElementsByClassName("boxes")]; plusbtn.addEventListener('click', () => { drop.forEach(e => e.classList.toggle("box-drop")); })
 .boxes { border: 1px solid rgba(39, 81, 197, 0.39); margin-top: 50px; padding: 15px; display: none; flex-direction: row; justify-content: space-around; } .btn-img { align-self: center; filter: grayscale(50%); cursor: pointer; } .box-drop { display: flex; }
 <section> <h1>RESOURCES</h1> <div class="resource-boxes"> <div class="box1"> <div class="top"> <img src="https://www.gravatar.com/avatar/0fdacb141bca7fa57c392b5f03872176?s=48&d=identicon&r=PG&f=1" alt="" class="btn-img"> </div> <div class="boxes"> <a href=""> <div class="minibox"> <span class="minibox-txt">Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet consectetur, adipisicing elit. Numquam, enim! </span> </div> </a> </div> </div> </div> </section>

about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda