JQuery:替代 each() 以根据选定的复选框值进行条件检查

JQuery: Alternative to each() for conditional check against selected checkbox values

1) 复选框有五个值:GRA、RRA、FRA、MRA、CHDA

2) 复选框 class 名称是哎呀。所有 5.

通用

3) 如果未选择 FRA、MRA、CHDA 值,我们将抛出异常

4) 以下是我用来实现此目的的代码片段:

var availability = false;

$(".oops:checked").each(function() {
    if($(this).val() === 'FRA' || $(this).val() === 'MRA' || $(this).val() === 'CHDA') {
        availability = true;
    }
});

if (!availability) {
    errors.push('There is no selected among FRA MRA CHRA');            
}

我们是否有其他更好的方法来处理这个问题,而不是使用三个 or 运算符并在 each() 函数中检查它?

您可以为复选框的所有允许值创建一个数组数据结构,并根据它们检查选定的值:

var availability = false;
var alloweValues = ['FRA', 'MRA', 'CHDA']; 
$(".oops:checked").each(function() {
    if(alloweValues.includes($(this).val())) {
      availability = true;
    }
});
if (!availability) {
    errors.push('There is no selected among FRA MRA CHRA');            
}

您可以进一步将代码重构为:

var availability = false;
var alloweValues = ['FRA', 'MRA', 'CHDA']; 
$(".oops:checked").each(function() {
    availability = alloweValues.includes($(this).val());
});
if (!availability) {
    errors.push('There is no selected among FRA MRA CHRA');            
}

您也可以将 includes() 替换为 indexOf(),例如

alloweValues.indexOf($(this).val()) !== -1

因为,includes()在 IE 浏览器中不工作。

创建一个数组来存储每个选中的值,如下所示:

var checkvalues=[];
 $(".oops:checked").each(function(){
        checkvalues.push($(this).val());
    });

之后你可以使用includes()方法像上面的代码一样检查。