如何通过 jQuery 检查数组中是否存在值

how to check existence of a value in array by jQuery

如果用户选中一个复选框,jQuery 会将相关值存储在隐藏的输入字段中。然后我必须检查该值是否已经在数组中。如果它在数组中,我不想再次添加它(避免重复),但如果它不在数组中,它将被添加到数组中。下面提到的我的代码正在相应地工作,除了检查第一个输入的复选框,即当数组为空时。它显示值在数组中,而数组为空。请看下面我的代码:

HTML 的页面:

<input type="hidden" name="selected" id="selected" value="" />
<input type="checkbox" name="check_list[]" class="check_list" value="23" />
<input type="checkbox" name="check_list[]" class="check_list" value="24" />
<input type="checkbox" name="check_list[]" class="check_list" value="25" />

jQuery 用于在选中任何复选框时添加 ID 的代码:

$(document).ready(function(){
var ids = [];
$(".check_list").change(function(){
  code = $(this).val();
  if($.inArray(code,ids)){
    alert("Value is in array");
  }else{
    alert("Value is not in array");
    ids.push(code);
    $("#selected").val(ids);
  });
});

假设用户首先选中值为 23 的复选框。此时,'id'数组为空。然后 jQuery 检查数组 'id' 中是否存在 23,因为它是空的,所以显示 'Value is in array'。但稍后如果用户选择 24 或 25,代码运行良好。

为什么它对第一个选中的复选框不起作用? 如何解决这个问题?

inArray returns -1 如果找不到该值或该值的数组索引,如果找到则需要检查 >= 0.

试试这个:

$(document).ready(function(){
var ids = [];
$(".check_list").change(function(){
  code = $(this).val();
  if($.inArray(code,ids) >= 0){
    alert("Value is in array");
  }else{
    alert("Value is not in array");
    ids.push(code);
    $("#selected").val(ids);
  }
});

根据 API Documentation

Description: Search for a specified value within an array and return its index (or -1 if not found).

它不是布尔值,而是 return 以整数形式找到指定值的元素的索引,如果找不到任何结果,则为 -1。