2017-09-02 3 views
2

J'utilise jquery-steps pour créer un formulaire "interactif" à deux ou trois étapes. Une chose que j'essaye de réaliser est d'afficher/cacher une étape supplémentaire après l'étape 2 (qui serait normalement l'étape finale) qui serait la nouvelle étape finale basée sur la valeur d'une case à cocher. Si elle est cochée, l'étape 3 devrait apparaître, sinon le formulaire serait soumis après l'étape 2. Cependant, je ne sais pas par où commencer!Étapes JQuery: Comment afficher/masquer une étape supplémentaire en fonction de l'entrée de l'utilisateur

C'est ce que j'ai jusqu'ici pour la partie javascript.

 $("#wizard").steps({ 
 
     headerTag: "h1", 
 
     bodyTag: "fieldset", 
 
     //transitionEffect: "slideLeft", 
 
     onStepChanging: function(event, currentIndex, newIndex) 
 
     { 
 
      //only apply to first step 
 
       if (currentIndex === 0 && ($('#opt1').attr('checked'))) 
 
       { 
 
         $("#wizard").steps("insert", 1, { 
 
         title: "Step Title", 
 
         content: "<p>Step Body</p>" 
 
         }); 
 
       } 
 
     return true; 
 

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

 
     }, 
 

 

 

 
    });

La forme complète est disponible sur JSFiddle

+0

S'il vous plaît vérifier la jsFiddle, il y a beaucoup d'erreurs javascript là ... – Dekel

+0

@Codingmedic Vous pouvez vérifier mon script ci-dessous mis à jour. –

Répondre

1

Hope this script mis à jour vous aide. Collez le code ci-dessous juste après le tag </form> basé sur le JSFiddle fourni.

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

Cela fonctionne parfaitement! Je vous remercie! – Codingmedic