my_field_name
要素の jQuery インスタンスであるため、その要素にアクセスするためにselect
使用します。children
options
$.each(my_array, function (k, v) {
my_field_name.children('option[value=' + v + ']').prop("selected", true);
}
...しかし、以下も参照してください。
my_array
変数が配列を指していないことに注意してください。"1"
実際、その行は構文エラーです (コロンの代わりにコンマを使用したため)。"0"
(コロンを使用した場合、 、"1"
、およびのキーを持つオブジェクトが作成されます"2"
が、それは配列ではありません。確かに、JavaScript の標準的な「配列」は実際にはまったく配列ではありませんが... ) 私はあなたが望んでいたと思います:
var my_array = ["123", "456", "789"];
また、文字列ではないものには使用$.parseJSON
しません。
my_array
が実際に配列になってしまう場合(文字どおりに記述したため、または のような JSON 文字列から解析されたため["123", "456", "789"]
)、 を使用するのではなくchildren
、オプションをループするだけの方がよい場合があります。
// Let's assume you get jsonString from somewhere else, and it's really a string,
// as though you had this code: jsonString = '["123", "456", "789"]'
var my_array = $.parseJSON(jsonString);
$.each($("#my_field_name")[0].options, function(index, option) {
if ($.inArray(option.value, my_array) !== -1) {
option.selected = true;
}
});
生のDOM 要素のoptions
プロパティ(生の要素を取得するには に注意してください) は、プロパティを持つ配列のようなオブジェクトであるため、インデックスを使用してループします。次に、が配列に存在するかどうかを確認します。ルックアップは 1 回しか行わないため、変数を使用してルックアップをキャッシュする必要はありません。select
[0]
length
$.each
$.inArray
option
value
my_field_name
ただし、JSON 文字列が の場合は機能しないことに注意してください。そのような非配列オブジェクトでは機能しないためです{"0": "123", "1": "456", "2": "789"}
。$.inArray
以下のコメントを再確認してください。
...あなたの例では、まだ $("#my_field_name") を使用していますが、それは私が回避しようとしていたものです。これは、 $("#my_field_name") が既にスクリプトの上にキャッシュされているためです。そのフィールドを参照する必要があるたびに $("#my_field_name") を繰り返す代わりに var 名。
すでにやってるなら
var my_field_name = $("#my_field_name");
...コードのその上にある場合、当然、この回答の例のいずれかで、 が表示されている場合は$("#my_field_name")
、 に直接置き換えることができますmy_field_name
。たとえば、次のように表示されます。
$.each($("#my_field_name")[0].options, function(index, option) {
すでに変数を持っmy_field_name
ている場合は、これに変更できます。
$.each(my_field_name[0].options, function(index, option) {