首页 文章

使用jquery和复选框显示/隐藏多个div

提问于
浏览
0

我正在尝试使用各种复选框显示/隐藏多个div . 我的目标是当用户选择类别/类别时CMS提供的div类 .

这适用于一个类但是只要多个类被赋予一个div它们就会发生冲突并且它会混淆整个事物 .

HTML for the checkboxes

<ul class="checkboxes">
        <li class="dropper"><a href="#"><label>Project Management<input id="box1" type="checkbox" checked="checked" name="checkbox-01" /><span id="box1"></span></label></a></li>
        <li><a href="#"><label>Copywriting<input id="box2" type="checkbox" checked="checked" name="checkbox-02" /><span id="box2"></span></label></a></li>
        <li><a href="#"><label>Design<input id="box3" type="checkbox" checked="checked" name="checkbox-03" /><span id="box3"></span></label></a></li>
        <li><a href="#"><label>Editing<input id="box4" type="checkbox" checked="checked" name="checkbox-04" /><span id="box4"></span></label></a></li>
        <li><a href="#"><label>Multimedia<input id="box5" type="checkbox" checked="checked" name="checkbox-05" /><span id="box5"></span></label></a></li>
        <li><a href="#"><label>Advertising<input id="box6" type="checkbox" checked="checked" name="checkbox-06" /><span id="box6"></span></label></a></li>
        <li><a href="#"><label>Consultancy<input id="box7" type="checkbox" checked="checked" name="checkbox-07" /><span id="box7"></span></label></a></li>
        <li class="dropper"><a href="#"><span id="reset-toggles" class="reset">Reset</span></a></li>
    </ul>

HTML for the divs I want to show/hide

<div class="box-shadow copywriting design editing">
  <div class="caption">
      <h3>Scottish Hosteler Magazine</h3>
      <h4>Scottish Youth Hostel Association</h4>
      <p><a href="case-study-L1.php">Find out more &gt; &gt;</a></p>
  </div>
  <img src="img/tile1.jpg"/>
</div>

<div class="box-shadow copywriting design">
  <div class="caption">
      <h3>Scottish Dental Magazine</h3>
      <h4>Scottish Dental</h4>
      <p><a href="case-study-L2.php">Find out more &gt; &gt;</a></p>
  </div>
  <img src="img/tile2.jpg"/>
</div>

And jQuery

$(document).ready(function() {

$("#reset-toggles").click(function() {
  $("input[type=checkbox]").attr("checked", !0);

  }), $("#box1").click(function() {
      $(".projman").fadeToggle("fast", "linear");

  }), $("#box2").click(function() {
      $(".copywriting").fadeToggle("fast", "linear");

  }), $("#box3").click(function() {
      $(".design").fadeToggle("fast", "linear");

  }), $("#box4").click(function() {
      $(".editing").fadeToggle("fast", "linear");

  }), $("#box5").click(function() {
      $(".multimedia").fadeToggle("fast", "linear");

  }), $("#box6").click(function() {
      $(".advertising").fadeToggle("fast", "linear");
  });
});

所以说用户想要查看带有“设计”和“文案”类的div只会隐藏顶部的例子,因为它还包含“编辑”类

基本上我所追求的是允许组合工作的代码,即如果用户选择“设计”和“文案”,它将只显示具有这两个类的div而不是具有另一个类的那些,例如“编辑”以及

非常复杂和令人沮丧!

