jQuery inArray()函数不能使用动态生成的数组,为什么?

时间:2017-05-01 10:27:07

标签: javascript jquery arrays

我只是在jquery中使用inArray()函数,但它不起作用。其实我想在数组中检查值。我在stackoverflow上获得了很多解决方案,但没有任何工作,这就是我创建新帖子的原因。

有一个小时格式1-24,用户可以选择他们的时间段,如1-3,5-9等。

这是我的代码

jQuery('.select_hours').click(function(){ 
            var favorite = new Array();
            jQuery.each(jQuery("input[name='hour_count']:checked"), function(){            
                favorite.push(jQuery(this).val());
            });

            console.log(favorite);

            var max_v = Math.max.apply(Math,favorite);
            var min_v = Math.min.apply(Math,favorite);

            // check the number sequence
            for(var i = min_v; i <= max_v; i++){

                if(jQuery.inArray(i,favorite) != -1){
                    alert('Hours in sequence!');
                }else{
                    alert('Please select hours in sequence!');
                }
            }

        });

请帮助我..

这是HTML复选框和按钮:

<input type="checkbox" name="hour_count" id="hour_count_1" value="1"><input type="checkbox" name="hour_count" id="hour_count_2" value="2"><input type="checkbox" name="hour_count" id="hour_count_3" value="3"><button type="button" id="select_hours" class="select_hours">Select Hours</button>

3 个答案:

答案 0 :(得分:1)

在复选框上运行val()会返回一个包含复选框设置值的字符串。但是,您的for循环需要number秒。这就是为什么你需要将number,而不是string推入你的数组。使用

favorite.push(parseInt(jQuery(this).val()));

工作示例:https://jsfiddle.net/websiter/f2kgetec/

答案 1 :(得分:0)

inArray方法使用严格的比较。 也许问题只是你在比较字符串和数字。 尝试将max_v和minx_v转换为字符串:

var max_v = "" + Math.max.apply(Math,favorite);
var min_v = "" + Math.min.apply(Math,favorite);

然后在for中使用parseInt(min_v) parseInt(max_v)进行骑车。

P.S。根据评论进行更新,您当然也可以直接解析.val()

清洁解决方案是使用直接转换.val()

的数字数组
favorite.push(parseInt(jQuery(this).val()))

然后,如果要在数组中查找元素,只需使用标准indexOf方法

if (favorite.indexOf(myValueToCheck !== -1))

答案 2 :(得分:0)

jQuery.inArray返回元素的索引(如果找到)或-1,如果它不是 - 不是布尔值。所以正确的是

if(jQuery.inArray(i, favorite) !== -1)
{
     console.log("is in array");
     alert('Hours in sequence!');
}
 else {
    console.log("is NOT in array");
    alert('Please select hours in sequence!');
}