2009-05-28 5 views
91

J'ai tableau de sélectionner l'étiquette.Comment créer json en JavaScript pour une boucle?

<select id='uniqueID' name="status"> 
     <option value="1">Present</option> 
     <option value="2">Absent</option> 
</select> 

et je veux créer un objet JSON ayant deux champs de uniqueIDofSelect et optionValue 'en JavaScript.

J'utilise getElementsByName ("status") et je l'itère.

EDIT

Je dois en mettre comme

[{"selectID":2,"OptionValue":"2"}, 
{"selectID":4,"optionvalue":"1"}] 

et ainsi de suite ...

+4

Quelle est la question ici? – acrosman

+0

Je suppose que optionValue devrait être l'attribut 'value' de chaque élément 'option': 1, 2, etc. Mais qu'est-ce que l'ID? Est-ce le texte? "Présent", "Absent", etc.? –

+0

Ok, donc si ID est l'uniqueID de la select, alors il ne peut y avoir qu'une seule optionValue, non? Je suppose que vous voulez la sélection actuelle, et pas un tableau de toutes les sélections? –

Répondre

162

D'après ce que je comprends de votre demande, cela devrait fonctionner:

<script> 
// var status = document.getElementsByID("uniqueID"); // this works too 
var status = document.getElementsByName("status")[0]; 
var jsonArr = []; 

for (var i = 0; i < status.options.length; i++) { 
    jsonArr.push({ 
     id: status.options[i].text, 
     optionValue: status.options[i].value 
    }); 
} 
</script> 
+41

JSON est un objet et non un tableau. – Gumbo

+0

Désolé pour la réponse tardive, mais j'ai mis à jour la question. – Vikas

+0

Il crée un tableau d'objets json. mais j'ai besoin d'un seul objet JSON. – Vikas

40
var sels = //Here is your array of SELECTs 
var json = { }; 

for(var i = 0, l = sels.length; i < l; i++) { 
    json[sels[i].id] = sels[i].value; 
} 
8

Si vous voulez un objet JavaScript tel que:

{ uniqueIDofSelect: "uniqueID", optionValue: "2" } 

(où l'option 2, "Absent", est la sélection en cours) puis le code suivant devrait le produire:

var jsObj = null; 
    var status = document.getElementsByName("status")[0]; 
    for (i = 0, i < status.options.length, ++i) { 
    if (options[i].selected) { 
     jsObj = { uniqueIDofSelect: status.id, optionValue: options[i].value }; 
     break; 
    } 
    } 

Si vous voulez un tableau de tous ces objets (pas seulement celui sélectionné), utilisez michael's code mais changez status.options[i].text pour status.id.

Si vous voulez une chaîne qui contient une représentation JSON de l'objet sélectionné, utilisez ceci:

var jsonStr = ""; 
    var status = document.getElementsByName("status")[0]; 
    for (i = 0, i < status.options.length, ++i) { 
    if (options[i].selected) { 
     jsonStr = '{ ' 
        + '"uniqueIDofSelect" : ' 
        + '"' + status.id + '"' 
        + ", " 
        + '"optionValue" : ' 
        + '"'+ options[i].value + '"' 
        + ' }'; 
     break; 
    } 
    } 
0

Votre question est assez difficile à décoder, mais je vais essayer de prendre un coup de poignard à elle .

Vous dites:

Je veux créer un objet JSON ayant deux champs uniqueIDofSelect et optionValue en javascript.

Et puis vous dites:

-je besoin d'une sortie comme

[{"selectID":2,"optionValue":"2"}, 
{"selectID":4,"optionvalue":"1"}] 

Eh bien, cette sortie exemple n'a pas le champ nommé uniqueIDofSelect, il n'a que optionValue.

De toute façon, vous demandez un tableau d'objets ...

Ensuite, dans le commentaire à michaels réponse que vous dites:

Il crée tableau d'objets JSON. mais j'ai besoin d'un seul objet JSON.

Vous ne voulez donc pas un tableau d'objets?

Que voulez-vous alors?

Veuillez vous faire une idée.

+0

Première chose: désolé que uniqueIDofSelect == selectID (Id de l'élément select, je peux garder l'ID de mon enregistrement comme identifiant d'élément select (pour la mise à jour d'enregistrement Je vais aussi avoir le nombre d'éléments select générés par la boucle foreach.En fait, cette boucle est utilisée dans asp.net MVC pour l'affichage des objets Enumerable 2) Vous avez raison, Mon erreur était que je m'amusais toute cette sortie est un objet JSON. Mais c'est un tableau d'objet. Et donc la réponse de Michael est parfaite. Merci de m'avoir signalé. – Vikas

3

Si je veux créer un objet JavaScript à partir d'une chaîne générée par pour la boucle, alors j'utiliserais l'approche JSON vers l'objet. Je générerais une chaîne JSON en itérant pour la boucle, puis j'utiliserais n'importe quel framework JavaScript populaire pour évaluer JSON en Object.

J'ai utilisé Prototype JavaScript Framework. J'ai deux tableaux avec des clés et des valeurs. Je parcoure la boucle et génère une chaîne JSON valide. J'utilise la fonction evalJSON() pour convertir la chaîne JSON en objet JavaScript.

Voici un exemple de code. Essayez sur votre FireBug Console

var key = ["color", "size", "fabric"]; 
var value = ["Black", "XL", "Cotton"]; 

var json = "{ "; 
for(var i = 0; i < key.length; i++) { 
    (i + 1) == key.length ? json += "\"" + key[i] + "\" : \"" + value[i] + "\"" : json += "\"" + key[i] + "\" : \"" + value[i] + "\","; 
} 
json += " }"; 
var obj = json.evalJSON(true); 
console.log(obj); 
+1

Merci l'homme, il m'a beaucoup aidé, j'ai utilisé PARSE.json (jsonstring) au lieu de jsonstring.evalJSON (true); –

Questions connexes