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

时间:2015-02-15 05:00:09

标签: jquery html checkbox

如果用户选中了一个复选框,则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" />

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

$(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的复选框。这时,&#39; id&#39;数组是空的。然后jQuery检查数组中是否存在23&#39; id&#39;因为它是空的,它显示&#39;值在数组&#39;。但是后来如果用户选择24或25,代码运行良好。

为什么它不适用于首先选中的复选框? 如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

如果找不到值,则inArray返回-1,如果是,则返回值的数组索引,因此需要检查&gt; = 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);
  }
});

答案 1 :(得分:0)

根据API Documentation

  

描述:在数组中搜索指定的值并返回   它的索引(如果没有找到则为-1)。

它不是布尔值,而是返回找到指定值的元素的索引作为整数,如果它没有找到任何结果,则返回-1