Wizard form in Drupal8/ using Form Twig /Dependable wizard form according to occupation status

 twig file


<form {{ attributes }}>
  <h1>Register:</h1>
  <!-- One "tab" for each step in the form: -->
  <div class="tab"><h3>Basic Information:</h3>
     {{ element.group_one}}
  </div>
  <div class="tab"><h3>Education:</h3>
    {{ element.group_two}}
  </div>

 {#{% if element.group_three|raw is empty %} #}
  <div class="tab" id="tab-3"><h3>Occupation:</h3>
    {{ element.group_three}}
  </div>
 {#{% endif %}#}
 
  <div class="tab">{{ element.group_four}}
  </div>
  <div>
    <div class="user_reg_bttn">
      <button type="button" id="prevBtn" onclick="nextPrev(-1)">Previous</button>
        {{ element.actions.submit }}
      <button type="button" id="nextBtn" onclick="nextPrev(1)">Next</button>
    </div>
  </div>
  <!-- Circles which indicates the steps of the form: -->
 
    {{ element.form_build_id }}
    {{ element.form_token }}
    {{ element.form_id }}
</form>
<div id="copy-content" style="display:none"></div>


JS


var currentTab = 0; // Current tab is set to be the first tab (0)
showTab(currentTab); // Display the current tab

function showTab(n) {
  // This function will display the specified tab of the form...
  var x = document.getElementsByClassName("tab");
  x[n].style.display = "block";
  //... and fix the Previous/Next buttons:
  if (n == 0) {
    document.getElementById("prevBtn").style.display = "none";
  } else {
    document.getElementById("prevBtn").style.display = "inline";
  }
  if (n == (x.length - 1)) {
    
    document.getElementById("nextBtn").innerHTML = "Submit";
    document.getElementById("nextBtn").style.display = "none";
    document.getElementById("edit-submit").style.display = "block";
    
  } else {
    document.getElementById("nextBtn").innerHTML = "Next";
    document.getElementById("nextBtn").style.display = "block";
    document.getElementById("edit-submit").style.display = "none";
  }
  //... and run a function that will display the correct step indicator:
 // fixStepIndicator(n)
}

function nextPrev(n) {
  // This function will figure out which tab to display
  var x = document.getElementsByClassName("tab");
  // Exit the function if any field in the current tab is invalid:
  if (n == 1 && !validateForm()) return false;
  // Hide the current tab:
 
  x[currentTab].style.display = "none";
  // Increase or decrease the current tab by 1:
  currentTab = currentTab + n;
  // if you have reached the end of the form...
  if (currentTab >= x.length) {
    
    // document.getElementById("user-register-form").submit();
    return false;
  }
  var acc_name = document.getElementById("edit-field-occupation-status").value;
  if (acc_name == 'Student') {
    if(currentTab == 2 && n == 1){
        currentTab++;
    } else if(currentTab == 2 && n == -1){
        currentTab--;
    }
  }
 

  // Otherwise, display the correct tab:
  showTab(currentTab);
}

function validateForm() {
  // This function deals with validation of the form fields
  var x, y, i, valid = true;
  x = document.getElementsByClassName("tab");
  y = x[currentTab].getElementsByTagName("input");
  z= x[currentTab].getElementsByTagName("select");
  // A loop that checks every input field in the current tab:
  for (i = 0; i < y.length; i++) {
      if(y[i].required && y[i].value=="") {
          y[i].className += " invalid";
          valid = false;
        }
    }
 for (i = 0; i < z.length; i++) {
      if(z[i].required && z[i].value=="_none") {
          z[i].className += " invalid";
          valid = false;
      }
  }
  return valid; // return the valid status
}

 

CSS 

#user-register-form {
  background-color: #ffffff;
  margin: 100px auto;
  font-family: Raleway;
  padding: 40px;
  width: 70%;
  min-width: 300px;
}

h1 {
  text-align: center;  
}

input {
  padding: 10px;
  width: 100%;
  font-size: 17px;
  font-family: Raleway;
  border: 1px solid #aaaaaa;
}

/* Mark input boxes that gets an error on validation: */
input.invalid {
  background-color: #ffdddd;
}

/* Hide all steps by default: */
.tab {
  display: none;
}
 #edit-submit, button {
  background-color: #4CAF50;
  color: #ffffff;
  border: none;
  padding: 10px 20px;
  font-size: 17px;
  font-family: Raleway;
  cursor: pointer;
}

button:hover {
  opacity: 0.8;
}

#prevBtn {
  background-color: #bbbbbb;
}

/* Make circles that indicate the steps of the form: */
/*.step {*/
/*  height: 15px;*/
/*  width: 15px;*/
/*  margin: 0 2px;*/
/*  background-color: #bbbbbb;*/
/*  border: none;  */
/*  border-radius: 50%;*/
/*  display: inline-block;*/
/*  opacity: 0.5;*/
/*}*/

/*.step.active {*/
/*  opacity: 1;*/
/*}*/

/* Mark the steps that are finished and valid: */
/*.step.finish {*/
/*  background-color: #4CAF50;*/
/*}*/

Comments