[英]Extract dynamically created form data
我刚刚开始使用jQuery。 我一直在使用它的一件事是向表的一部分添加行。
当我添加新行时,我会给所有表单元素名称,例如'name_' + rowNumber
name 'name_' + rowNumber
。 每当我添加一行时,我都会增加rowNumber
。
我通常也有一个“删除行”按钮。 即使删除了一行, rowNumber
计数也保持不变,以免重复元素名称。
提交表单后,我将一个隐藏元素设置为等于jQuery中的rowNumber
值。 然后在PHP中,我从1到rowNumber
值进行计数。 然后,对于每个值,我执行一个isset($_REQUEST['name'_ . index])
。 这就是我提取在jQuery中删除行后剩余的表单元素的方式。
这里有没有人有更好的技术来处理已删除的行?
对于某些较简单的表,我们使用字段名,例如'name []',尽管对于JavaScript,它们将需要可用的ID。
它确实增加了一些复杂性,因为“ name [0]”必须假定“ detail [0]”是正确的元素。
如果字段名称以[]结尾,PHP将创建一个数组并追加元素
<input name="field[]" value="first value" />
<input name="field[]" value="second value" />
// is roughly the same as
$_POST['field'][] = 'first value';
$_POST['field'][] = 'second value';
使用数组将值保留在提交中。 因此,在客户端对行计数进行装箱,然后将新元素name[]
。 这意味着$_POST['name']
将是一个数组。
这样,在服务器端,您可以通过以下方式轻松获取行数(如果需要):
$rowcount = count($_POST['name']);
...并且您可以像这样在服务器端循环浏览各行:
for ($i = 0; isset($_POST['name'][$i]; $i++) {}
您可以通过执行foreach($ _ POST as $ key => $ value)提取所有行。
添加动态表单元素时,请使用数组命名方法。 例如
<input type="text" name="textfield[]" />
发布表单后, textfield[]
将是一个PHP数组,然后可以轻松使用它。 删除元素时,请确保将其从HTML DOM中删除。
您可以使用POST或GET
提交后,您可以自动将所有表单元素与此一起使用。 您不需要重新组织表单元素名称。 即使您不需要知道表单元素的名称。
<form method="POST" id="fr" name="fr">.....</form>
<?php
if(isset($_POST['fr'])){
foreach($_POST as $data){
echo $data;
}
}
?>
此外,您还应该查看此grafanimasyon.blogspot.com.tr/2015/02/veritabanndan-php-form-olusturucu.html
这是一个自动的表单创建者,负责计算数据库表。 您可以看到如何为表单元素命名并使用它们。
就像blejzz建议的那样,我认为如果您使用$ _GET,那么您可以循环浏览所有已发送的输入,而忽略删除的行。
foreach ($_GET as $k=>$v) {
echo "KEY: ".$k."; VALUE: ".$v."<BR>";
}
我注意到您提到“对已删除的行进行会计处理”; 您可以包含一个隐藏的输入,并在每次有人删除行时为其添加唯一值。 例如,输入可以包含逗号分隔的行号值:
<input type="hidden" value="3,5,8" id="deletions" />
并包含在您的jQuery脚本中:
$('.delete').click(function(){
var num = //whatever your method for getting the row number
var v = $('#deletions').val();
v = v.split(',');
v.push(num);
v = v.join(',');
$('#deletions').val(v);
});
然后,您应该能够知道删除了哪些行(如果这是您要查找的内容)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.