JS / jQuery - 用复选框过滤 div

Posted

技术标签:

【中文标题】JS / jQuery - 用复选框过滤 div【英文标题】:JS / jQuery - Filtering divs with checkboxes 【发布时间】:2013-04-26 12:21:25 【问题描述】:

我正在尝试使用以下代码过滤一些带有复选框的 div:

$("#filterControls :checkbox").click(function() 
  $(".sectionContent").hide();
  $("#filterControls :checkbox:checked").each(function() 
    $("." + $(this).val()).show();
  );
  if($("#filterControls :checkbox").prop('checked') == false)
    $(".sectionContent").show();
  
);

当您选中第一个复选框时,这可以正常工作,但仅当您还选中第一个复选框时,它才会与其他复选框一起过滤。很难解释,但试试 JSFiddle:http://jsfiddle.net/BY9JL/

我不希望它依赖于选中第一个复选框,有没有办法解决这个问题?

【问题讨论】:

【参考方案1】:

试试

var sections = $('.sectionContent');
function updateContentVisibility()
    var checked = $("#filterControls :checkbox:checked");
    if(checked.length)
        sections.hide();
        checked.each(function()
            $("." + $(this).val()).show();
        );
     else 
        sections.show();
    


$("#filterControls :checkbox").click(updateContentVisibility);
updateContentVisibility();

演示:Fiddle

【讨论】:

@Godge 检查附加的演示 谢谢,如果没有选中复选框,我仍然希望它显示所有 div。【参考方案2】:

这是因为你的最后一个if检查,它只会检查第一个复选框,如果它被选中。

您可以更改最后一个 if 块以查看是否有任何检查:

if($("#filterControls :checkbox:checked").length == 0)
    $(".sectionContent").show();

【讨论】:

啊……打败我了,+1 :) 我应该更好地解释这一点:如果没有选中任何复选框,我希望所有 div 重新出现。您的代码解决了我最初的问题,但如果再次取消选中复选框,它们将不再出现。有什么想法吗?

以上是关于JS / jQuery - 用复选框过滤 div的主要内容,如果未能解决你的问题,请参考以下文章

js改变树形框属性

如何为 div 设置水平滚动,以便在通过 jQuery 添加项目时

JS在页面限制checkbox最大复选数

Jquery中复选框选中取消实现文本框的显示隐藏

JQuery之选择集过滤

如何用js实现select下拉框里是树形结构,可复选,select框中传复选所有值?如下图所示。