单击锚点时隐藏和显示div的Javascript

时间:2018-11-27 09:37:52

标签: javascript jquery html

我似乎弄乱了一些非常简单的jQuery。我可以在div 1和2之间以及从2到3之间进行切换,但是当我达到3时,就不能返回。这一定是一个愚蠢的错误,但我看不到吗?

$('#show-form-stage-1').click(function(){
  $('#form-stage-1').show();
  $('#form-stage-2').hide();
  $('#form-stage-3').hide();
});
$('#show-form-stage-2').click(function(){
  $('#form-stage-1').hide();
  $('#form-stage-2').show();
  $('#form-stage-3').hide();
});
$('#show-form-stage-3').click(function(){
  $('#form-stage-1').hide();
  $('#form-stage-2').hide();
  $('#form-stage-3').show();
});
#form-stage-2,
#form-stage-3 {
    display:none;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="form-stage-1">
  stage 1
  <br />
  <a href="#" id="show-form-stage-2">Next</a>
</div>
<div id="form-stage-2">
  stage 2
  <br />
  <a href="#" id="show-form-stage-1">Back</a>
  <a href="#" id="show-form-stage-3">Next</a>
</div>
<div id="form-stage-3">
  stage 3
  <br />
  <a href="#" id="show-form-stage-2">Back</a>
</div>

2 个答案:

答案 0 :(得分:1)

为每个元素提供唯一的ID。

$('#show-form-stage-1').click(function(){
    $('#form-stage-1').show();
    $('#form-stage-2').hide();
    $('#form-stage-3').hide();
});
$('#show-form-stage-2').click(function(){
    $('#form-stage-1').hide();
    $('#form-stage-2').show();
    $('#form-stage-3').hide();
});
$('#show-form-stage-3').click(function(){
    $('#form-stage-1').hide();
    $('#form-stage-2').hide();
    $('#form-stage-3').show();
});
$('#show-form-stage-4').click(function(){
    $('#form-stage-1').hide();
    $('#form-stage-2').show();
    $('#form-stage-3').hide();
});
#form-stage-2,
#form-stage-3 {
    display:none;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="form-stage-1">
    stage 1
    <br />
    <a href="#" id="show-form-stage-2">Next</a>
</div>
<div id="form-stage-2">
    stage 2
    <br />
    <a href="#" id="show-form-stage-1">Back</a>
    <a href="#" id="show-form-stage-3">Next</a>
</div>
<div id="form-stage-3">
    stage 3
    <br />
    <a href="#" id="show-form-stage-4">Back</a>
</div>

答案 1 :(得分:1)

属性id在文档中必须是唯一的。您已对多个元素使用相同的 id show-form-stage-2 )。将其更改为 class

$('#show-form-stage-1').click(function(){
    $('#form-stage-1').show();
    $('#form-stage-2').hide();
    $('#form-stage-3').hide();
});
$('.show-form-stage-2').click(function(){
    $('#form-stage-1').hide();
    $('#form-stage-2').show();
    $('#form-stage-3').hide();
});
$('#show-form-stage-3').click(function(){
    $('#form-stage-1').hide();
    $('#form-stage-2').hide();
    $('#form-stage-3').show();
});
#form-stage-2,
#form-stage-3 {
    display:none;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="form-stage-1">
    stage 1
    <br />
    <a href="#" class="show-form-stage-2">Next</a>
</div>
<div id="form-stage-2">
    stage 2
    <br />
    <a href="#" id="show-form-stage-1">Back</a>
    <a href="#" id="show-form-stage-3">Next</a>
</div>
<div id="form-stage-3">
    stage 3
    <br />
    <a href="#" class="show-form-stage-2">Back</a>
</div>

您还可以通过维护 class 来以更简化的方式实现相同目标:

$('div > a').click(function(){
  $('div').hide();
  if ($(this).is(".next"))
    $(this).parent().next().show();
  else{
    $(this).parent().prev().show();
    $(this).parent().next().hide();
  }
});
.form-stage{
  display:none;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div>
    stage 1
    <br />
    <a href="#" class="next">Next</a>
</div>
<div class="form-stage">
    stage 2
    <br />
    <a href="#" class="back">Back</a>
    <a href="#" class="next">Next</a>
</div>
<div class="form-stage">
    stage 3
    <br />
    <a href="#" class="back">Back</a>
</div>