2010-08-26 12 views
0

J'ai un formulaire avec un tas de cases à cocher, et un champ caché qui contient des données CSV. Au fond, je dois les cases à cocher à cocher en fonction de la valeur du champ caché:Comment remplir une série de cases à cocher à partir d'un champ caché csv en utilisant jQuery

<form> 

    <input type="checkbox" id="01" name="01" /> 
    <input type="checkbox" id="02" name="02" /> 
    <input type="checkbox" id="03" name="03" /> 

    <input type="hidden" value="03,01," /> 

</form> 

Ainsi, dans l'exemple ci-dessus 01 et 03 cases à cocher besoin lorsque la page a terminé le chargement. Je dois également m'assurer que lorsque la valeur des cases à cocher change, le champ CSV masqué change également (bien que cela puisse être fait lorsque le formulaire est soumis).

Mes connaissances limitées en jQuery ne m'ont pas permis d'obtenir ce résultat, toute aide serait grandement appréciée. (Je sais que cela serait mieux fait côté serveur, mais je n'ai pas accès à autre chose que javascript).

La réponse ci-dessous fait la plupart de ce que je veux. Je pense qu'en utilisant les variables créées, il devrait être possible de remplir à nouveau le champ CSV lorsque le formulaire est soumis. c'est-à-dire, en utilisant selected_ids pour ajouter les identifiants des cases cochées à la fin du CSV (si elles ne sont pas déjà présentes). Cela peut-il être fait?

Répondre

1
var csvValue = $('#csv-input').val(); 
var selected_ids = csvValue.split(','); 
for (var i = 0; i < selected_ids.length; i++) 
{ 
    var selected_id = selected_ids[i]; 
    $('#' + selected_id).attr('checked', 'checked'); 
} 
+0

D'accord, merci. Parle-moi comme l'idiot que je suis. Je peux voir que 'selected_ids' renvoie un tableau de toutes les données CSV dans # csv-input, mais les cases à cocher avec les identifiants correspondants ne sont pas vérifiées. J'ai essayé de changer la cinquième ligne à $ ('#' + '0' + i) .attr ('checked', 'checked'); Mais ce contrôle simplement les deux premières cases (la longueur totale du tableau?) Est-il possible de re-travail qui précède afin que les ids de toutes les cases peuvent être quelque chose arbitraire (soit plus descriptif) tout toujours en gardant la brièveté de ce code? – CherryFlavourPez

+0

J'ai modifié le code, cela ne fonctionnait pas correctement. Maintenant, il récupère l'identifiant de selected_ids. Vous pouvez utiliser n'importe quel nom d'identifiant, pas seulement des nombres. – Sjoerd

+0

Merci beaucoup, c'est parfait. – CherryFlavourPez

0
$(':checkbox').bind('change', function(event){ 
    if (this.checked == true){ 
     // add to hidden field 
     var tempIdStr = $('#cvs-input').val(); 
     // if not in hidden value already 
     if (tempIdStr.indexOf(this.id) > -1){ 
      tempIdStr += "id,"; // or ", id" depending on how you are seperating the ids 
     $('#cvs-input').val(tempIdStr); 
     } 
    } else { 
    // remove from hidden field 
     var tempIds = $('#cvs-input').val().split(','); 
     var index = tempIds.indexOf(this.id); 
     if (index > -1){ 
      tempIds.splice(index, 1); 
      $('#cvs-input').val(tempIds.join(','); 
    } 
}); 
+0

ont pas testé mais je pense que cela devrait fonctionner – Nimnam1

+0

Cette ligne: var tempIdStr + = « id » // ou « id » selon la façon dont vous les seperating ids vomit une erreur. Que fait cette partie et comment dois-je la modifier? – CherryFlavourPez

+0

La valeur de cvs-input est une liste d'identifiants séparés par des virgules. en fonction de si la valeur a déjà une virgule à la fin de la liste, vous ne voudriez pas en ajouter une autre car elle ressemblerait à exp. 01,, 02 Toutefois, si vous n'avez pas ajouté de virgules à la fin, vous devez inclure une virgule au début de l'identifiant que vous ajoutez. – Nimnam1