Заполните textarea индивидуально с выбором из списка созданных php выпадающих

Итак, у меня есть список выпадающих списков, сгенерированных автоматически из базы данных, и для каждого из них у меня автоматически создается текстовая область.

Вот код HTML / PHP:

<div class="row options-content">
<?php if ($options) { ?>
<?php foreach ($options as $option) { ?>
<?php if ($option['type'] == 'select') { ?>
<div class="form-group<?php echo ($option['required'] ? ' required' : ''); ?>">
  <label class="control-label" for="input-option<?php echo $option['product_option_id']; ?>"><?php echo $option['name']; ?></label>
  <select name="option[<?php echo $option['product_option_id']; ?>]" id="input-option<?php echo $option['product_option_id']; ?>" class="form-control">
    <option value=""><?php echo $text_select; ?></option>
    <?php foreach ($option['product_option_value'] as $option_value) { ?>
    <option value="<?php echo $option_value['product_option_value_id']; ?>"><?php echo $option_value['name']; ?>
    <?php if ($option_value['price']) { ?>
    (<?php echo $option_value['price_prefix']; ?><?php echo $option_value['price']; ?>)
    <?php } ?>
    </option>
    <?php } ?>
  </select>
</div>
<textarea name="option-<?php echo $option['name']; ?>" rows="1" cols="50" class=""></textarea>
<?php } ?>
<?php } ?>
<?php } ?>

а вот и JavaScript:

<script>
$( "select" )
  .change(function () {
     var str = "";
     $( "select option:selected" ).each(function() {
     str += $( this ).text() + " ";
    });
    $( "textarea" ).text( str );
  })
  .change();
</script>

Кажется, что все работает, за исключением того, что когда первый drowdown в выбранном, он изменяет текст во всех других textarea... как я могу сделать изменения только на обозначенном textarea?

Я попробовал следующее, но тогда больше ничего не работает:

<script>
$( "select" )
  .change(function () {
     var str = "";
     $( "select option:selected" ).each(function() {
     str += $( this ).text() + " ";
    });
    $( "#option-<?php echo $option['name']; ?>" ).text( str );
  })
  .change();
</script>

1 ответ

Решение

Сделанные изменения

► Используется $(this) чтобы определить измененное в настоящий момент поле выбора.

$( "select" )
  .change(function () {
     var str = "";
     $(this).find("option:selected" ).each(function() {
         str += $( this ).text() + " ";
     });
     $(this).parent().next().text( str );
  })
  .change();
Другие вопросы по тегам