Значение jQuery .change для нескольких элементов, сопоставленных с динамически генерируемыми именами / идентификаторами - PullRequest
0 голосов
/ 26 октября 2011

У меня есть динамически генерируемая коллекция из нескольких пар выбора / ввода с сгенерированными идентификаторами.

Урезано:

<?php foreach ($products as $product) { ?>
  <select id="option_<?php echo $matching_id; ?>">
    <?php foreach ($options as $option) { ?>
       <option title="<?php echo $inputvalue ?>"></option>
    <?php } ?>
  </select>
  <input id="update_<?php echo $matching_id; ?>" type="text" value="" />
<?php } ?>

У меня есть этот jQuery для обновления поля ввода с атрибутом title (должен использовать title, поскольку атрибут value нужен для чего-то другого) выбранной опции:

$(document).ready(function () {
    $('select').change(function() {
    $('input').val($(this).find("option:selected").attr("title"));
    });
});

Конечно, это неправильно. Он обновляет ВСЕ поля ввода с одинаковым значением, независимо от того, какое поле выбора было изменено.

Мне нужно изменить только поле ввода с соответствующим идентификационным номером. Переменная $ match_id всегда является числом, если это уместно.

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

Ответы [ 2 ]

0 голосов
/ 26 октября 2011
$(function(){
   $('select').change(function(){
      $('#update_' + $(this).attr('id').replace(/\D/g,'')).val($(this).find("option:selected").attr("title"));
   });
});

Если какой-либо выбор изменяется, он идет и находит элемент [input] с идентификатором 'update_' плюс числовую часть его собственного идентификатора и устанавливает его значение равным заголовку выбранной опции.

0 голосов
/ 26 октября 2011
$(document).ready(function () {
    $('select[id^="option_"]').change(function() {
        $('input[id="update_' + $(this).attr('id').replace('option_', '') + '"]').val($(this).find("option:selected").attr("title"));
    });
});

Выбирает только select с, когда их id начинается с "option", не обязательно $matching_id, чтобы быть числовым, обязательно.

...