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 “保持”动态添加的输入和值?

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

4

2 回答 2

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>
于 2013-05-01T09:28:19.770 回答
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,谢谢!

于 2013-05-02T12:27:52.787 回答