如何显示或隐藏具有多个复选框的多个div

时间:2014-09-05 08:43:21

标签: jquery checkbox show-hide

我有一个要求,我有多个复选框。 我有一组与<p>标签相关的复选框相关内容。 页面加载时,将显示所有<p>标记相关内容。 用户选择任何复选框后 然后只会显示与该复选框相关的内容,并且剩余将隐藏。 接下来,当用户选择第二个复选框时,将显示第二个复选框相关内容。

以下是<p>标记内容,我有20个<p>标记

<p id="sb1">Checkbox content one</p>
<p id="sb2">Checkbox content two</p>

<input name="chk1" type="checkbox" id="chk1" value="">chekme1
<input name="chk2" type="checkbox" id="chk2" value="">checkme2

这是我的代码

$(document).ready(function()
{
    if($(this).prop('checked'))
    {
        $('#chk1').prop('checked', true);
        $("#sb2,#sb3,#sb4,#sb5,#sb6,#sb7,#sb8,#sb9,#sb10").hide();
    }
    else
    {
        $('#chk2').prop('checked', false);
        $("#sb1,#sb3,#sb4,#sb5,#sb6,#sb7,#sb8,#sb9,#sb10").show();
    }
});

有人可以帮助我,像这样我有20个复选框和20个<p>标签,我试过很多方面。

请在这方面帮助我,非常感谢任何帮助..

5 个答案:

答案 0 :(得分:3)

<强> HTML

   <p id="sb1"  class="p_element">Checkbox content one</p>
   <p id="sb2"  class="p_element">Checkbox content two</p>

   <input name="chk1" class="check_box" type="checkbox" data-ptag="sb1" id="chk1" value="">chekme1
   <input name="chk2"  class="check_box" type="checkbox" data-ptag="sb2" id="chk2" value="">checkme2

<强>的jQuery

$('.check_box').change(function(){
if($('.check_box:checked').length==0){
    $('.p_element').show(); //Show all,when nothing is checked
}else{
    $('.p_element').hide();
    $('.check_box:checked').each(function(){
        $('#'+$(this).attr('data-ptag')).show();
    });
  }

});

<强> FIDDLE DEMO

答案 1 :(得分:1)

尝试

var first = true;
$('input[type="checkbox"][name^=chk]').change(function () {
    var $target = $('#sb' + this.id.replace('chk', '')).toggle(this.checked);
    if (first) {
        $('p[id^=sb]').not($target).hide();
        first = false;
    }
})

演示:Fiddle

答案 2 :(得分:0)

尝试此操作:使用jQuery start with selector并先隐藏所有内容,然后显示相应的内容。

<script>
       $(document).ready(function()
       {
           //hide all contents
           $('p[id^=sb]').hide();

           $('input[id^=chk]').change(function(){

              // get checkbox index
              var index = $(this).attr('id').replace('chk','');

              //show respective contents
              if($(this).is(':checked'))
                $('#sb'+index).show();
              else
                $('#sb'+index).hide();
           });

        });
  </script>

<强> Demo

答案 3 :(得分:0)

首先,在您script范围内this范围是document而不是checkboxes。 然后,您必须将行为绑定到checkboxes,最重要的是,使用class代替id s 或者你会生气 所以:

<pre>
  <p class="sb">Checkbox content one</p>
  <p class="sb">Checkbox content two</p>
  ...
</pre>

<pre>
  <input name="chk1" type="checkbox" id="chk1" value="">chekme1
  <input name="chk2" type="checkbox" id="chk2" value="">checkme2
</pre>

然后:

$(function(){

 $("#chk1").on('change', function(){
    if($(this).prop('checked'))
     $(".sb").hide();
     $(".sb").eq(0).show();
 })

 $("#chk2").on('change', function(){
    if(!$(this).prop('checked'))
     $(".sb").eq(0).hide();
     $(".sb").show();
 })
})

这是一个小提琴:http://jsfiddle.net/8sm8njjs/1

使用你的代码情况有点棘手,也许试着解释你想要实现的目标

答案 4 :(得分:0)

<强> DEMO

Html Part:

<pre>
<p id="sb1">Checkbox content one</p>
<p id="sb2">Checkbox content two</p>
<p id="sb3">Checkbox content three</p>
<p id="sb4">Checkbox content four</p>
</pre>

<pre>
<input name="chk1" type="checkbox" id="chk1" value="">chekme1
<input name="chk2" type="checkbox" id="chk2" value="">checkme2
</pre>

Javascript Part:

$(document).ready(function()
{
    $('p').hide();

    $('#chk1').change(function(){ 
        var tags=$("#sb1,#sb2");
       if($(this).attr('checked'))
       {
           tags.show();
       }
        else{
           tags.hide();
       }
    });

    $('#chk2').change(function(){ 
       var tags=$("#sb3,#sb4");

       if($(this).attr('checked'))
       {
           tags.show();
       }
        else{
            tags.hide();
       }
    });
});