jQuery.inArray(),即使它包含数组中的值,也返回-1

时间:2015-03-16 15:17:10

标签: javascript jquery html codeigniter

inarray函数返回-1,即使它在我的数组中有值 例如。如果我的数组中有['3','7','43','44','45','46'],当我选择值3或7时,它会显示正确的答案,然后当我选择其他值时,它会返回-1。

我的jQuery编码:

$(document).on("change", '#level',function() {
  var valu = $('#level').val(); 
  $.each(filterResults, function(index, item) {
    if(jQuery.inArray(valu , item.id)!==-1){ //item.id has all array values
      //my functions
      }
    }
});

然后是我的HTML编码

<select class="tb2" name="level" id="level">
  <option value="">Select Level</option>
  <option value="3">Pre Test</option>
  <option value="7">Level 1</option>
  <option value="43">Level 2</option>
  <option value="44">Level 3</option>
  <option value="45">Level 4</option>
  <option value="46">Level 5</option>
</select>

console.log(valu,item.id)返回

44 3

44 7

44 43

<44> 44 44

44 45

44 46

3 个答案:

答案 0 :(得分:1)

尝试

if(jQuery.inArray(valu , filterResults)!==-1)

没有.each()

&#13;
&#13;
var filterResults = ['3','7','43','44','45','46'];

$(document).on("change", '#level',function() {
  var valu = $('#level').val(); 
//  $.each(filterResults, function(index, item) {
    if(jQuery.inArray(valu , filterResults)!==-1){ 
      //my functions
      console.log(valu, $.inArray(valu, filterResults))
      }

});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js">
</script>
<select class="tb2" name="level" id="level">
  <option value="">Select Level</option>
  <option value="3">Pre Test</option>
  <option value="7">Level 1</option>
  <option value="43">Level 2</option>
  <option value="44">Level 3</option>
  <option value="45">Level 4</option>
  <option value="46">Level 5</option>
</select>
&#13;
&#13;
&#13;

答案 1 :(得分:0)

item.id不包含数组,只包含一个id$.inArray仅适用于数组。试试这个:

$(document).on("change", '#level',function() {
   var valu = $('#level').val(); 
   $.each(filterResults, function(index, item) {
       if(valu == item.id){ // if item.id is equal to valu (e.g. '7' == '7')
           // some code
       }
   });
});

或者,您可以使用$.grep()过滤结果,以确定ID是否在那里:

$(document).on("change", '#level',function() {
   var valu = $('#level').val(); 
   if( $.grep(filterResults, function(){return this.id == valu}).length ){
       // some code
   }
});

答案 2 :(得分:0)

好吧,你的代码中的问题是你无缘无故地遍历结果数组。 $ .inArray,已经迭代了数组,而你不必完成工作;如果值存在,它将返回项的索引,如果不存在,则返回-1。话虽如此,这是你应该做的:

var filterResults = ['3', '7', '43', '44', '45', '46'];
$('#level').change(function() {
    var value = $(this).val();
    if ($.inArray(value, filterResults) > -1) { 
        console.log(value + " EXISTS IN ARRAY");
    } else {
        console.log("FALSE");
    }
});

Here's a FIDDLE 以获得进一步的帮助。