在操作之前,使用JQuery检查嵌套表行中多个复选框的状态
我有一个表,其中包含礼物接收者的列表。每位收件人可以有一份或多份礼物。我使用表格单元格中的一组嵌套行(每个礼物的表格单元格中有一个嵌套行)来实现这一点 每个礼物都有四种状态(通过复选框显示):已选择、已签入、已送出、已送出 当选中特定状态的所有复选框时,我需要隐藏收件人的主行 因此,如果我只想看到礼品尚未签入的收件人,我仍然希望看到只有1件礼品仍处于“签入”状态的任何收件人 我现在需要隐藏和显示以下行:在操作之前,使用JQuery检查嵌套表行中多个复选框的状态,jquery,checkbox,filter,nested,html-table,Jquery,Checkbox,Filter,Nested,Html Table,我有一个表,其中包含礼物接收者的列表。每位收件人可以有一份或多份礼物。我使用表格单元格中的一组嵌套行(每个礼物的表格单元格中有一个嵌套行)来实现这一点 每个礼物都有四种状态(通过复选框显示):已选择、已签入、已送出、已送出 当选中特定状态的所有复选框时,我需要隐藏收件人的主行 因此,如果我只想看到礼品尚未签入的收件人,我仍然希望看到只有1件礼品仍处于“签入”状态的任何收件人 我现在需要隐藏和显示以下行: if (state === true) { switch(colId) {
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();
}
因此,从本质上讲,首先,我隐藏每一行,其中甚至有一个项目检查了我筛选的列。然后我搜索这些隐藏的列,显示其中任何一个应该显示的项目,然后重新显示它…基本上过滤两次,但它工作正常