Multistep div section&字段集

时间:2018-01-21 07:36:08

标签: jquery

我正在创建一个具有以下结构的多步骤表单。

<section>
    <fieldset>
        <label>Q1</label>
        <input type="radio" name="name" value="1">
        <button type="button" class="next btn btn-primary btn-block">Next</button>
    </fieldset>
    <fieldset>
        <label>Q2</label>
        <input type="radio" name="name" value="2">
        <button type="button" class="next btn btn-primary btn-block">Next</button>
    </fieldset>
    <fieldset>
        <label>Q3</label>
        <input type="radio" name="name" value="3">
        <button type="button" class="next btn btn-primary btn-block">Next</button>
    </fieldset>
</section>

部分数量取决于我从GET获得的值。问题是我想逐个显示一个字段集,一旦完成所有字段集,然后移到第2节,依此类推。下面的jQuery逐个使用一个字段集而不是一个部分。

var current = 1,current_step,next_step,steps;
  steps = $("fieldset").length;
    $(".next").click(function(){
        current_step = $(this).parent();
        next_step = $(this).parent().next();
        next_step.show();
        current_step.hide();
        setProgressBar(++current);
      });
      setProgressBar(current);

      // Change progress bar action
      function setProgressBar(curStep){
        var percent = parseFloat(100 / steps) * curStep;
        percent = percent.toFixed();
        $(".progress-bar")
          .css("width",percent+"%")
          .html(percent+"%");   
      }

#form section:not(:first-of-type) {
    display: none;
  }
        #form fieldset:not(:first-of-type) {
    display: none;
  } 

Fiddle

2 个答案:

答案 0 :(得分:1)

看看这个更新的小提琴。除了第一个之外,它会隐藏所有其他fieldset。 当用户点击下一个隐藏当前fieldset然后显示下一个

&#13;
&#13;
var len=$("section:first").children().length;
var i=0;
var s=0;
$(".next").click(function(){
i++;
if(len==i){
var p=$(this).parent().parent('section').next();
p.show();
p.children().first().show();
len=0;
i=0;
len=p.children().length;
alert(len);
$(this).parent().parent().hide();

}
else{
$(this).parent().next().show();
$(this).parent().hide();
}
});
$(document).ready(function(){
$("section").hide();
$("section:first").show();
$("fieldset").hide();
$("fieldset:first").show();
});
&#13;
#form section:not(:first-of-type) {
  display: none;
}

#form fieldset:not(:first-of-type) {
  display: none;
}
.hide{
  display:none;
  
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<section>
  <fieldset>
    <label>Q1</label>
    <input type="radio" name="name" value="1">
    <button type="button" class="next btn btn-primary btn-block">Next</button>
  </fieldset>
  <fieldset>
    <label>Q2</label>
    <input type="radio" name="name" value="2">
    <button type="button" class="next btn btn-primary btn-block">Next</button>
  </fieldset>
  <fieldset>
    <label>Q3</label>
    <input type="radio" name="name" value="3">
    <button type="button" class="next btn btn-primary btn-block">Next</button>
  </fieldset>
</section>
<section>
  <fieldset>
    <label>Q12</label>
    <input type="radio" name="name" value="1">
    <button type="button" class="next btn btn-primary btn-block">Next</button>
  </fieldset>
  <fieldset>
    <label>Q2</label>
    <input type="radio" name="name" value="2">
    <button type="button" class="next btn btn-primary btn-block">Next</button>
  </fieldset>
  <fieldset>
    <label>Q3</label>
    <input type="radio" name="name" value="3">
    <button type="button" class="next btn btn-primary btn-block">Next</button>
  </fieldset>
</section>
<section>
  <fieldset>
    <label>Q12</label>
    <input type="radio" name="name" value="1">
    <button type="button" class="next btn btn-primary btn-block">Next</button>
  </fieldset>
  <fieldset>
    <label>Q2</label>
    <input type="radio" name="name" value="2">
    <button type="button" class="next btn btn-primary btn-block">Next</button>
  </fieldset>
  <fieldset>
    <label>Q</label>
    <input type="radio" name="name" value="3">
    <button type="button" class="next btn btn-primary btn-block">Next</button>
  </fieldset>
</section><section>
  <fieldset>
    <label>Q42</label>
    <input type="radio" name="name" value="1">
    <button type="button" class="next btn btn-primary btn-block">Next</button>
  </fieldset>
  <fieldset>
    <label>Q22</label>
    <input type="radio" name="name" value="2">
    <button type="button" class="next btn btn-primary btn-block">Next</button>
  </fieldset>
  <fieldset>
    <label>Q3</label>
    <input type="radio" name="name" value="3">
    <button type="button" class="next btn btn-primary btn-block">Next</button>
  </fieldset>
</section>
&#13;
&#13;
&#13;

以及指向小提琴的链接:https://jsfiddle.net/t3gcd3dq/9/

答案 1 :(得分:0)

我试图通过正确的工作和优化逻辑给你答案。

$(document).ready(function() {

  var index, nextIndex, totalSteps = $(".step").length;
  $(".step").eq(0).children(".rdoStep").prop("checked", true);
  $(".next").on("click", function() {
    index = $(this).parents("fieldset").index();
    if (index < totalSteps) {
      $(".rdoStep").prop("checked", false);

      nextIndex = index + 1;
      if (nextIndex === totalSteps) {
        nextIndex -= 1;
      }

      $(".step")
        .eq(index)
        .children("button")
        .prop("disabled", true);

      $(".step")
        .eq(nextIndex)
        .show()
        .children(".rdoStep")
        .prop("checked", true);

    }
  });
});
*{
  font-family:"arial";
  font-size:12px;
}

.step {
  display: none;
}

.step:nth-child(1) {
  display: block;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<section>
  <fieldset class="step">
    <label>Q1</label>
    <input type="radio" name="name" class="rdoStep" value="1">
    <button type="button" class="next btn btn-primary btn-block">Next</button>
  </fieldset>
  <fieldset class="step">
    <label>Q2</label>
    <input type="radio" name="name" class="rdoStep" value="2">
    <button type="button" class="next btn btn-primary btn-block">Next</button>
  </fieldset>
  <fieldset class="step">
    <label>Q3</label>
    <input type="radio" name="name" class="rdoStep" value="3">
    <button type="button" class="next btn btn-primary btn-block">Next</button>
  </fieldset>
</section>