En este tutorial te enseñaré cómo mostrar un form wizard con Bootstrao que esté validado con jQuery. Es muy simple de implementar con la ayuda de la librerÃa Bootstrap, simplemente utilizaremos sus componentes para crear un formulario dividido en distintos pasos y asÃ, mejoraremos el proceso de recolección de información y haremos mucho más elegante la página. Todos los campos se validarán, como he dicho antes, mediante jQuery.
En este tutorial utilizaremos la librerÃa jQuery y Bootstrap. Asà que, vamos a incluirlas.
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script> <link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet"> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
Ambas librerÃas son obligatorias para ejecutar el siguiente snippet. En este ejemplo vamos a crear un formulario dividido en tres pasos, tal que asÃ:
<div class="stepwizard"> <div class="stepwizard-row setup-panel"> <div class="stepwizard-step"> <a href="#step-1" type="button" class="btn btn-primary btn-circle">1</a> <p>Account Details</p> </div> <div class="stepwizard-step"> <a href="#step-2" type="button" class="btn btn-default btn-circle" disabled="disabled">2</a> <p>Career</p> </div> <div class="stepwizard-step"> <a href="#step-3" type="button" class="btn btn-default btn-circle" disabled="disabled">3</a> <p>Social Media</p> </div> </div> </div>
Este código HTML contiene los elementos de cada paso del formulario:
<div class="row setup-content" id="step-1"> <div class="col-xs-12"> <div class="col-md-12"> <h3> Account Details</h3> <!-- content go here --> <button class="btn btn-light btn-block nextBtn pull-right" type="button" >Next</button> </div> </div> </div> <div class="row setup-content" id="step-2"> <div class="col-xs-12"> <div class="col-md-12"> <h3> Career</h3> <!-- content go here --> <button class="btn btn-light btn-block nextBtn pull-right" type="button" >Next</button> </div> </div> </div> <div class="row setup-content" id="step-3"> <div class="col-xs-12"> <div class="col-md-12"> <h3> Social Media</h3> <!-- content go here --> <button class="btn btn-light nextBtn btn-block pull-right" type="submit">Finish!</button> </div> </div> </div>
Utilizamos jQuery para habilitar la navegación y validar nuestro formulario.
<script type="text/javascript"> $(document).ready(function () { var navListItems = $('div.setup-panel div a'), // tab nav items allWells = $('.setup-content'), // content div allNextBtn = $('.nextBtn'); // next button allWells.hide(); // hide all contents by defauld navListItems.click(function (e) { e.preventDefault(); var $target = $($(this).attr('href')), $item = $(this); if (!$item.hasClass('disabled')) { navListItems.removeClass('btn-primary').addClass('btn-default'); $item.addClass('btn-primary'); allWells.hide(); $target.show(); $target.find('input:eq(0)').focus(); } }); // next button allNextBtn.click(function(){ var curStep = $(this).closest(".setup-content"), curStepBtn = curStep.attr("id"), nextStepWizard = $('div.setup-panel div a[href="#' + curStepBtn + '"]').parent().next().children("a"), curInputs = curStep.find("input[type='text'],input[type='email'],input[type='password'],input[type='url']"), isValid = true; // Validation $(".form-group").removeClass("has-error"); for(var i=0; i<curInputs.length; i++){ if (!curInputs[i].validity.valid){ isValid = false; $(curInputs[i]).closest(".form-group").addClass("has-error"); } } // move to next step if valid if (isValid) nextStepWizard.removeAttr('disabled').trigger('click'); }); $('div.setup-panel div a.btn-primary').trigger('click'); }); </script>
Y por último aplicamos algo de CSS para organizar las distintas pestañas de los pasos.
<style type="text/css"> .form-control { height: 37px; } .stepwizard-step p { margin-top: 10px; } .stepwizard-row { display: table-row; } .stepwizard { display: table; width: 100%; position: relative; } .stepwizard-step button[disabled] { opacity: 1 !important; filter: alpha(opacity=100) !important; } .stepwizard-row:before { top: 14px; bottom: 0; position: absolute; content: " "; width: 100%; height: 1px; background-color: #ccc; z-order: 0; } .stepwizard-step { display: table-cell; text-align: center; position: relative; } .btn-circle { width: 30px; height: 30px; text-align: center; padding: 6px 0; font-size: 12px; line-height: 1.428571429; border-radius: 15px; } </style>
Fuente: phpgang.com