2011-07-06 8 views
1

現在のシステムの設計上の制約のため、データをjsonとして選択要素に渡し、selectオブジェクトの各オプションをjsonの 'id'値でリセットし、第2選択要素にjsonの「sid」データを設定して、選択要素の動的親子ペアを作成します。選択要素の値をjsonとしてプッシュ

しかし、私は正常にオプションの値を解析し、後のコードで使用するために配列にプッシュすることができないようです。

<select id="Sector"> 
    <option value="{'id':'Fruit','sid':['Apple','Orange']}"></option> 
    <option value="{'id':'Veg','sid':['Tomato','Carrot']}"></option> 
</select> 

<script language="JavaScript" type="text/javascript"> 

    var plist = document.getElementById('Sector'); 
    var opts = plist.options; 
    var x =[]; 
    for(i=0;i<opts.length;i++){ 
     x.push(opts[i].value); 
    } 

    alert(x[0]['id']); 
</script> 

私は??間違って何をやっている私

答えて

1

オプションの値は、文字列です。それらをJavaScriptオブジェクトとして扱う場合は、a JSON parserまで実行する必要があります。

オプション値がではなくJSONであるため、別の問題が発生します。エラーを見つけるにはJSON Lintを使用してください('を使用する場合は、別の場所は表示されません)。"を使用する必要があります。 JSONを扱っている場合は、ほとんどの場合、プログラミング言語でデータ構造を構築してから、JSONシリアライザでデータ構造を実行し、JSONを手作業で作成してトラブルを尋ねる必要があります。

+0

ありがとう、私は二重引用符で一重引用符を置き換え、それはテストに合格しました。 – crankshaft

1

この行が問題最初

x.push(opts[0]); 

オフになっている、私はあなたがOPTSを行う必要があると思います[0] .VALUE、その後、私はあなたがオブジェクトにそれを回すためにevalやJSON.parseを使用する必要があると思います。

+0

ありがとう、はい私はそれを修正しました:x.push(opts [i] .value)。 – crankshaft

+0

x.push(JSON.parse(opts [i] .value))が "予期しないデータの終了"で失敗する – crankshaft

+0

これは動作します:var opt = opts [i] .value.replace(/ '/ g、' "') ; y = JSON.parse(opt); x.push(y); – crankshaft