Поскольку 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 aren't really arrays at all, но ...) Я думаю, что вы хотели:
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;
}
});
options
собственности на сырой select
DOM элемента (обратите внимание на [0]
, чтобы добраться до исходного элемента) представляет собой массив типа объекта с length
собственности, так $.each
будет Лоо p над ним с использованием индексов. $.inArray
будет видеть, есть ли option
value
в массиве. Вам не нужно кэшировать поиск, используя переменную my_field_name
, потому что вы просматриваете только один раз.
Но обратите внимание, что это не будет работать, если строка JSON является {"0": "123", "1": "456", "2": "789"}
, потому что $.inArray
не будет работать с объектом, не являющийся массивом, как это.
Re ваш комментарий ниже:
... в вашем примере вы все еще используете $ ("# my_field_name"), и это то, что я пытался избежать, так как $ (» #my_field_name ") уже кэшируется поверх скрипта, и хотя я думал об использовании имени var вместо повторения $ (" # my_field_name ") каждый раз, когда мне нужно ссылаться на это поле.
Если вы уже делает
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) {
Да, цитаты были всего лишь ошибкой здесь, и массив (забыл опубликовать его здесь, анализируется $ .parseJSON). Но это заканчивается тем же самым (как я могу понять). Я отредактирую вопрос. – McRui
@Mario: Я понял. Не меняет ответа. :-) Счастливое кодирование, –
Итак, по вашему мнению, использование кешированной переменной my_field_name - лучший вариант, чем использование полного $ ("# my_field_name")? – McRui