Динамически созданные поля индекса не отправляются с формой - PullRequest
2 голосов
/ 12 февраля 2012

Я использую jQuery для динамического создания новых полей для адресов электронной почты, которые состоят из выпадающего списка SELECT, чтобы указать тип адреса электронной почты, и текста ВХОД для адреса электронной почты.

HTML

<form enctype="multipart/form-data" action="handler.php" method="post" />
<ul class="ul-lov">
<li>
    <select name="email_type_id[]" class="float-l edit-email-type">
      <option value="1">No Label</option>
      <option value="5">Email</option>
      <option value="10" selected="selected">Personal</option>
      <option value="20">Work</option>
      <option value="30">Other</option>
    </select>
    <input type="text" name="email_value[]" value="you@domain.com" class="float-l edit-email"> 
    <img src="/gui/minus-button.png" class="minus">
    <img src="/gui/plus-button.png" class="addlov">
</li>
</ul>
</form>

JQuery: Когда пользователь нажимает «plus-button.png», он запускает следующий код. По сути, он просто создает копию текущего LI и удаляет значения.

// Click plus
$('.addlov').live('click', (function() {        
    $(this).closest('ul').append(
        $(this).parent('li').clone(true).children('input, select').val('').end()
    );
    $(this).remove();
}));

Это все работает хорошо, проблема в том, что когда я отправляю форму, динамически созданные поля игнорируются. При отправке я сериализирую данные формы и показываю в предупреждении, чтобы проверить это. Я перепробовал все, не могу понять, в чем проблема !? Есть идеи?

Ответы [ 2 ]

1 голос
/ 12 февраля 2012

Я понял это ...

Фрагмент формы, который я разместил выше, был небольшой частью гораздо большего приложения.Приложение по-прежнему использует только одну форму на странице.Есть множество элементов формы в разных div.Причина, по которой он не работал, заключается в том, что мой тег FORM был не за пределами всех элементов div.

Вот пример того, как был настроен мой код:

<div id="topform">
    <form action="handler.php" method="post">
    // some form items
</div>
<div id="moreformstuff">
    // some form items
</div>
<div id="bottomformstuff">
    // some form items
    </form>
</div>

Итак, я переехалмои метки вокруг так:

<form action="handler.php" method="post">
<div id="topform">        
    // some form items
</div>
<div id="moreformstuff">
    // some form items
</div>
<div id="bottomformstuff">
    // some form items
</div>
</form>

И все теперь работает нормально.: / Надеюсь, это поможет кому-то еще не тратить часы на ту же проблему!

0 голосов
/ 12 февраля 2012

Создайте <?php var_dump($_POST); ?> на handler.php и посмотрите, что передается. Когда я проверяю ваш пример, после однократного нажатия на знак плюса и его заполнения я получаю это на handler.php:

array(2) {
  ["email_type_id"]=>
  array(2) {
    [0]=>
    string(2) "10"
    [1]=>
    string(2) "30"
  }
  ["email_value"]=>
  array(2) {
    [0]=>
    string(14) "you@domain.com"
    [1]=>
    string(15) "you2@domain.com"
  }
}

Делаете ли вы что-нибудь еще с данными перед публикацией в handler.php?

...