CodeIgniter表单验证,重新填充动态添加的字段

时间:2013-05-01 08:20:22

标签: javascript codeigniter dynamic validation

我有一个这样的表格:

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

周围搜索但找不到任何东西:(

2 个答案:

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