2013-05-01 86 views
3

我有一种形式是这样的:笨表单验证,重新填充动态添加字段

<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的值?

四处搜寻,但没有找到任何东西:(

+0

你可以回显提交给控制器的表单数据,检查是否存在添加到视图中的所有动态字段。 – MaNKuR 2013-05-01 09:31:14

+0

是的,当我运行'回声'

'.print_r($this->input->post(),TRUE).'
';'我得到的一切。 – Roy 2013-05-01 10:49:11

+0

还有一件事是这(动态)字段在服务器端进行验证?你可以尝试像这样'value =“<?php echo set_value('name []',$ _ POST ['name []']);?>”' – MaNKuR 2013-05-01 11:18:55

回答

2

让您的每个表单元素的规定指标。

<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> 
+0

我更新了我的问题,我想你误解了我。但是,谢谢你的回复! – Roy 2013-05-01 11:04:14

+1

看到我更新的答案,我希望你能找到答案。 – hsuk 2013-05-01 11:12:39

+0

有点哈克,但我认为这是一个工作!谢谢!我会深入研究它,并且会在我的案例中发布解决方案。如果我看看这个,我不认为我必须在数组名称中指定一个索引。 – Roy 2013-05-01 14:34:07

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,谢谢!