-1

「c0r1」と呼ばれる選択ボックス(複数の属性)があり、オプションが含まれています:

<select id="c0r1" multiple="multiple" class="fcv">
     <option value="A">A</option>
     <option value="B">B</option>
     <option value="C">C</option>
</select>

オブジェクト「foo」もあります

 "foo" : {
       "bar": ["x", "y", "z"],
       "teal" : [
            {"x" : ["A"], "y" : [...], "z" : [...]},
            {"x" : [...], "y" : [...], "z" : [...]},
            {"x" : [...], "y" : [...], "z" : [...]}
        ]
 }

bar には一連の値が格納され、これらはティール配列内のオブジェクトのキーとして使用されます。

c0r1 (および c0r2、c1r1、...) の内容は、"x"、"y"、および "z" によって決まります。コードの他の場所では、値のグループを表します。ページは選択ボックスにグループを割り当て、オプションはグループから入力されます (HTML の最初の部分はこの方法で生成されました)。

この質問のために、c0r1 には (コードの他の場所で) 「x」が割り当てられ、値「A」、「B」、および「C」が含まれていました。

なぜこのようになっているのかを深く掘り下げずに、foo.teal.x の値を取得し、それらを使用して c0r1 のそれぞれの値を「選択」する必要があります。

次のjsを使用すると:

var blah = foo.bar[0]; //blah = x
var value = foo.teal[0][blah][0]; //value = A
$("#c0r1").val(value);

何も選択されていません。私はデバッガーを使ってステップスルーしました.何とかと値が正しく割り当てられており、jQueryはエラーをスローしません...ただ、何も割り当てられません.

私も試してみました

$("#c0r1[value='" + value + "']").attr("selected", "selected");
//and
$("#c0r1[value='" + value + "']").prop("selected", true);

これは、ネット上の他の場所で見つけた提案でした。

明らかに、これが機能するようになったら、すべての値が選択されるようにコードを作成します。なぜ機能しないのですか、atm?

ページの他の場所では、同じ json オブジェクトと選択ボックスで .val() メソッドを使用できましたが、問題なく動作しました。ただし、これは「複数」である最初のケースです。

ありがとう、サム。

アップデート:

DOM 要素 c0r1 とそのオプションは動的に生成されるため、jQuery がそれらの存在を認識していない可能性はありますか? 例外がスローされると思いますが(このコードは行っていません)。

更新 2:

この問題は、この質問で議論されていたこととは何の関係もありませんでした。オプションを「選択」するコードが、オプションが受信される前に実行されたためです。オプションはサーバーの応答から来ています。サーバーの応答の前に上記のコードが呼び出されるとは思いもしませんでした。

私の教授が私に警告した古い「レイテンシーは0」という誤りに陥ったようです。

お気軽に反対票を投じてください。

4

2 に答える 2

1

foo.teal配列内のオブジェクト間にコンマが必要です。

 "foo" : {
       "bar": ["x", "y", "z"],
       "teal" : [
            {"x" : ["A"], "y" : [...], "z" : [...]}, // <-- here
            {"x" : [...], "y" : [...], "z" : [...]}, // <-- and here
            {"x" : [...], "y" : [...], "z" : [...]}
        ]
 }

実例: http: //jsfiddle.net/gKvWj/

于 2013-03-07T03:50:45.333 に答える
0

jQuery セレクターで間違った要素を選択しています。optionではなく である必要がありますselect

$('#c0r1 option[value="B"]').attr('selected', true);
于 2013-03-07T03:54:57.613 に答える