2012-03-27 6 views
1
<select id="select"> 
    <option value="1">1adsd</option> 
    <option value="2">2adsd</option> 
    <option value="3">3adsd</option> 
    <option value="4">4adsd</option> 
    <option value="5">5adsd</option> 
</select> 

var parray = ['2', '5']; 
    $("#select").live('change', function(){ 
     if($.inArray($(this).val(), parray)){ 
      console.log('yes'); 
      console.log($(this).val()); 
      console.log(parray); 
     } else { 
      console.log('no'); 
      console.log($(this).val()); 
      console.log(parray); 
     } 
    }) 

なぜ正しく動作しないのですか?jQueryでinArrayを操作するには?

私が値1を選択した場合、これは私に「はい」が表示されますが、「1」は行方不明です。

私が値2を選択した場合、これは私には「いいえ」と表示されますが、「2」は中にあります。

私が値5を選択した場合、これは「はい」と表示されます - これだけはOKです。どうして?

LIVE:

http://jsfiddle.net/G5D2V/

答えて

5

the manualとして明記:要素が見つからない場合は

$ .inArrayは-1を返し、または要素が発見されたインデックス(0から始まります) さもないと。

if($.inArray($(this).val(), parray) >= 0) { 
+0

ありがとうございましたが、なぜ2と5が他の値でしたか? –

+3

1は-1と評価されます。 2は0に評価されます。5は1と評価されます.Javascriptでは暗黙的に0とみなされます。 –

+0

@GryzOshea配列内の要素 '2'のインデックスは0です.Javascript(および他の多くの言語)では 'false'値です。そのため、その要素に対して 'if'条件が失敗するのです。 –

3

inArrayリターン-1要素がそれ以外見つからない場合、それは見つかった要素のインデックスを返します。

var parray = ['2', '5']; 
    $("#select").live('change', function(){ 
     if($.inArray($(this).val(), parray) >= 0){ 
      console.log('yes'); 
      console.log($(this).val()); 
      console.log(parray); 
     } else { 
      console.log('no'); 
      console.log($(this).val()); 
      console.log(parray); 
     } 
    }) 

Updated Demo

1

$ .inArrayは、項目の位置を返し、

$(function() { 
    var parray = ['2', '5']; 

    $("#select").on('change', function() { 

     var value = $(this).val() 
     var index = $.inArray(value, parray) 

     if (index >= 0) { 
      console.log('yes'); 
      console.log($(this).val()); 
      console.log(parray); 
     } else { 
      console.log('no'); 
      console.log($(this).val()); 
      console.log(parray); 
     } 
    }) 
});​ 
1

.inArrayが不一致にマッチしたインデックスまたは-1を返すブール値ではありません。

結果が-1より大きいかどうかを確認するか、クールで~を無効にする必要があります。

if(~$.inArray($(this).val(), parray)) { } 
ビット演算子が実際にその負の相手に 0、他の正の試合 -1をオンにすることを

(マイナス1)。これをECMAscriptの真実と虚偽の値で詳しく説明することなく、これはあなたが望むことを正確に実行します。それに -

1

は、(1!=を追加する)あなたの条件として

if($.inArray($(this).val(), parray)!=-1) 

を試してみてください。