编辑 jQuery.inArray一直未能进行字符串!= int比较,这是在ShankarSongoli的帮助下解决的。最初它被认为是一个可变范围问题,所以请记住在所有方面,而不仅仅是任何给定问题中的一个。
omit_all_user_contacts = new Array();
add_contacts = new Array();
function is_added_contact(id) {
if ( jQuery.inArray(id, add_contacts) == -1 )
return false;
return true;
}
function selectcontacts(userid){
document.getElementById("ic"+userid).checked = true;
omit_all_user_contacts.push(userid);
var buf = '<table class="contactlist" width="100%">';
buf = buf + "<tr class='contactlistheader'><td></td><td>Contact Name</td><td>Company</td><td>Email</td><td>Profession</td></tr>";
var tmp;
jQuery.getJSON('/user/get_user_contacts/'+userid, function(data) {
jQuery.each(data.contacts, function(key, value) {
buf = buf + "<tr><td><input type='checkbox' name='manualcontact[]' onclick='manualcontact(" + value.id + ",this.checked)' ";
alert(is_added_contact(value.id));
if ( jQuery.inArray(value.id, add_contacts) > -1 ) {
buf = buf + " checked ";
}
buf = buf + "/></td>";
buf = buf + "<td>" + value.firstname + " " + value.lastname + "</td>";
buf = buf + "<td>" + value.company + "</td>";
buf = buf + "<td>" + value.email + "</td>";
buf = buf + "<td>" + value.profession + "</td></tr>";
});
buf = buf + '</table>';
iBox.show(buf);
});
}
function manualcontact(id,val) {
if ( val == true ) {
add_contacts.push(id);
} else {
add_contacts.splice( jQuery.inArray(val, add_contacts), 1 );
}
}
答案 0 :(得分:2)
您应首先更改问题的标题,并且因为问题已通过我们的评论解决,请接受此答案并将其关闭。
<强>解决方案:强>
数组值是字符串类型,并且使用整数进行比较,因此它失败了。
var tmpContacts = ["2"];
jQuery.inArray(2, tmpContacts) was always returning `-1`
将其更改为jQuery.inArray("2", tmpContacts)
答案 1 :(得分:0)
变量的类型必须相同。我需要比较整数,但由于我的原始文本包含用逗号分隔的数字,因此我的数组中的项目被视为字符串。
这是我编写的一个简单函数,仅用于检查整数。 它与jquery.inArray的工作方式相同,但它只检查特定的数据类型。
function in_array(val,arr) {
cnt=0;
index=-1;
$(arr).each(function () {
if(parseInt(this) == parseInt(val)) { index=cnt; }
cnt++;
});
return index;
}