Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript CodeIgniter表单验证,重新填充动态添加的字段_Javascript_Codeigniter_Dynamic_Validation - Fatal编程技术网

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

Javascript CodeIgniter表单验证,重新填充动态添加的字段,javascript,codeigniter,dynamic,validation,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> <form action="" method="post"> <

我有一张这样的表格:

<form action="" method="post">
    <input type="text" name="name[]">
    <input type="text" name="name[]">
</form>
<button id="add">Add extra field</button>
<form action="" method="post">
    <input type="text" name="name[1]">
    <input type="text" name="name[2]">
</form>
但是。。。动态添加的输入不存在,因为它们是由Javascript添加的。问题是:在de表单验证失败后,如何使用CodeIgniter“保持”动态添加的输入和值


到处搜索,但找不到任何内容:(

为每个表单元素提供索引

counter = 3;
$('#add').click(function(){
    $('form').append('<input type="text" name="name['+counter+']">');
    counter++;
}

所以,你的JS变得像

<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>
计数器=3;
$('#添加')。单击(函数(){
$('form')。追加('');
计数器++;
}
现在,如果验证失败,则必须添加以下条件:

<?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; ?>


你能回显提交给控制器的表单数据以检查添加到视图中的所有动态字段的存在吗?是的,当我运行
echo''时。打印($this->input->post(),TRUE)。'';
我得到了所有信息。还有一件事是这个(动态)字段在服务器端得到验证了吗?你能试试类似这样的
value=“”
是的,但是根据数组名称,所以只有2个或100个或它们并不重要。你的建议并不能解决问题,因为动态添加的字段不在那里。我已经更新了我的问题,我想你误解了我的意思。但是谢谢你的回答!有点不对劲,但我认为它已经成功了!谢谢!我会深入研究一下nd我将在我的案例中发布解决方案。如果我看了这个,我认为我不必在数组名中指定索引。@hsuk和Roy,这是唯一一个实现这个精确解决方案的方法吗?因为我有JS创建的动态字段,我用PHP重新创建(因为它们在DOM中被删除),所以我有多余的JS创建和PHP重新创建的代码。你们都知道避免这种情况的方法吗?
<?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; ?>