2 回答

  • 0

    filter, meet schmilter

    jQuery的:

    var puts = $('.checkboxes input[type=checkbox]');//checkboxes
    var cans = $('.box-shadow');//content blocks
    var schmilt = true;//set false for filtering instead of schmiltering
    function schmilter() {
        puts.each(function() {//get checkboxes
            var cl = $(this).attr('id');//get id
            if (this.checked) { $('.'+cl).addClass('show'); }//if checked show
            else { $('.'+cl).addClass('hide'); }//if !checked hide
            if (!$('.'+cl).length) { $(this).prop('checked',false).parent('li').hide(); }//if class doesn't exist uncheck/hide invalid options
        });
        cans.each(function() {//get all content blocks
            if(schmilt) {//if schmilt
                if($(this).hasClass('hide')) { $(this).fadeOut('fast').removeClass('hide show'); }//hide
                else if ($(this).hasClass('show')) { $(this).fadeIn('fast').removeClass('show'); }//show
            } else {//if !schmilt
                if($(this).hasClass('show')) { $(this).fadeIn('fast').removeClass('hide show'); }//show
                else if ($(this).hasClass('hide')) { $(this).fadeOut('fast').removeClass('hide'); }//hide   
            }
        });
    }
    schmilter();//initial run
    puts.on('change', function() { schmilter(); });//on change run schmilter
    $('#reset').on('click', function() {//click reset
        puts.prop('checked', true);//check all
        schmilter();//run schmilter
    });
    

    这将查看所有选中/未选中的框,分配 hideshow 的类 . 如果容器具有 hide ,则它将被隐藏,并且 hideshow 将被删除 . 如果它只有 show ,则显示它并删除 show .

    当您设置 schmilt = false 时,它将执行相反的操作并提供典型的过滤功能 .

    如果它们不适用于任何现有容器,它也将删除选择 .

    我重写了html以使其更有意义,就像@scrowler提到的那样,但更进一步 . 我在复选框和内容之间添加了相应的ID /类 . 因此,如果一个复选框的id为 #edit ,则相应的内容容器都具有 .edit

    HTML:

    <ul class="checkboxes">
        <li class="dropper">
            <label for="projman">Project Management</label>
            <input id="projman" type="checkbox" checked="checked" name="projman" />
        </li>
        <li>
            <label for="copywriting">Copywriting</label>
            <input id="copywriting" type="checkbox" checked="checked" name="copywriting" />
        </li>
        <li>
            <label for="design">Design</label>
            <input id="design" type="checkbox" checked="checked" name="design" />
        </li>
        <li>
            <label for="editing">Editing</label>
            <input id="editing" type="checkbox" checked="checked" name="editing" />
        </li>
        <li>
            <label for="multimedia">Multimedia</label>
            <input id="multimedia" type="checkbox" checked="checked" name="multimedia" />
        </li>
        <li>
            <label for="advertising">Advertising</label>
            <input id="advertising" type="checkbox" checked="checked" name="advertising" />
        </li>
        <li>
            <label for="consultancy">Consultancy</label>
            <input id="consultancy" type="checkbox" checked="checked" name="consultancy" />
        </li>
        <li class="dropper"><a href="javascript:void(0);" id="reset">Reset</a>
        </li>
    </ul>
    <div class="box-shadow copywriting design editing">
        <div class="caption">
             <h3>Scottish Hosteler Magazine</h3>
             <h4>Scottish Youth Hostel Association</h4>
            <p><a href="case-study-L1.php">Find out more &gt; &gt;</a>
            </p>
        </div>
        <img src="img/tile1.jpg" />
    </div>
    <div class="box-shadow copywriting design">
        <div class="caption">
             <h3>Scottish Dental Magazine</h3>
             <h4>Scottish Dental</h4>
            <p><a href="case-study-L2.php">Find out more &gt; &gt;</a>
            </p>
        </div>
        <img src="img/tile2.jpg" />
    </div>
    

    做了一个小提琴:http://jsfiddle.net/filever10/4NS3A/

  • 2

    您要将 #box1#box2 等唯一ID分配给HTML中禁止的多个元素,使用要对多个元素应用引用的类 .

    在您的情况下,我假设您要将jQuery处理程序应用于复选框元素,请尝试以下操作:

    <li class="dropper">
        <label for="box1">Project Management</label>
        <input id="box1" type="checkbox" checked="checked" name="checkbox-01">
    </li>
    
    • 我删除了空格,因为它是空的并复制了一个唯一的ID,我删除了锚标记,因为它似乎也没用 .

相关问题