2012-03-27 31 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”不是在parray。

如果我选择值2这显示我'不',但“2”是在parray。

如果我选择值5这表明我'是' - 只有这是好的。为什么?

LIVE:

http://jsfiddle.net/G5D2V/

回答

5

由于the manual明确规定:

$ .inArray返回-1,如果元素没有找到,或者该元素已发现指数(0开始) 除此以外。

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

谢谢,但为什么2和5是其他值? – 2012-03-27 22:34:16

+3

1将评估为-1。 2将评估为0. 5将评估为1.只有0被Javascript隐含地视为错误。 – 2012-03-27 22:36:22

+0

@GryzOshea数组中的元素'2'的索引是0,在Javascript(以及许多其他语言)中,这是'false'值。这就是为什么'if'条件失败的原因。 – 2012-03-27 22:37:20

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)) { } 

这位运算符实际上将变成-10和任何其他正匹配到其对应的负(负一)。没有用ECMAscript中的真实值和谬误值来详细描述这一点,这将完全符合你的要求。

1

尝试

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

作为你的条件(加!= - 1)它。