使用jQuery.inArray查找数组中的项

时间:2011-11-24 02:39:56

标签: javascript jquery

我正在尝试简单地确定数组中是否存在元素。我基本上希望了解另一个<select>中的<optgroup> <select>控件中是否存在<select id="countries"> <option value=""></option> <option value="US">United States</option> <option value="IL">Israel</option> <option value="CA">Canada</option> </select> <select id="territories"> <option value=""></option> <optgroup label="USA"> <option value="CA">California</option> </optgroup> <optgroup label="CA"> <option value="ON">Ontario</option> </optgroup> </select> 控件中的所选国家/地区...想想国家和地区:

// build array of available territories for counties
var territoryCountries = [];
$("select#territory optgroup").each(function() {
    territoryCountries[territoryCountries.length] = $(this).attr('label');
});

// on change 
$("select#country").change(function() {
    if (!$.inArray($(this).val(), territoryCountries)) {
        console.log("Not found, disable the territory input.");
    } else {
        console.log("Found, disable all unrelated territories.");
    }
});

jQuery的:

{{1}}

我遇到的问题是它无法正常工作。它表明'IL'确实存在于领土国家,当它没有,并且表明'USA'在领土国家中不存在,当它发生时。

我做错了什么?您可以在JSFiddle查看并运行代码。

  • 此外,我只是想做一个国家/地区选择输入。有一个更好的方法吗?我觉得我主要是重新发明轮子来手工完成。

1 个答案:

答案 0 :(得分:2)

$.inArray返回找到的项目的索引,如果找不到,则返回-1

因为您的测试如下所示:

if (!$.inArray($(this).val(), territoryCountries)) {

-1结果(真实的)通过if()测试。

相反,您应该测试=== -1

if ( $.inArray($(this).val(), territoryCountries) === -1 ) {