2011-11-24 48 views
2

我試圖簡單地確定數組中是否存在元素。基本上,我希望看看在另一個<select><optgroup>存在於<select>控制選定的國家。想想國家和地區:使用jQuery.inArray查找數組中的項

<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> 

的jQuery:

// 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."); 
    } 
}); 

這個問題我有一點是它不起作用。它表明,'IL'確實存在於領土國家,如果沒有,並且表明'美國'在領土國家並不存在,那麼它就是這樣。

我在做什麼錯?您可以在JSFiddle查看並運行代碼。

  • 此外,我只是想做一個國家/地區選擇輸入。有一個更好的方法嗎?我覺得我主要是在重新發明輪子來做手工。

回答

2

$.inArray返回找到的項目的索引,或者如果找不到,則返回-1

因爲你的測試看起來是這樣的:

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

-1結果(即truthy)經過if()測試。你可以測試=== -1

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

出於某種原因,我使用'!== -1'而不是'=== -1'。固定。 – RightSaidFred