我只是在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>
答案 0 :(得分:1)
在复选框上运行val()
会返回一个包含复选框设置值的字符串。但是,您的for
循环需要number
秒。这就是为什么你需要将number
,而不是string
推入你的数组。使用
favorite.push(parseInt(jQuery(this).val()));
答案 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!');
}