jQuery .inArray()总是真的吗?

我试图使用inarray但它总是返回真的?有任何想法吗? (所有李的显示)
$("#select-by-color-list li").hide();

// get the select
var $dd = $('#product-variants-option-0');

if ($dd.length > 0) { // make sure we found the select we were looking for

    // save the selected value
    var selectedVal = $dd.val();

    // get the options and loop through them
    var $options = $('option',$dd);
    var arrVals = [];
    $options.each(function(){
        // push each option value and text into an array
        arrVals.push({
            val: $(this).val(),text: $(this).text()
        });
    });




};

//This is where it is returning true...


if($.inArray('Aqua',arrVals)) {
    $("#select-by-color-list li#aqua").show();
    };
    if($.inArray('Army',arrVals)) {
    $("#select-by-color-list li#army").show();
    };

解决方法

你需要这样做:
if( $.inArray('Aqua',arrVals) > -1 ) {

或这个:

if( $.inArray('Aqua',arrVals) !== -1 ) {

The $.inArray() method返回项目的0的索引。如果没有项目,则返回-1,if()语句将被视为true。

从文档:

Because JavaScript treats 0 as loosely equal to false (i.e. 0 == false,but 0 !== false),if we’re checking for the presence of value within array,we need to check if it’s not equal to (or greater than) -1.

编辑:而不是将这两个值作为对象推送到数组中,只需使用一个或另一个,因此您可以使用一个字符串数组,从中可以构建多个选择器。

一种方式是这样的:

// Create an Array from the "value" or "text" of the select options
var arrVals = $.map( $dd[0].options,function( opt,i ){
    return opt.value || opt.text;
});

  // Build a multiple selector by doing a join() on the Array.
$( "#" + arrVals.join(',#') ).show();

如果数组看起来像:

['Army','Aqua','Bread'];

结果选择器将如下所示:

$( "#Army,#Aqua,#Bread" ).show();

相关文章

jQuery插件的种类 1、封装对象方法 这种插件是将对象方法封装起来,用于对通过选择器获取的jQuery对象进...
扩展jQuery插件和方法的作用是非常强大的,它可以节省大量开发时间。 入门 编写一个jQuery插件开始于给...
最近项目中需要实现3D图片层叠旋转木马切换的效果,于是用到了jquery.roundabout.js。 兼容性如图: ht...
一、什么是deferred对象? 开发网站的过程中,我们经常遇到某些耗时很长的javascript操作。其中,既有异...
AMD 模块 AMD(异步模块定义,Asynchronous Module Definition)格式总体的目标是为现在的开发者提供一...