我有这样一个表格:
<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>
关于javascript - CodeIgniter 表单验证,重新填充动态添加的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16314893/