jQuery.inArray一直返回-1

时间:2012-01-26 18:29:08

标签: jquery

编辑 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 );
        }   
    }

2 个答案:

答案 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;
}