jQuery检查输入值是否在数组中

时间:2018-10-09 12:23:05

标签: javascript jquery

我正在尝试检查输入字段的值是否在数组中,但似乎不起作用。

这是我尝试过的:

var postcode1 = [];
    for (var i = 21000; i < 21999; i++) {
        postcode1.push({ val: i, text: i });        
    }
    console.log(postcode1);

    $('#fw_form_field_146').blur(function() {
        var val = $("#fw_form_field_146").val();
        if( $.inArray(val, postcode1) > -1 ) {
            alert('test');
        }
    });

该数组正在console.log中输出,但是当我填写输入字段时,检查不起作用。

3 个答案:

答案 0 :(得分:1)

由于 postcode1 是一个包含val-text值的数组,因此您必须通过传递map提供的函数作为参数来使用callback方法。

另外,您需要使用Number构造函数,因为从value返回的inputstring,并且您的given数组包含 primitive < / strong> numbers

var postcode1 = [];
for (var i = 21000; i < 21999; i++) {
    postcode1.push({ val: i, text: i });        
}

$('#fw_form_field_146').blur(function() {
    var val = $(this).val();
    if( $.inArray(Number(val), postcode1.map(({val}) => val)) !== -1 ) {
        alert('test');
    }
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input id="fw_form_field_146"/>

使用includes方法的另一种方法。

var postcode1 = [];
for (var i = 21000; i < 21999; i++) {
    postcode1.push({ val: i, text: i });        
}

$('#fw_form_field_146').blur(function() {
    var val = $(this).val();
    if(postcode1.map(({val})=> val).includes(Number(val))) {
        alert('test');
    }
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input id="fw_form_field_146"/>

答案 1 :(得分:0)

尝试使用findIndex代替inArray,这将使您拥有更准确的搜索条件。像这样:

 if (postcode1.findIndex((item) => item.val.toString() === val) > -1 ) {
            alert('test');
   }

答案 2 :(得分:0)

请改用它,因为您需要检查数组中的对象而不是数组本身。

$('#fw_form_field_146').blur(function() {
  var val = $("#fw_form_field_146").val();
  if (postcode1.filter((e) => e.val == val).length > 0) {
    alert('test');
  }
});

演示

var postcode1 = [];
for (var i = 21000; i < 21999; i++) {
  postcode1.push({
    val: i,
    text: i
  });
}

$('#fw_form_field_146').blur(function() {
  var val = $("#fw_form_field_146").val();
  if (postcode1.filter((e) => e.val == val).length > 0) {
    alert('test');
  }
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input id="fw_form_field_146" />