2010-06-03 3 views
2

J'ai une liste de boîtes de sélection avec des numéros incrémentaux à identifier puis par ex.remplir des boîtes de sélection à partir de chaîne json en utilisant jquery

<select id="my-select-0"> 
    <option value="1">first option</option> 
    <option value="2">first option</option> 
< option value="3">first option</option> 
</select> 
<select id="my-select-1"> 
    <option value="1">first option</option> 
    <option value="2">first option</option> 
    <option value="3">first option</option> 
</select> 
<select id="my-select-2"> 
    <option value="1">first option</option> 
    <option value="2">first option</option> 
    <option value="3">first option</option> 
</select> 

J'ai une chaîne JSON que je veux utiliser pour pré-remplir ces sélections par ex.

json = "[{'my-select': 1}, 
     {'my-select': 3}]"; 

dans l'exemple ci-dessus my-select-0 seraient mis à 1 et my-select-1 est réglé sur 3.

Comment puis-je faire de manière à JQuery?

Merci

+0

Contrôlez-vous ce format? Actuellement, ce n'est pas un JSON valide, donc vous ne pourrez pas utiliser l'une des fonctions intégrées pour l'analyser. Est-il récupéré via AJAX, ou juste rendu directement dans la page? –

+0

Je contrôle la chaîne JSON. Je suis nouveau à JSON alors pouvez-vous me dire quel devrait être le bon format? Merci – John

Répondre

3

Je ne sais pas exactement ce que vous êtes après, mais si vous changez le JSON d'être valid (guillemets doubles), vous pouvez le faire en utilisant $.parseJSON() et boucle à travers, comme ceci:

var json = '[{"my-select": 1}, {"my-select": 3}]';​​​​​​​​​ 

var selects = $("[id^=my-select]"); //a class maybe? not sure of your options 
$.each($.parseJSON(json), function(i, v) { 
    selects.eq(i).val(v['my-select']); 
}); 
​ 

You can see a working demo here


Mise à jour: Puisque vous contrôlez la façon dont cela est rendu dans la page il suffit de retirer les citations initiales, il est enveloppé dans, comme ceci:

var json = [{'my-select': 1}, {'my-select': 3}]; 
var selects = $("[id^=my-select]"); 
$.each(json, function(i, v) { 
    selects.eq(i).val(v['my-select']); 
}); 

You can see it working here, JSON est exactement ce que son nom indique, notation objet ... donc il suffit d'utiliser De cette façon, ne faites pas une chaîne, juste sortie/déclarez-la directement comme un objet javascript ... dans ce cas, c'est un tableau que vous pouvez faire défiler, et c'est bien sûr plus rapide sans tout ce travail supplémentaire.

+0

merci c'est exactement ce que je veux. Cependant j'utilise jquery 1.3.0 qui n'a pas la fonction parseJSON. Votre solution est-elle possible en utilisant 1.3.0? Merci – John

+0

@John - Comment obtenez-vous la chaîne JSON? est-il rendu dans la page, ou récupéré via AJAX? –

+0

rendu dans la page comme vous l'avez ci-dessus, c'est-à-dire json = ??? La chaîne elle-même est créée dynamiquement à l'aide de scripts côté serveur. – John

Questions connexes