Jquery: установка выбранного состояния для элементов опций выбора, заполненных через ajax - PullRequest
0 голосов
/ 26 августа 2011

У меня есть 6 полей выбора (sbs), 3 в ряд, поэтому два ряда.Верхние три sbs содержат список опций, которые заполняются через php, данные извлекаются из mysql.Когда опция из каждого поля выбрана, я использую jquery (через ajax), чтобы откатить пункты опций для sb непосредственно под ним и заполнить указанный sb соответствующими данными.Я нажимаю «создать», и данные отправляются через ajax в скрипт php, который затем сохраняет данные в таблице и возвращает подчиненные раскрывающиеся данные (хотя и отформатированные) в таблице под формой.Таким образом, у вас может быть что-то похожее после создания «комбинации».Eveyrthying слева от двоеточия был параметр в верхнем ряду полей выбора, а затем вы выбрали параметры из соответствующего окна, отображаемого справа.

Color: Red    |   Capacity : 4GB    |      Model : ABC    |    EDIT
Color: Blue   |       Speed: 2GHZ   |   Capacity : 2GB    |    EDIT

и т. Д.

Если я хочу отредактировать запись, я нажимаю кнопку «Изменить», и jquery находит идентификатор нажатой кнопки редактирования, передает ее через ajax другому сценарию php, который затем возвращает объект json с соответствующими данными, а затем используется для повторного заполнения выпадающих списков с помощьювыбранные варианты.Пока что все работает отлично.

Моя проблема в том, что только один верхний ряд sbs получает один из вариантов, выбранных при нажатии на правку.Дочерние параметры не выбраны, и я не могу понять, почему.Я могу получить правильные параметры для отображения, но не могу установить выбранное состояние для любого соответствующего значения, возвращаемого в моем объекте json.Я 8 часов пытался это выяснить и пробовал разные вещи на SOverflow и других сайтах, ни один из которых не работал - если честно, я не так уж опыт с javascript / ajax.

После успешного процесса ajaxт. е. успех: я делаю следующее:

var jObj = $.parseJSON(html);

//parentVariations# is the select boxes in the top row where 
//Color, capacity, model options are displayed.
//The trigger fires off my ajax function which is responsible for 
//populating the corresponding child select box with relevant data.

$('#parentVariations1').val(jObj.groupAttr1).trigger('change'); 
$('#parentVariations2').val(jObj.groupAttr2).trigger('change'); 
$('#parentVariations3').val(jObj.groupAttr3).trigger('change'); 

//childVariations# is the child option box, i have the same code for each child
//box but am only showing the first one here for simplicitys sake.
//What I thought I was doing here is getting each option then if the value 
//matches that held in my corresponding json object set that option to selected...
//Doesn't work :'(
$("#childVariations1 option").each(function()
{
if($(this).val() == jObj.childAttr1)
{
      $("#childVariations1 option").attr('selected','selected');
}
});

Любая помощь будет приветствоваться, поскольку она заставит меня переступить через край.

1 Ответ

0 голосов
/ 26 августа 2011

$("#childVariations1 option") - это массив всех опций. Вам необходимо указать, какой из них:

$("#childVariations1 option").eq(1).attr('selected','selected');

В вашем случае используйте цикл for и используйте индекс для получения текущей позиции вместо .each. (или настроить счетчик)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...