我有一个这样的表格:
<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添加的。问题是:如何在de form validation失败后“保持”动态添加的输入以及CodeIgniter的值?
周围搜索但找不到任何东西:(
答案 0 :(得分:3)
在每个表单元素上提供索引。
<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>
答案 1 :(得分:0)
好的,我是怎么做到的:
控制器
<?php
$data['some_data'] = ''; // Some data from the database to send to the view
if($this->form_validation->run() == FALSE)
{
// Posted?
if($this->input->post())
{
// Merge the submitted data with the current data
$data = array_merge($this->input->post(),$data);
}
// Load the view
$this->load->view('view',$data);
}
else
{
// Code after validation was successfull
}
视图
<? if(isset($name)): // Name set? ?>
<? foreach($name as $item): // Loop through all previous posted items ?>
<input type="text" name="name[]" value="<?=set_value('name[]'); // Set it's value with the regular set_value function ?>">
<? endforeach; ?>
<? else: ?>
<input type="text" name="name[]">
<? endif; ?>
这样,视图中的控制器内容并不是很好用,而且效果很好!
@hsuk,谢谢!