如果未选中所有子项,请取消选中父复选框

时间:2015-06-11 13:30:20

标签: javascript jquery checkbox

我创建了一个复选框组,但未能实现要求。

如果在组中未选中所有复选框,则顶级复选框应显示为未选中状态。

我这样做的方式和我为所有选中的复选框一样。如果声明不起作用,我的第三个。

我正在努力填补这三个要求:

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

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

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

  4. 我未能达到最后的陈述。

    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

2 个答案:

答案 0 :(得分:1)

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

$("#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','');
}


});

答案 1 :(得分:0)

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

试试这个 -

$("#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");
    }});