在Codeigniter验证失败后重新填充动态javascript


Re-populate dynamic javascript after failed Codeigniter validation

我有一个javascript表单,允许用户通过php向MySQL表添加数据。这个表单允许用户动态地添加更多的数据输入,如果他们需要多于最初给定的单个输入。

用户点击"添加预算项目"按钮,可以添加更多项目。

视图中的表单如下所示:

<input type="button" value="Add Budget Item" onClick="addRow('dataTable')" /> 
  <input type="button" value="Remove Budget Item" onClick="deleteRow('dataTable')" /> 
  <br>
  <p>(All actions apply only to entries with check marked check boxes only.)</p>
</p>
<table id="dataTable" class="form" border="1">
 <tbody>
  <tr>
    <p>
    <td >
        <input type="checkbox" name="chk[]" checked="checked" value ='<?php echo set_value('chk[]') ?>' />
    </td>
    <td>
    <label>Item/Procedure</label>
    <input type="text" name="itm_nm[]" value ='<?php echo set_value('itm_nm[]') ?>'/>
    </td>
    <td>
    <label for="itm_trig">Trigger/Visit</label>
    <input type="text" class="small"  name="itm_trig[]" value ='<?php echo set_value('itm_trig[]') ?>'/>
    </td>
    <td>
    <td>
    <label for="itm_amt">Budget Amount</label>
    <input type="text" class="small"  name="itm_amt[]" value ='<?php echo set_value('itm_amt[]') ?>'>
    </td>
    </p>
  </tr>
 </tbody>
</table>

表单被提交给验证控制器。在验证失败时,我希望用用户输入的所有动态创建的字段及其数据重新填充表单。

验证基本上是这样的:

function index(){

        $this->form_validation->set_rules('itm_nm[]', 'Item Names', 'required');
        $this->form_validation->set_rules('itm_trig[]', 'Item Triggers/Visits', 'required');
        $this->form_validation->set_rules('itm_amt[]', 'Item Amounts', 'required|decimal');     
        if ($this->form_validation->run() == FALSE) {

            $this->load->view('build_bud2');
        }

当返回视图时,对于不是由用户动态生成的第一个表单项,这可以很好地工作。但是,没有一个动态生成的数据字段出现(并且显然没有用先前提交的数据重新填充)。

当验证失败时,如何使动态生成的数据字段重新出现并以与初始数据相同的方式重新填充?

我会这样做,使用JSON视图与Codeigniter和Ajax而不是"张贴"表单。

    用AJAX提交表单到PHP脚本。
  • PHP脚本接收字段并返回JSON响应
  • 如果存在一个或多个验证错误,则发送一个包含所有字段和错误的适当JSON响应。响应可以是带有错误消息的字段ID,例如
  • JS接受JSON响应并显示错误(如果有)。

如果你想使用POST,你至少有两个选择:

  • 输出用户输入内容的JSON表示,将在JavaScript中可用。然后,循环遍历所有字段,并根据JSON表示"重做"字段结构。
  • 或者,用PHP表示用户输入的内容(在对象或数组中),并在PHP中循环遍历字段,并逐个显示所有字段。

我会这样做:

  1. 点击提交按钮表单
  2. 验证输入
  3. 如果验证失败,将相同的POST数据传递给视图页(再次)
  4. 在视图中使用foreach循环和操作传递的POST数据的东西。

顺便说一下,这个链接可能会帮助你或给你一个想法

我如何使用CodeIgniter's set_value字段's数组?