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

384
Vistas
¿Cómo llamar a la función a dentro de sí misma y hacer que vuelva a seleccionar un nuevo elemento DOM en js?

Tengo una función A para seleccionar el elemento .current y hacerle algo. Luego, (re)mueva el nombre de la clase .current a otro elemento y haga lo mismo con él.

 function funA () { let state = []; let currentRow = document.querySelector(".current"); //... evaluateThings(function () { currentRow.classList.remove("current"); currentRow.nextSibling.classList.add("current"); funcA(); }); } function evaluateThings(callback) { //... callback() } funcA()

El problema es que funcA recuerda el selector anterior y realiza cambios tanto en el nuevo .current como en el último.

aquí hay una demostración

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

funcA agrega un oyente keydown al documento. Cuando llama recursivamente a funcA , no está eliminando el oyente anterior, por lo que en el próximo evento, ambos se ejecutan y ambos elementos se modifican, y el ciclo continúa.

Elimine el oyente anterior al realizar la llamada recursiva.

 function funcA() { const currentRow = document.querySelector(".current"); const handler = (e) => { if (e.key === 'Enter') { currentRow.nextElementSibling.classList.add("current"); currentRow.classList.remove("current"); document.removeEventListener("keydown", handler); evaluateThings(funcA); } else { currentRow.innerHTML += e.key } }; document.addEventListener("keydown", handler); } function evaluateThings(callback) { //... callback() } funcA()
 <div class="row current">a</div> <div class="row">b</div> <div class="row">c</div> <div class="row">d</div> <div class="row">e</div> <div class="row"></div>

O mantenga el oyente adjunto, pero reasigne la variable que apunta al elemento.

 let currentRow = document.querySelector(".current"); function funcA() { document.addEventListener("keydown", (e) => { if (e.key === 'Enter') { currentRow.nextElementSibling.classList.add("current"); currentRow.classList.remove("current"); evaluateThings(() => currentRow = document.querySelector(".current")); } else { currentRow.innerHTML += e.key; } }); } function evaluateThings(callback) { //... callback() } funcA()
 <div class="row current">a</div> <div class="row">b</div> <div class="row">c</div> <div class="row">d</div> <div class="row">e</div> <div class="row"></div>

about 4 years ago · Juan Pablo Isaza 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