jQuery: проблема с установкой клонированных значений полей выбора

#jquery #each

#jquery #каждый

Вопрос:

В jQuery я создаю поля выбора «на лету» на основе количества элементов в массиве PHP и пытаюсь изменить значение каждого параметра поля выбора на значение элемента массива.

Во-первых, вот HTML:

 <div id="artistArea">
  <div class="category_block">
    <select name="artistSelect[]" class="cat_list">
        <option value="">- none -</option> 
    </select>
  </div>
</div>
  

Вот преобразование массива:

 var arrayFromPHP = <?php echo json_encode($exhibArray) ?>; // There's our array from php->jquery
  

Затем я начинаю с заполнения параметров в первом select, а затем создаю последующие поля в цикле «each» в обратном вызове «success»:

 $.ajax({
    url: 'artistpop.php',
    success: function(data){
        $('.cat_list').append(data); //Sets options for first select box
        $.each(arrayFromPHP, function (i, elem) { //loop through our array values
            $("#artistArea > .category_block:last .cat_list").val(elem); //set the select box value
            $('#artistArea > .category_block:last').after($('#artistArea > .category_block:last').clone()); //clone the previous select box     
        });
    }   
});
  

Итак… Проблема в том:

Первоначальное создание поля и заполнение работают нормально, как и создание последующих полей. Однако только для первого поля выбора установлено соответствующее значение из массива; для остальных остается опция ‘none’.

Может ли это быть чем-то неправильным в каждом цикле?

Я надеюсь, что это достаточно ясно, чтобы понять — я в замешательстве!

Ответ №1:

Вы пробовали устанавливать атрибут «выбранный» для фактического параметра, который вы хотите использовать по умолчанию, вместо того, чтобы устанавливать значение выбора? Другими словами, что-то вроде…

$('#artistArea > .category_block:last .cat_list option[value=' elem ']').attr('selected','selected');

Комментарии:

1. Качество! На самом деле просто, просто не мог разобраться в этом. Приветствую Джеда.

2. Рад помочь! Кстати, это хороший пример того, где можно немного урезать jQuery для повышения производительности и формы: $(‘#artistArea > .category_block:последняя опция .cat_list[значение=’ elem ‘]’)[0].выбрано = true

3. Интересно… Это меня сбивает с толку — я полностью упустил из виду сокращенную версию jQuery — не могли бы вы указать мне на какую-нибудь документацию, которую я могу прочитать по этому поводу? Глубина и возможности jQuery никогда не перестают меня удивлять!

4. На самом деле это отказ от jQuery в пользу простого Javascript, который всегда лучше для простых операций, когда вы знаете, что не возникнет проблем с кроссбраузерностью, как при настройке или извлечении большинства атрибутов. $ (‘selector’)[0] в jQuery всегда предоставит вам необработанный объект DOM, поэтому вы должны использовать это хотя бы для таких ситуаций, как $('a:first')[0].href или $('div').eq(2)[0].id . jQuery великолепен, но иногда его слишком много!