JQuery steps: How to show/hide an additional step based on user input

Codingmedic picture Codingmedic · Sep 2, 2017 · Viewed 8.1k times · Source

I am using jquery-steps to create an "interactive" two/three step form.

One thing I am trying to achieve is to show/hide an additional step after step 2 (which would normally be the final step) which would be the new final step based on the value of a checkbox. If it's checked, step 3 should show up, otherwise the form would submit after step 2. However, I am not sure where to start!

This is what I have so far for the javascript part.

The full form is available on JSFiddle

Answer

Phani Kumar M picture Phani Kumar M · Sep 2, 2017

Hope this updated script helps you. Paste the below code just after </form> tag based in the JSFiddle you provided.

<script>
 var currentStep = 0; //store current step number

  $("#wizard").steps({
    headerTag: "h1",
    bodyTag: "fieldset",
    //transitionEffect: "slideLeft",

    onStepChanging: function(event, currentIndex, newIndex)
    {
        if (newIndex < currentIndex) return true; //Previous button click - allow
        else if (currentIndex === 1 && ($('#opt1').is(':checked'))) return true; //If in second step and checkbox checked then proceed to Step 3
        else if (currentIndex === 1 && (!$('#opt1').is(':checked'))) return false; //If in second step and checkbox checked then stop at Step 2

        return true;
    },

    onStepChanged: function (event, currentIndex, newIndex) {
      currentStep = currentIndex; //Set current step number in currentStep variable

      if (currentIndex === 1 && (!$('#opt1').is(':checked'))) //If in second step and checkbox not checked then display Finish button and hide Next button
      {
         $('a[href="#finish"]').parent().attr("style", "display: block;")
         $('a[href="#next"]').parent().attr("style", "display: none;");
      }
    },

    onFinished: function (event, currentIndex)
    {
      var form = $(this);
      form.submit();
    },
  });

  $("#wizard-t-2").hide(); //Hide Step 3 by default

  //Event handler for checkbox 1 
  function ShowHideDiv1(opt1) {
    var opt1more = document.getElementById("opt1more");
    opt1more.style.display = opt1.checked ? "block" : "none";

    if (opt1.checked) 
    {
        $("#wizard-t-2").show();

      if (currentStep == 1) //If in second step and checkbox checked then display Next button and hide Finish button
      {
         $('a[href="#finish"]').parent().attr("style", "display: none;")
         $('a[href="#next"]').parent().attr("style", "display: block;");
      }
    }
    else
    {
      $("#wizard-t-2").hide();

      if (currentStep == 1) //If in second step and checkbox not checked then display Finish button and hide Next button
      {
         $('a[href="#finish"]').parent().attr("style", "display: block;")
         $('a[href="#next"]').parent().attr("style", "display: none;");
      }
    } 
  }

  function ShowHideDiv2(opt2) {
    var opt2more = document.getElementById("opt2more");
    opt2more.style.display = opt2.checked ? "block" : "none";
  }

  function showVal(newVal){
    document.getElementById("valBox").innerHTML=newVal;
  }
</script>