Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

152
Vistas
Cloning elements with their events not working

I am cloning a div using jQuery and find that events on cloned elements do not work although they work on the original elements. How can I go about this? Note how the answer in the question states that...

"This is how jQuery's clone() method is able to copy a node with its event listeners, for example"

let add = document.getElementsByClassName("add"),
  rem = document.getElementsByClassName("rem"),
  container = document.getElementsByClassName('container')[0];
for (let i = 0; i < add.length; i++) {
  add[i].addEventListener("click", () => {
    $(".cloneable").clone(true, true).appendTo(".container");
  });
}
for (let i = 0; i < rem.length; i++) {
  rem[i].addEventListener("click", () => {
    if (container.childElementCount > 1) {
      $(".cloneable:last").remove();
    }
  });
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="container">
  <div class="cloneable">
    <div>
      <a class="btn btn-primary add" role="button">Add cell</a>
      <a class="btn btn-primary rem" role="button">Remove cell</a>
    </div>
    <iframe src="index.php"></iframe>
  </div>
</div>

about 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

ETA: This code clones all elements named ".cloneable", so on second click it creates TWO clones, and so on. You should clone with $('.cloneable:first') or similar.

The issue seems to arise from you binding javascript native events. Using jQuery Events solves your problem.

let add = document.getElementsByClassName("add"),
  rem = document.getElementsByClassName("rem"),
  container = document.getElementsByClassName('container')[0];
for (let i = 0; i < add.length; i++) {
  $(add[i]).on("click", () => {
    $(".cloneable:first").clone(true, true).appendTo(".container");
  });
}
for (let i = 0; i < rem.length; i++) {
  $(rem[i]).on("click", () => {
    if (container.childElementCount > 1) {
      $(".cloneable:last").remove();
    }
  });
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="container">
  <div class="cloneable">
    <div>
      <a class="btn btn-primary add" role="button">Add cell</a>
      <a class="btn btn-primary rem" role="button">Remove cell</a>
    </div>
    <iframe src="index.php"></iframe>
  </div>
</div>

about 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda