Aller au contenu

parcourir un "sous-tableau"


Soundboy39

Sujets conseillés

Bonjour à toutes et à tous,

Voilà j'ai un script qui permet de remplir automatiquement un formulaire en fonction de données envoyées en Json.

Pour ce qui est des inputs et des select ça fonctionne bien par contre pour les checkbox à choix multiples c'est plus compliqué, puisque leurs valeurs sont stockées dans un sous-tableau.

Voilà le code Javascript complet :


<script type="text/javascript">

//le tableau principal au format Json, le sous tableau est celui associé à la clé "desert"
var params = {"entree":"orange","principal":"haricots","desert":["tarte","yahourt"]};


//la boucle de parcour du tableau principale
for (key in params)
{
var balise = $('#'+ key ).get(0).nodeName.toLowerCase();
//alert(balise);
if(balise == 'input')
{
var input_type = $('#'+ key ).attr('type');

if(input_type == 'text')
{
$('#'+ key ).val(params[key]);
}
else if(input_type == 'checkbox') //traitement du sous-tableau
{
//ne fonctionne pas, seul le 1er paramètre du sous-tableau est pris en compte...
$('#'+ key ).val(params[key]);

//ne fonctionne pas du tout
for(var i = 0; i < params[key].length; i++)
{
$('#'+ params[key][i] ).val(params[key]).attr('checked','checked');
}

}
}
else if(balise == 'select')
{
$('#'+ key ).val(params[key]).attr('selected','selected');
}
}

</script>

Comme vous pouvez le voir pour l'instant j'en suis à 2 solutions, une qui prend en compte uniquement la première valeur, est une deuxième qui ne fonctionne pas...

Je pensais à éventuellement extraire le sous-tableau de la boucle principale pour le traiter dans une autre boucle mais je ne vois pas comment faire... ou peut être y a t'il une autre solution ??

Merci beaucoup pour votre aide et bon dimanche !!

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

Et si dans ton Else If (input_type == 'checkbox'), tu transformes en tableau ainsi :


var valeurs= params[key].split(',');

for(var valeur in valeurs){
$('input[id='+valeurs[valeur]+']').prop("checked", true);
}

Pas certain du split en direct, sinon, passes par une variable "temp".

A tester :)

Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...