2009-05-28 11 views
91

私はのselectタグを持っています。JavaScript for loopを使用してjsonを作成するにはどうすればよいですか?

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

JavaScriptで2つのフィールド 'uniqueIDofSelectとoptionValue'を持つjsonオブジェクトを作成したいとします。

私はgetElementsByName( "status")を使用し、それを反復処理します。私は

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

などのように入れて必要

EDIT

...

+4

上のトライアウトは、ここで問題は何ですか? – acrosman

+0

optionValueはそれぞれの 'option'要素の 'value'属性でなければならないとします.1,2などですが、IDは何ですか?テキストですか? "存在"、 "不在"など? –

+0

だから、IDがselectのuniqueIDなら、optionValueは1つしかないでしょうか?私はあなたが現在の選択をしたいと思うが、すべての選択肢の配列ではないと思う? –

答えて

162

私はあなたの要求を理解して何から、これは動作するはずです:

<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はオブジェクトであり、配列ではありません。 – Gumbo

+0

申し訳ありませんが、私は質問を更新しました。 – Vikas

+0

jsonオブジェクト配列を作成します。私は1つの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

あなたは次のような単一のJavaScriptオブジェクトたい場合:

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

(オプション2、「不在」は、現在の選択です) を、次のコードは、それを生成する必要があります

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; 
    } 
    } 

選択したオブジェクトだけでなく、すべてのオブジェクトの配列が必要な場合は、michael's codeを使用しますが、status.idの場合はstatus.options[i].textを置き換えます。

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

あなたの質問を解読することはかなり難しいですが、私はそれで刺しを取ってみましょう:あなたが選択したオブジェクトのJSON表現が含まれてい文字列をしたい場合は

、代わりにこれを使用します。

あなたは言う:

私は二つのフィールド uniqueIDofSelectとJavaScriptでoptionValueを持つJSONオブジェクトを作成したいです。

そして、あなたが言う:

私は

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

まあのような出力を必要とする、この例の出力は、フィールドがuniqueIDofSelectという名前はありません、それだけでを持っていますoptionValue

とにかく、あなたはオブジェクトの配列を要求しています...

それはJSONオブジェクトの配列を作成します。

はその後マイケルズのコメントにあなたが言う答えます。私は1つのjsonオブジェクトしか必要としません。

オブジェクトの配列は不要ですか?

あなたは何をしたいですか?

ご了承ください。

+0

最初のこと:そのuniqueIDofSelect == selectID(私のレコードIDを選択要素IDとして保持することができますこのループは、Enumerableオブジェクトを表示するためにasp.net MVCで使用しています。2)あなたは正しいです、私は間違いなく私がその全体の出力を楽しんでいたことを知っています。 1つのjsonオブジェクトです。しかし、それは実際にオブジェクトの配列です。そして、マイケルの答えは完璧です。指摘ありがとう。 – Vikas

3

forループで生成された文字列からJavaScriptオブジェクトを作成したい場合、私はJSONからObjectにアプローチします。私はループを反復してJSON文字列を生成し、一般的なJavaScriptフレームワークを使用してJSONをObjectに評価します。

私はPrototype JavaScript Frameworkを使用しました。私はキーと値を持つ2つの配列を持っています。 forループを繰り返し、有効なJSON文字列を生成します。私はevalJSON()関数を使用してJSON文字列をJavaScriptオブジェクトに変換します。

ここにコード例を示します。あなたの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

ありがとうございました。私は多くの助けになりました。jsonstring.evalJSON(true)の代わりにPARSE.json(jsonstring)を使用しました。 –

関連する問題