javascript - 取消选中多个复选框后需要重新显示内容

标签 javascript jquery html

我有多个复选框来过滤另一个div中的内容,选中一个复选框后,仅显示属于该复选框的内容,其余内容被隐藏,当您选中更多框时,会显示更多内容。

我遇到的问题是,当我取消选中所有框时,所有内容都会消失,而我希望当我取消选中所有框时所有内容都会出现。

$(document).ready(function() {
  $('div.tags').find('input:checkbox').on('click', function() {
    $('.results > div').hide();
    $('div.tags').find('input:checked').each(function() {
      $('.results > div.' + $(this).attr('rel')).show();
    });
  });
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<div class="tags">
  <ul class="list-unstyled filterSection">
    <li>
      <label class="filter-check clearfix">
                <input type="checkbox" rel="1" id="1" />
                <label for="1">1</label>
      </label>
    </li>
    <li>
      <label class="filter-check clearfix">
                <input type="checkbox" rel="2" id="2" />
                <label for="2">2</label>
      </label>
    </li>
    <li>
      <label class="filter-check clearfix">
                <input type="checkbox" rel="3" id="3" />
                <label for="3">3</label>
      </label>
    </li>
    <li>
      <label class="filter-check clearfix">
                <input type="checkbox" rel="4" id="4" />
                <label for="4">4</label>
      </label>
    </li>
    <li>
      <label class="filter-check clearfix">
                <input type="checkbox" rel="5" id="5" />
                <label for="5">5</label>
      </label>
    </li>
  </ul>
</div>

<div class="results" id="">
  <div class="1 m-3 border-new border border-dark rounded">
    <a href="">
      <img src="images/1.jpg">
      <div>
      </div>
    </a>
  </div>
  <div class="1 m-3  border-new border border-dark rounded">
    <a href="">
      <img src="images/1.jpg">
      <div>
      </div>
    </a>
  </div>
  <div class="2 m-3  border-new border border-dark rounded">
    <a href="">
      <img src="images/2.jpg">
      <div>
      </div>
    </a>
  </div>
  <div class="2 m-3  border-new border border-dark rounded">
    <a href="">
      <img src="images/2.jpg">
      <div>
      </div>
    </a>
  </div>
  <div class="3 m-3  border-new border border-dark rounded">
    <a href="">
      <img src="images/3.jpg">
      <div>
      </div>
    </a>
  </div>
  <div class="5 m-3  border-new border border-dark rounded">
    <a href="">
      <img src="images/5.jpg">
      <div>
      </div>
    </a>
  </div>
  <div class="1 m-3  border-new border border-dark rounded">
    <a href="">
      <img src="images/1.jpg">
      <div>
      </div>
    </a>
  </div>
  <div class="4 m-3  border-new border border-dark rounded">
    <a href="">
      <img src="images/4.jpg">
      <div>
      </div>
    </a>
  </div>
  <div class="1 m-3  border-new border border-dark rounded">
    <a href="">
      <img src="images/1.jpg">
      <div>
      </div>
    </a>
  </div>
  <div class="3 m-3  border-new border border-dark rounded">
    <a href="">
      <img src="images/3.jpg">
      <div>
      </div>
    </a>
  </div>
  <div class="4 m-3  border-new border border-dark rounded">
    <a href="">
      <img src="images/4.jpg">
      <div>
      </div>
    </a>
  </div>
</div>

最佳答案

首先,不要监听复选框上的click事件;为此有一个专门的 change 事件。如果我使用键盘切换复选框,您的 click 事件将不会触发。

其次,这只是监听找到了多少个选中的复选框,然后采取相应的行动。

$('div.tags').find('input:checkbox').on('change', function() {
    let
    els = $('.results > div').hide(),
    checked = $('div.tags').find('input:checked').each(function() {
        els.filter('.'+$(this).attr('rel')).show();
    });
    if (!checked.length) els.show(); //<-- none checked? Show all
});

另请注意,通过分配 els,我们可以避免在同一选择器上重复查找。

关于javascript - 取消选中多个复选框后需要重新显示内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54971801/

相关文章:

javascript - Jquery 图片预览插件

javascript - 有没有一种方法可以动态地将对象名称传递给函数(作为参数)并使用参数引用该对象的属性?

javascript - 使用 GET 方法的 Jquery 中的 CORS 问题

javascript - 带有纯 css 视差的 Jquery 滚动不起作用

html - 为什么在刷新页面之前我的 div 不能正确调整大小?错误或错误代码?

javascript - 在 PhpStorm IDE 中完成时向 JavaScript 元素添加逗号

javascript - javascript 中 window.onload 中的 onclick

javascript - 如何打开 div 并使消息可读?

javascript - 使用 switch 语句在 javascript 中更改时间时显示不同的消息

html - 打印 html 会忽略 CSS 样式表