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

151
Vistas
javascript forEach - remove iterations containing class and add class to next iteration

So I'm trying to make a multi-step form with the active class applied to the current step. Upon clicking next I want to remove that class and add it to the next iteration of those classes.

const nextBtn = document.querySelectorAll('.next');
const prevBtn = document.querySelectorAll('.previous');
const submitBtn = document.querySelectorAll('.submit');
const progress_li = document.querySelector('.progress-bar_li');
const fieldset = document.getElementsByTagName('fieldset');
const step = document.getElementsByClassName(
  'step'
);
const active_fieldset = document.getElementsByClassName('activeFieldset');

[...nextBtn].forEach(el => {
  el.addEventListener('click', e => {
    e.preventDefault();
    [...registration_fieldset].forEach((className, i) => {
      if (className.classList.contains('activeFieldset')) {
        className.classList.remove('activeFieldset');
        step[i + 1].classList.add('activeFieldset');
        //^this doesn't work, nor does subbing step with className
      }
    });
  });
});
Pug
mixin nextandprev
    .btn-small.btn-small__reg.next Next
    .btn-small.btn-small__reg.previous Previous
    
mixin next
    .btn-small.btn-small__reg.next Next

mixin prevandsubmit
    .btn-small.btn-small__reg.previous Previous
    .btn-small.btn-small__reg.submit Submit

<fieldset class="step activeFieldset">part 1
   +next
</fieldset>
<fieldset>
  <fieldset class="step">sub 1 part 2
  nextandprev
  </fieldset>
  <fieldset class="step"> sub 2 part 2
  nextandprev
  </fieldset>
 </fieldset>
<fieldset class="step">part 3
nextandprev
</fieldset>
<fieldset class="step">part 4
nextandprev
</fieldset>
<fieldset class="step">part 5
nextandprev
</fieldset>
Any help is GREATLY appreciated. I want to get way better at understanding these forEach loops

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

0

Assuming you have the same number of next buttons and steps, you could use the button index with the step index to add the class onto the next step and remove from all the other steps.

const nextBtn = document.querySelectorAll('.next');
const prevBtn = document.querySelectorAll('.previous');
const steps = document.querySelectorAll('.step');

nextBtn.forEach((btn, btnIndex) => {
  btn.addEventListener('click', (e) => {
    e.preventDefault();

    steps.forEach((step, stepIndex) => {
      // If button is for next step, add class to next step, else remove
      if (btnIndex === stepIndex - 1) {
        step.classList.add('activeFieldset');
      } else {
        step.classList.remove('activeFieldset');
      }
    });
  });
});
.activeFieldset {
  border: 1px solid red;
}
<fieldset class="step activeFieldset">
      <div>Part 1</div>
      <button class="next">Next</button>
    </fieldset>
    <fieldset>
      <fieldset class="step">
        <div>Sub 1 Part 2</div>
        <button class="previous">Prev</button>
        <button class="next">Next</button>
      </fieldset>
      <fieldset class="step">
        <div>Sub 2 Part 2</div>
        <button class="previous">Prev</button>
        <button class="next">Next</button>
      </fieldset>
    </fieldset>
    <fieldset class="step">
      <div>Part 3</div>
      <button class="previous">Prev</button>
      <button class="next">Next</button>
    </fieldset>
    <fieldset class="step">
      <div>Part 4</div>
      <button class="previous">Prev</button>
      <button class="next">Next</button>
    </fieldset>
    <fieldset class="step">
      <div>Part 5</div>
      <button class="previous">Prev</button>
      <button class="next">Next</button>
    </fieldset>

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