jQuery没有在.append()之后发布表单的所有输入

时间:2010-10-02 20:53:24

标签: javascript jquery form-submit

我有一个使用jQuery方法.append()动态生成的表单。 我可以添加任意数量的新输入,文本框,cmbbox等...

但问题是,当我执行表单的sumbit时,PHP目标不会收到添加的新输入,而只是连接到append()之前的表单中已经输入的变量。

有什么想法吗?


javascript:

$("#button").live('click',function add(){
   $("#list").append(
       '<li style="height:20px;">'
    +'<input type="text" class="text" id="prova" name="prova[]" value="prova">'+ 
       '</li>'
   );
});


Html:

<input type="submit" id="button" value="Add input">
<form name = "form" id="form" action="post.php" method="POST">
   <ul style="width:670px;padding:0px 0px 30px 0px" id="list">
   </ul>
   <input type="submit" id="submit" value="Submit">
</form>


PHP:

<?php
  print_r($_POST);
?>

5 个答案:

答案 0 :(得分:4)

问题1:

您的#button不应该是submit类型,因为您只想使用它来添加到表单而不提交表单。所以你应该:

<input type="button" id="button" value="Add input">


问题2:

您正在覆盖您的变量。 name是随表单一起发送的变量,因此每个input添加必须具有新名称,或者变量必须是数组。

此外,您不能拥有多个具有相同id的元素。

解决此问题的最简单方法是使用prova形式使prova[]成为数组:

$("#button").live('click',function() {
   $("#list").append(
       '<li style="height:20px;">' +
         // Removed repetitive ID and made prova an array
       '<input type="text" class="text" name="prova[]" value="prova"></li>'
   ); 
});

jsFiddle example

答案 1 :(得分:1)

您正在拦截click事件并向表单添加元素,但事件已经开始,并且将完成其默认操作(提交表单),而不会重新检查表单的内容。

您应该在添加字段后停止事件(preventDefault应该是正确的选择),然后重新提交表单。

这些方面的东西:

$('#button').live('click', function add(event){
    event.preventDefault();
    $('#list').append(...);
    $('#form').submit();
});

我没有测试过,但我非常有信心它应该可以工作:)

答案 2 :(得分:1)

只是为了澄清,并抛开任何其他问题,@ Claudio的说明是正确的答案。我只是遇到了同样的问题,按钮类型是'按钮',新元素的名称正在动态递增。一切看起来都不错,但添加的元素不会提交

然后我注意到我的表格标签在表格标签内。我把它们搬到了外面,一切按计划进行。

答案 3 :(得分:0)

有任何代码可以显示吗?为了让php“看到”提交的变量,您必须确保它具有在表单元素上指定的“name”属性。我有一种感觉,你的问题将与jQuery而不是php。

答案 4 :(得分:0)

最佳猜测:您尚未为动态添加的元素设置名称属性。