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

152
Visualizações
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 Respostas
Responde à pergunta

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 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