我正在尝试检查输入字段的值是否在数组中,但似乎不起作用。
这是我尝试过的:
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中输出,但是当我填写输入字段时,检查不起作用。
答案 0 :(得分:1)
由于 postcode1 是一个包含val-text
值的数组,因此您必须通过传递map
提供的函数作为参数来使用callback
方法。
另外,您需要使用Number
构造函数,因为从value
返回的input
是string
,并且您的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" />