动态创建的索引字段未随表单一起提交


Dynamically created index fields not being submitted with form

我正在使用jQuery为电子邮件地址动态创建新字段,这些字段由一个SELECT下拉框组成,用于指定电子邮件地址的类型和电子邮件地址的文本INPUT。

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:当用户单击"加号按钮.png"时,它将运行以下代码。从本质上讲,它只是创建当前LI的副本并剥离值。

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

这一切都很好,问题是当我提交表单时,动态创建的字段会被忽略。在提交时,我正在序列化表单数据并显示在警报中以验证这一点。我什么都试过了,似乎看不出问题出在哪里!?有什么想法吗?

我想明白了。。。

我在上面发布的表单片段只是一个大得多的应用程序的一小部分。该应用程序仍然只使用页面上的一个表单。在不同的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>

现在一切都很好希望这能帮助其他人不要在同样的问题上浪费时间!

在handler.php上抛出一个<pre><?php var_dump($_POST); ?></pre>,看看传递了什么。当我测试你的例子时,在点击加号一次并填写后,我在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之前,您是否对数据做了其他操作?