2012-01-26 8 views
0

EDIT jQuery.inArrayは文字列を処理できませんでした!= int比較。これはShankarSongoliの助けを借りて解決されました。もともと、それは可変範囲の問題であると考えられていました。だから、あらゆる問題を見ているだけでなく、すべての面を見てください。問題は、私たちのコメントがこの回答を受け入れ、それを閉じて解決されるので、jQuery.inArrayは-1を返し続けます。

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

あなたのコードは正常に見えます。両方の変数に 'var'を使って再度試してみてください。どのようなエラーが出ますか? – ShankarSangoli

+0

こんにちは、応答に感謝します。 manualcontactが呼び出されると、その値がadd_contacts配列に追加されます。 jQuery.each(data.contacts、機能(キー、値)が、前の行では、この変数が表示されて、私はちょうどそれがアクセスできるようにする必要があります。selectcontactsが呼び出されたときしかし、add_contacts配列は、それがこのループを開始したら消えます –

+0

グローバル変数であるため、 'each'ループ内でもアクセス可能になります。 – ShankarSangoli

答えて

2

あなたが最初とも質問のタイトルを変更する必要があります。

ソリューション:

配列値は、文字列型であったとの比較は整数で行われていたので、それが失敗していました。

var tmpContacts = ["2"]; 
jQuery.inArray(2, tmpContacts) was always returning `-1` 

jQuery.inArray("2", tmpContacts)

+0

[OK]を編集し、あなたの答えを受け入れました。ありがとう! –

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; 
} 
関連する問題