1

我有一个表单,它的字段动态添加如下:

function addFieldRow() {
  $('.form-container').append('
    <div><input type="text" name="name[1]"></div>
    <div>
      <select name="choice[1]">
        <option value="red">red</option>
        // . . .
      </select>
    </div>
     // . . .
  ');
}

然后,我使用声明的数组 form_validation 规则将这些传递给其各自的 CodeIgniter 控制器:

$this->form_validation->set_rules('name[]', 'text field', 'required');
// . . . other fields' rules

问题是,如果任何动态添加的表单有错误,这些在视图加载期间就会消失。我想知道如何在验证运行后保留动态添加的表单字段并出现错误

if ($this->form_validation->run() == FALSE) {
  // do stuff to preserve the dynamically created fields to show their errors
  $this->load->view('user_addresses_view');
}

更好的解决方案

我找到了通过使用ajax连接到 CodeIgniter 框架中表单的相应控制器来保留这些动态添加的元素的解决方案。这种方法可以:

  1. 在不刷新页面的情况下进行客户端和服务器端验证
  2. 由于页面没有刷新,所有这些动态添加的表单元素都不会消失!

james246的解决方案

4

2 回答 2

1

你不能这样做,因为页面实际上正在刷新并且行是在客户端添加的,所以当验证完成后,你将重定向到具有验证错误的同一页面,你不会看到动态添加的 dom,因为正如我所说,它是发生在客户端而不是你的代码......所以你所能做的就是使用session,然后在加载时手动验证并将它们添加到页面。

使用SESSION可能不是一个好主意,因为为此您将不得不编写更复杂的帮助程序和验证方法等......

其他可能的解决方案

  1. 使用jQuery.validate允许我们验证动态添加的行(字段,dom)的插件。

  2. 利用 mysql 并将这些字段添加到数据库中,并将可能的错误存储在 db 中并将其发送到查看文件。

于 2013-01-25T09:45:13.023 回答
0

鉴于:

 for($i=0; $i<$ttl_input;$i++)
    {
    <div><input type="text" name="name[".$i."]"></div>
    <?php echo form_error('name['.$i.']'); ?>
    }

在控制器中:

foreach($this->input->post('name') as $index=>$name)
{
$this->form_validation->set_rules('name['.$index.']', 'text field', 'required');
}
于 2016-08-20T09:19:50.630 回答