我有这样的形式:
<form action="" method="post">
<input type="text" name="name[]">
<input type="text" name="name[]">
</form>
<button id="add">Add extra field</button>
并且有可能添加更多我使用Javascript / jQuery处理过的输入:
$('#add').click(function(){
$('form').append('<input type="text" name="name[]">');
}
这里的一切工作正常.当我提交表单时,我用echo’< pre>‘.print_r($this-> input-> post(),TRUE)回显数据.’< / pre>‘;;我正在得到一切.
而且我正在使用表单验证类,因此,如果出现故障,我想使用set_value函数来保存值.然后,表单如下所示:
<form action="" method="post">
<input type="text" name="name[]" value="<?=set_value('name[]');?>">
<input type="text" name="name[]" value="<?=set_value('name[]');?>">
</form>
<button id="add">Add extra field</button>
但是…动态添加的输入不存在,因为它们是Javascript添加的.问题是:在格式验证失败后,如何使用CodeIgniter“保留”动态添加的输入以及那里的值?
到处搜寻但找不到任何东西:(
解决方法:
在每个表单元素上提供索引.
<form action="" method="post">
<input type="text" name="name[1]">
<input type="text" name="name[2]">
</form>
因此,您的JS变得像
counter = 3;
$('#add').click(function(){
$('form').append('<input type="text" name="name['+counter+']">');
counter++;
}
现在,如果验证失败,则必须添加如下条件:
<form action="" method="post">
<?php
if ($this->form_validation->run() == FALSE)
{
foreach($this->input->post('name') as $ind=>$item)
{
?>
<input type="text" name="name[<?php echo $ind ?>]"
value="<?=set_value('name[".$ind ."]');?>">
<?php
}
}
else
{
?>
<input type="text" name="name[1]">
<input type="text" name="name[2]">
<?php
}
?>
</form>