在操作之前,使用JQuery检查嵌套表行中多个复选框的状态

在操作之前,使用JQuery检查嵌套表行中多个复选框的状态,jquery,checkbox,filter,nested,html-table,Jquery,Checkbox,Filter,Nested,Html Table,我有一个表,其中包含礼物接收者的列表。每位收件人可以有一份或多份礼物。我使用表格单元格中的一组嵌套行(每个礼物的表格单元格中有一个嵌套行)来实现这一点 每个礼物都有四种状态(通过复选框显示):已选择、已签入、已送出、已送出 当选中特定状态的所有复选框时,我需要隐藏收件人的主行 因此,如果我只想看到礼品尚未签入的收件人,我仍然希望看到只有1件礼品仍处于“签入”状态的任何收件人 我现在需要隐藏和显示以下行: if (state === true) { switch(colId) {

我有一个表,其中包含礼物接收者的列表。每位收件人可以有一份或多份礼物。我使用表格单元格中的一组嵌套行(每个礼物的表格单元格中有一个嵌套行)来实现这一点

每个礼物都有四种状态(通过复选框显示):已选择、已签入、已送出、已送出

当选中特定状态的所有复选框时,我需要隐藏收件人的主行

因此,如果我只想看到礼品尚未签入的收件人,我仍然希望看到只有1件礼品仍处于“签入”状态的任何收件人

我现在需要隐藏和显示以下行:

if (state === true) {
        switch(colId) {
            case "selectedFilter":
                $('input:checkbox.isSelected:not(:checked)').closest('.trMainData').hide();
                break;
            case "selectedFilterUnchecked":
                $('input:checkbox.isSelected:checked').closest('.trMainData').hide();
                break;
            case "checkedInFilter":
                $('input:checkbox.isCheckedIn:not(:checked)').closest('.trMainData').hide();
                break;
            case "checkedInFilterUnchecked":
                $('input:checkbox.isCheckedIn:checked').closest('.trMainData').hide();
                break;
            case "outForDeliveryFilter":
                $('input:checkbox.isOutForDelivery:not(:checked)').closest('.trMainData').hide();
                break;
            case "outForDeliveryFilterUnchecked":
                $('input:checkbox.isOutForDelivery:checked').closest('.trMainData').hide();
                break;
        }
    } else if (state === false) {
        $('table tr.trMainData:hidden').show();
    }
其中,“state”是用户正在单击的复选框筛选器的状态(true或false),“trMainData”是收件人的主行上的类

问题是,如果我只将2份礼物中的1份设置为签入,那么整个收件人行都将隐藏,包括尚未签入的礼物


如有任何帮助和建议,我们将不胜感激。

因此,发布我的问题会给我一个好主意。不确定这是最好的,还是正确的方法,但它正在发挥作用

这就是我所做的

if (state === true) {
        switch(colId) {
            case "selectedFilter":
                $('input:checkbox.isSelected:not(:checked)').closest('.trMainData').hide();
                $('input:checkbox.isSelected:checked:hidden').closest('.trMainData').show();
                break;
            case "selectedFilterUnchecked":
                $('input:checkbox.isSelected:checked').closest('.trMainData').hide();
                $('input:checkbox.isSelected:not(:checked):hidden').closest('.trMainData').show();
                break;
            case "checkedInFilter":
                $('input:checkbox.isCheckedIn:not(:checked)').closest('.trMainData').hide();
                $('input:checkbox.isCheckedIn:checked:hidden').closest('.trMainData').show();
                break;
            case "checkedInFilterUnchecked":
                $('input:checkbox.isCheckedIn:checked').closest('.trMainData').hide();
                $('input:checkbox.isCheckedIn:not(:checked):hidden').closest('.trMainData').show();
                break;
            case "outForDeliveryFilter":
                $('input:checkbox.isOutForDelivery:not(:checked)').closest('.trMainData').hide();
                $('input:checkbox.isOutForDelivery:checked:hidden').closest('.trMainData').show();
                break;
            case "outForDeliveryFilterUnchecked":
                $('input:checkbox.isOutForDelivery:checked').closest('.trMainData').hide();
                $('input:checkbox.isOutForDelivery:not(:checked):hidden').closest('.trMainData').show();
                break;
        }
    } else if (state === false) {
        $('table tr.trMainData:hidden').show();
    }

因此,从本质上讲,首先,我隐藏每一行,其中甚至有一个项目检查了我筛选的列。然后我搜索那些隐藏的列,并显示其中任何一个应该显示的项目,然后重新显示它…基本上过滤两次,但它起作用了。

因此,发布我的问题给了我一个好主意。不确定这是最好的,还是正确的方法,但它正在发挥作用

这就是我所做的

if (state === true) {
        switch(colId) {
            case "selectedFilter":
                $('input:checkbox.isSelected:not(:checked)').closest('.trMainData').hide();
                $('input:checkbox.isSelected:checked:hidden').closest('.trMainData').show();
                break;
            case "selectedFilterUnchecked":
                $('input:checkbox.isSelected:checked').closest('.trMainData').hide();
                $('input:checkbox.isSelected:not(:checked):hidden').closest('.trMainData').show();
                break;
            case "checkedInFilter":
                $('input:checkbox.isCheckedIn:not(:checked)').closest('.trMainData').hide();
                $('input:checkbox.isCheckedIn:checked:hidden').closest('.trMainData').show();
                break;
            case "checkedInFilterUnchecked":
                $('input:checkbox.isCheckedIn:checked').closest('.trMainData').hide();
                $('input:checkbox.isCheckedIn:not(:checked):hidden').closest('.trMainData').show();
                break;
            case "outForDeliveryFilter":
                $('input:checkbox.isOutForDelivery:not(:checked)').closest('.trMainData').hide();
                $('input:checkbox.isOutForDelivery:checked:hidden').closest('.trMainData').show();
                break;
            case "outForDeliveryFilterUnchecked":
                $('input:checkbox.isOutForDelivery:checked').closest('.trMainData').hide();
                $('input:checkbox.isOutForDelivery:not(:checked):hidden').closest('.trMainData').show();
                break;
        }
    } else if (state === false) {
        $('table tr.trMainData:hidden').show();
    }
因此,从本质上讲,首先,我隐藏每一行,其中甚至有一个项目检查了我筛选的列。然后我搜索这些隐藏的列,显示其中任何一个应该显示的项目,然后重新显示它…基本上过滤两次,但它工作正常