2011-06-15 1 views
3

J'ai une chaîne divisée par des virgules. J'utilise la commande javascript split pour la diviser en tableau.Groupe de chaînes fictives pour rechercher et cocher les cases

J'ai un groupe de cases à cocher appelé ciContact.

<table border="0" cellspacing="0" cellpadding="6"> 
    <tr> 
     <td><label> 
      <input type="checkbox" name="ciContact[]" value="Call" id="ciContact_0" /> 
     Call</label></td> 
    <td><label> 
      <input type="checkbox" name="ciContact[]" value="Email" id="ciContact_1" /> 
     Email</label></td> 

     <td><label> 
      <input type="checkbox" name="ciContact[]" value="Text" id="ciContact_2" /> 
     Text</label></td> 
    </tr> 
</table> 

Le tableau contient uniquement les valeurs qui doivent être vérifiées. Ces valeurs sont renvoyées à partir d'un appel AJAX codé JSON. Cependant, ces valeurs (ciContact) sont toutes stockées dans la base de données MySQL sous la forme d'un tableau délimité par des virgules. Il y a une raison pour laquelle je l'ai fait de cette façon. Alors, comment lire les valeurs de ma matrice délimitée par des virgules et cocher les cases appropriées?

J'ai essayé:

var ciContact = data.split(", "); 
for (var j = 0; j < ciContact.length; j++) 
    { 
var selected = $('name=ciContact').find('value='+ ciContact[i]); 
selected.attr("checked","checked"); 
} 

Je suis loin de celui-là. Ha!

Merci les gars!

Répondre

5
var ciContact = data.split(", "); 
for (var j = 0; j < ciContact.length; j++) { 
    $('input[name^=ciContact][value=' + ciContact[j] + ']').attr('checked','checked');` 
} 

Ou, pour une performance légèrement meilleure:

var ciContact = data.split(", "), 
    $inputs = $('input[name^=ciContact]'); 
for (var j = 0; j < ciContact.length; j++) { 
    $inputs.filter('[value=' + ciContact[j] + ']').attr('checked','checked');` 
} 

Ou, fantaisie:

var ciContact = data.split(", ").join('], [value='), 
    $inputs = $('input[name^=ciContact]'); 

$inputs.filter('[value=' + ciContact + ']').attr('checked','checked'); 
+0

Si vous utilisez une nouvelle version de jQuery (1.6+), .prop ("checked", true) est une meilleure alternative à. attr ("vérifié", "vérifié") – EvilAmarant7x

2

Il y a plusieurs choses mauvaises. Votre sélecteur n'est pas correct et vous utilisez la mauvaise variable de boucle (i au lieu de j).

Cela devrait le faire:

var ciContact = data.split(", "), 
    $elements = $('input[name="ciContact[]"]'); 

for (var j = 0; j < ciContact.length; j++) { 
    $elements.filter('[value="' + ciContact[j] + '"]').attr("checked","checked"); 
} 
0
var ciContact = data.split(", "); 
var checkboxes = $('input:checkbox[name="ciContact[]"]'); 

for (var j = 0; j < ciContact.length; j++){ 
    checkboxes 
     .filter('[value="'+ciContact[j]+'"]') 
     .attr("checked","checked"); 
} 

Vous pouvez see it in action here

0
var ciContact = data.split(", "); 
var tmpHash = {}; 
for(var i = 0; i < ciContact.length; i++){ 
    tmpHash[$.trim(ciContact[i])] = 1; // if you are pretty sure that your data is clean, skip $.trim() 
} 

$('input[name="ciContact[]"]').each(function(){ 
    if($(this).val() in tmpHash){ 
     $(this).attr('checked', 'true'); 
    } 
} 

ou il y a un nouveau javascript appelé lib TOG, vous pouvez l'utiliser pour votre traitement ajax. L'appel checkBox (données, options) vous donnera le morceau de html. et vous pouvez l'ajouter à quelque chose comme $ ('table tr') À votre backend, vous auriez simplement besoin de vider toutes vos options dans une chaîne JSON. Et votre côté client peut facilement l'obtenir comme ce que l'on appelle 'all_options'