动态复制的表单在CodeIgniter重新加载时消失

我有以下代码需要重复:


重复/动态添加的元素将具有相同的Name[]Email[]名称,但它们的ID将增加。

JavaScript是在下面,基于Josiah Ruddell的表单复制脚本 。

 var template = $('#field-row-container #field-row-1').clone(); window.addForm = function () { var parent = $(this).closest('.dynamic-rows').attr('id'); var fieldRowCount = countRows(parent) + 1; var newFieldRow = template.clone().find(':input').each(function () { var newId = this.id.substring(0, this.id.length - 3) + "[" + fieldRowCount + "]"; $(this).prev().attr('for', newId); // update label for this.id = newId; // update id and name (assume the same) $(this).closest('.field-row').addClass('new-row'); }).end() .attr('id', 'field-row-' + fieldRowCount) .appendTo('#field-row-container'); } $('.add-field-row').click(addForm); 

每当我将表单提交给CodeIgniter并且如果存在validation错误时,一旦控制器重新加载多部分表单,动态添加的元素以及初始字段中的值将消失。

我该如何解决这个问题? 我对如何解决这个问题感到茫然……

其他可能有用的说明:

  1. 这是一个只包含一个表单控制器的组件多部分表单
  2. 我有多个这样的实例 – 地址,教育学位等
  3. 我使用CodeIgniter的form_validation库来检查服务器端的每个post数组

当控制器在validation失败后重新定向到重新加载表单的页面时,它将仅重新加载原始页面,而不应用DOM操作。

我会执行POST请求,通过ajax提交表单,这样你就可以在不离开页面的情况下处理响应。 像这样的东西:

 $.post('/locationOfController.php', $('#yourForm').serialize(), function(response){ if(response.valid){ window.location.href = '/somewhereAfterFormPosted.php'; } else { $('#yourForm').append("

"+response.error+"

"); } }, 'json');

并根据validation是否通过更改控制器以返回JSON对象。 为了与上面的示例匹配,当发生错误时,您将返回类似下面的内容:

 {valid: false, error: 'Please fill out the whole form'} 

尝试类似的东西作为基本的例子。 您可以执行更多操作,例如,如果多个字段无效,则返回多个错误。