Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

133
Views
¿Cómo me aseguro de que un evento de clic se limite solo a una tarjeta en la que hice clic?

Estoy usando dos tarjetas Bootstrap en mi aplicación. Oculto una de las cartas (que es de color azul) detrás de una carta (que es de color blanco) como se ilustra a continuación:

Una imagen de la tarjeta azul oculta detrás de la tarjeta blanca

...y usa el siguiente código para revelar la tarjeta azul oculta detrás de la tarjeta blanca:

 $(document).ready(function(){ $(".card-horizontal").click(function(){ $(".backPanel").slideDown("slow"); }); });

resultando en el efecto deseado ilustrado a continuación:

Una imagen que muestra la tarjeta azul oculta revelada

El problema que tengo aquí es que cuando hago clic en una carta para revelar su carta oculta azul, todas las cartas ocultas azules que pertenecen a cartas blancas se revelan simultáneamente como se ilustra a continuación:

¿Cómo modifico el código anterior para limitar este evento solo a las tarjetas en las que se hizo clic?

Encuentre a continuación mi código para la tarjeta:

 <div class="card w-75 card-horizontal" id="nftCard"> <div class="img-square-wrapper"> <img class="nftImages" src="http://via.placeholder.com/150" alt="Card image cap"> <div class="card-body cardPadding"> <h5 class="card-title">Card title</h5> <p class="card-text">With supporting text below as a natural lead-in to additional content.</p> </div> </div> </div> <div class="card w-75 card-horizontal backPanel"> <div class="img-square-wrapper"> <div class="card-body "> <p class="card-text">With supporting text below as a natural lead-in to additional content.</p> </div> </div> </div>
about 4 years ago · Juan Pablo Isaza
3 answers
Answer question

0

Usa $(".card-horizontal") para obtener elementos por nombre de clase. Podría dar a las tarjetas y los backPanels su propia id y usar algo como esto para cada par:

 $("#white-card1").on("click", function(){ $("#blue-panel1").slideDown("slow"); });

Otra forma es usar cosas como padre, hijo, etc. para navegar por el DOM.

En ese caso, si desea utilizar un nombre de clase, defina una nueva clase "tarjeta blanca" para el evento de clic. De lo contrario, hacer clic en una tarjeta azul (en su código llamado "panel posterior") también hace algo.

Si todas esas "tarjetas blancas" tienen el "panel posterior" correspondiente después de ellas en el mismo nivel, se puede usar la propiedad nextElementSibling .

En lugar de usar jQuery, prefiero JavaScript puro (excepto por el método slideDown que necesita):

 document.querySelectorAll(".white-card").forEach(el => { el.addEventListener("click", function(){ el.nextElementSibling.slideDown("slow"); }); });

Probé el siguiente código en JsFiddle :

HTML

 <div class="my-clickable-class" style="background-color: blue;">x</div> <div style="background-color: red;">x</div> <div class="my-clickable-class" style="background-color: yellow;">x</div> <div style="background-color: orange;">x</div>

JavaScript

 document.querySelectorAll(".my-clickable-class").forEach(el => { el.addEventListener("click", function() { el.style.color = 'white'; el.nextElementSibling.style.backgroundColor = 'green'; }); });
  • Al hacer clic en el div azul, se cambia el color del div rojo.
  • Al hacer clic en el div amarillo, se cambia el color del div naranja.
about 4 years ago · Juan Pablo Isaza Report

0

Puede usar cada uno cada vez que haga clic en un elemento, buscará el elemento relacionado con la clase .backPanel y lo deslizará hacia abajo.

En Case backPanel es un elemento Children of Card

 $(document).ready(function(){ $(".card-horizontal").each(function(){ $(this).on("click", function(){ $(this).children(".backPanel").slideDown("slow"); }); }); });

En caso de que backPanel sea un elemento hermano de la tarjeta

 $(document).ready(function(){ $(".card-horizontal").each(function(){ $(this).on("click", function(){ $(this).siblings(".backPanel").slideDown("slow"); }); }); });

En caso de que backPanel sea una clase adicional en el elemento Tarjeta

 $(document).ready(function(){ $(".card-horizontal").each(function(){ $(this).on("click", function(){ $(".backPanel", this).slideDown("slow"); }); }); });
about 4 years ago · Juan Pablo Isaza Report

0

Si backPanel es un elemento secundario de card-horizontal , puede utilizar this palabra clave para seleccionar solo el backPanel dentro card-horizontal .

Aquí está la documentación para esta palabra clave.

 $(document).ready(function(){ $(".card-horizontal").click(function(){ $(".backPanel", this).slideDown("slow"); }); });

Editar:

Dado card-horizontal y backPanel podrían ser hermanos según su código. Puedes envolverlos en un div y hacer esto:

 $(document).ready(function(){ $(".card-horizontal").click(function(){ $(this).siblings(".backPanel").slideDown("slow"); }); });

¡Espero que ayude!

about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!