【问题标题】:How to create a multi-step form with smooth transitions between steps?如何创建步骤之间平滑过渡的多步骤表单?
【发布时间】:2017-05-07 12:35:57
【问题描述】:

使用 jQuery(如果需要 CSS3),如何创建一个步骤之间平滑过渡的多步骤表单?

例如,如果我有一个这样的三步表格,我怎样才能使步骤之间的过渡平滑?

//shows #form_part{n} and hides the other parts
function shows_form_part(n){

  var i = 1, p = $("#form_part"+(i).toString());
  while (p.length != 0){

      if (i == n){
          p.show();
      }
      else{
          p.hide();        
      }
      i++;
      p = $("#form_part"+(i).toString());
  }

}

//change accordingly, just an example
function submit_form() {
  var sum = Number($("#num1").val()) + 
            Number($("#num2").val()) + 
            Number($("#num3").val());
  alert("The sum result is: " + sum);
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<body onload="shows_form_part(1)">
<form>
  <div id="form_part1">
    Part 1<br>
    <input type="number" value="1" id="num1"><br>
    <!--form elements 1-->
    <button type="button" onclick="shows_form_part(2)">&raquo;</button>
  </div>
  <div id="form_part2">
    Part 2<br>
    <input type="number" value="2" id="num2"><br>
    <!--form elements 2-->
    <button type="button" onclick="shows_form_part(1)">&laquo;</button>
    <button type="button" onclick="shows_form_part(3)">&raquo;</button>
  </div>
  <div id="form_part3">
    Part 3<br>
    <!--form elements 3-->
    <input type="number" value="3" id="num3"><br>
    <button type="button" onclick="shows_form_part(2)">&laquo;</button>
    <button type="button" onclick="submit_form()">Sum</button>
  </div>
</form>
</body>

【问题讨论】:

  • @LGSon,我提出了这个问题,并从一开始就给出了答复,以帮助社区。无论如何,我按照您的要求编辑了问题。
  • 回顾了我的反对意见 :) ...正如您可能理解的那样,您是否打算回答自己的问题并不重要,它需要正确书写。

标签: jquery forms css


【解决方案1】:

实现这一点的一种方法是在 jQuery 方法 .show(speed).hide(speed) 中为每个表单步骤 div 使用参数。速度参数可以是"slow""fast" 或转换时间(以毫秒为单位)。

然后需要一个函数来显示和隐藏相应的表单步骤divs。以下函数仅显示 #form_part{n} 并隐藏其他表单部分。在HTML 部分,只需将每个表单步骤div 有序地命名为id="form_part{n}",即form_part1form_part2 等。

//shows #form_part{n} and hides the other parts
function shows_form_part(n){

  var i = 1, p = $("#form_part"+(i).toString());
  while (p.length != 0){

      if (i == n){
          p.show("slow");
      }
      else{
          p.hide("slow");        
      }
      i++;
      p = $("#form_part"+(i).toString());
  }

}

//change accordingly, just an example
function submit_form() {
  var sum = Number($("#num1").val()) + 
            Number($("#num2").val()) + 
            Number($("#num3").val());
  alert("The sum result is: " + sum);
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<body onload="shows_form_part(1)">
<form>
  <div id="form_part1">
    Part 1<br>
    <input type="number" value="1" id="num1"><br>
    <!--form elements 1-->
    <button type="button" onclick="shows_form_part(2)">&raquo;</button>
  </div>
  <div id="form_part2">
    Part 2<br>
    <input type="number" value="2" id="num2"><br>
    <!--form elements 2-->
    <button type="button" onclick="shows_form_part(1)">&laquo;</button>
    <button type="button" onclick="shows_form_part(3)">&raquo;</button>
  </div>
  <div id="form_part3">
    Part 3<br>
    <!--form elements 3-->
    <input type="number" value="3" id="num3"><br>
    <button type="button" onclick="shows_form_part(2)">&laquo;</button>
    <button type="button" onclick="submit_form()">Sum</button>
  </div>
</form>
</body>

在这里测试。它有效:)

【讨论】:

    【解决方案2】:

    你可以这样做:

    $(document).ready(function () {
      var navListItems = $('div.setup-panel div a'),
              allWells = $('.setup-content'),
              allNextBtn = $('.nextBtn');
    
      allWells.hide();
    
      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();
          }
      });
    
      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='url']"),
              isValid = true;
    
          $(".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");
              }
          }
    
          if (isValid)
              nextStepWizard.removeAttr('disabled').trigger('click');
      });
    
      $('div.setup-panel div a.btn-primary').trigger('click');
    });
    body {
        margin-top:40px;
    }
    .stepwizard-step p {
        margin-top: 10px;
    }
    .stepwizard-row {
        display: table-row;
    }
    .stepwizard {
        display: table;
        width: 50%;
        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;
    }
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script>
    <div class="container">
      
    <div class="stepwizard col-md-offset-3">
        <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>Step 1</p>
          </div>
          <div class="stepwizard-step">
            <a href="#step-2" type="button" class="btn btn-default btn-circle" disabled="disabled">2</a>
            <p>Step 2</p>
          </div>
          <div class="stepwizard-step">
            <a href="#step-3" type="button" class="btn btn-default btn-circle" disabled="disabled">3</a>
            <p>Step 3</p>
          </div>
        </div>
      </div>
      
      <form role="form" action="" method="post">
        <div class="row setup-content" id="step-1">
          <div class="col-xs-6 col-md-offset-3">
            <div class="col-md-12">
              <h3> Step 1</h3>
              <div class="form-group">
                <label class="control-label">First Name</label>
                <input  maxlength="100" type="text" required="required" class="form-control" placeholder="Enter First Name"  />
              </div>
              <div class="form-group">
                <label class="control-label">Last Name</label>
                <input maxlength="100" type="text" required="required" class="form-control" placeholder="Enter Last Name" />
              </div>
              <div class="form-group">
                <label class="control-label">Address</label>
                <textarea required="required" class="form-control" placeholder="Enter your address" ></textarea>
              </div>
              <button class="btn btn-primary nextBtn btn-lg pull-right" type="button" >Next</button>
            </div>
          </div>
        </div>
        <div class="row setup-content" id="step-2">
          <div class="col-xs-6 col-md-offset-3">
            <div class="col-md-12">
              <h3> Step 2</h3>
              <div class="form-group">
                <label class="control-label">Company Name</label>
                <input maxlength="200" type="text" required="required" class="form-control" placeholder="Enter Company Name" />
              </div>
              <div class="form-group">
                <label class="control-label">Company Address</label>
                <input maxlength="200" type="text" required="required" class="form-control" placeholder="Enter Company Address"  />
              </div>
              <button class="btn btn-primary nextBtn btn-lg pull-right" type="button" >Next</button>
            </div>
          </div>
        </div>
        <div class="row setup-content" id="step-3">
          <div class="col-xs-6 col-md-offset-3">
            <div class="col-md-12">
              <h3> Step 3</h3>
              <button class="btn btn-success btn-lg pull-right" type="submit">Submit</button>
            </div>
          </div>
        </div>
      </form>
      
    </div>

    示例来自:http://bootsnipp.com/snippets/e3MBM

    【讨论】:

    • 谢谢,但是步骤之间没有平滑过渡。
    • idk 为什么它在这里不起作用,但请看这里:bootsnipp.com/snippets/e3MBM
    • 我看到了链接,没有平滑过渡
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    • 2023-03-16
    • 2017-02-01
    相关资源
    最近更新 更多