取消选中父项复选框(如果未选中所有子项)

Uncheck parent checkbox if all child is unchecked

本文关键字:复选框 取消 如果      更新时间:2023-09-26

我已经设置了一个复选框组,但未能实现要求。

如果组内的所有复选框均未选中,则"顶级"复选框应以未选中状态显示。

我这样做的方式与对所有选定的复选框所做的方式相同。我的第三个如果语句不起作用。

我正在尝试满足三个要求:

  1. 如果未在筛选器分组中选中所有复选框,则顶级筛选器在复选框中显示 ( - )。

  2. 如果在筛选器分组中选中了所有复选框,则顶级筛选器显示带有复选标记的选定状态。

  3. 如果未选中组中的所有复选框,则 顶级复选框应以未选中状态显示。

我未能实现最后一句话。

.JS:

 <script>
      $(".faceted-filters").on("click", "#checkAll", function(){
           $(this).parents(".top-lvl-filter").next(".sub-lvl-filter").find("input[type=checkbox]").prop('checked', $(this).prop('checked')); 
           $(this).removeClass("partially-checked"); 
        });
    $("#collapse-one input").change(function(){
        var a = $("#collapse-one input");
        if(a.length !== a.filter(":checked").length){
            $(this).parents(".sub-lvl-filter").prev().find("input").addClass("partially-checked");
        }
        else if(a.length == a.filter(":checked").length){
            $(this).parents(".sub-lvl-filter").prev().find("input").attr('checked','checked');
            $(this).closest(".composite-filter").find(".top-lvl-filter input").removeClass("partially-checked");
        }
        else if(a.length == a.filter.not(":checked").length){
        $(this).closest(".composite-filter").find(".top-lvl-filter input").removeClass("partially-checked");
    }

    });
    </script>

工作示例:http://codepen.io/anon/pen/PqjJdO

以下更改将解决您的问题,

$("#collapse-one input").change(function(){
var a = $("#collapse-one input");
if(a.length > a.filter(":checked").length && a.filter(":checked").length > 0){
    $(this).parents(".sub-lvl-filter").prev().find("input").addClass("partially-checked");
}
else if(a.length == a.filter(":checked").length){
    $(this).parents(".sub-lvl-filter").prev().find("input").prop('checked','checked');
    $(this).closest(".composite-filter").find(".top-lvl-filter input").removeClass("partially-checked");
}
else if(a.filter(":checked").length < 1){
    $(this).closest(".composite-filter").find(".top-lvl-filter input").removeClass("partially-checked");
    $(this).closest(".composite-filter").find(".top-lvl-filter input").prop('checked','');
}

});

你的第一个条件是隐藏要发生的第三个条件。

试试这个——

$("#collapse-one input").change(function(){
    var a = $("#collapse-one input");
  if(a.filter(":checked").length==0){
        $(this).closest(".composite-filter").find(".top-lvl-filter input").removeClass("partially-checked");
  $(this).parents(".sub-lvl-filter").prev().find("input").removeAttr('checked','checked');
  }
    else if(a.length !== a.filter(":checked").length){
        //alert('all checked');
        $(this).parents(".sub-lvl-filter").prev().find("input").addClass("partially-checked");
    }
    else if(a.length == a.filter(":checked").length){
        $(this).parents(".sub-lvl-filter").prev().find("input").attr('checked','checked');
        $(this).closest(".composite-filter").find(".top-lvl-filter input").removeClass("partially-checked");
    }});