首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >取消选中多个复选框后需要重新显示内容

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

Stack Overflow用户
提问于 2019-03-04 01:44:05
回答 2查看 40关注 0票数 0

我有多个复选框,用于过滤另一个div中的内容,选中某个复选框后,只显示与该复选框相关的内容,其余内容被隐藏,当您选中更多的复选框时,会显示更多的内容。

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

代码语言:javascript
复制
$(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();
    });
  });
});
代码语言:javascript
复制
<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>

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-03-04 01:54:25

首先,不要监听复选框上的click事件;有一个专门的change事件可以做到这一点。如果我用键盘切换复选框,你的click事件就不会触发。

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

代码语言:javascript
复制
$('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,我们可以避免在同一选择器上重复查找。

票数 1
EN

Stack Overflow用户

发布于 2019-03-04 01:57:31

这就是你要找的吗?

代码语言:javascript
复制
$(document).ready(function () {
        const tags = $('div.tags');
        const checkboxes = tags.find('input:checkbox');
        const results = $('.results');
        const resultsDiv = results.find('div');
        checkboxes.on('change', function () {
            if (checkboxes.get().some(item => item.checked)) {
              resultsDiv.hide();
            } else {
              resultsDiv.show();
            }
            $('div.tags').find('input:checked').each(function () {
                $('.results > div.' + $(this).attr('rel')).show();
            });
        });
    }); 
代码语言:javascript
复制
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width">
  <title>JS Bin</title>
</head>
<body>
<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>
<script src="https://code.jquery.com/jquery-2.2.4.js"></script>
</div>
</body>
</html>

如果是,请接受回答

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54971801

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档