我有一个使用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);
?>
答案 0 :(得分:4)
您的#button
不应该是submit
类型,因为您只想使用它来添加到表单而不提交表单。所以你应该:
<input type="button" id="button" value="Add input">
您正在覆盖您的变量。 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>'
);
});
答案 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)
最佳猜测:您尚未为动态添加的元素设置名称属性。