0

我有一个在 jQuery 对话框中弹出的编辑表单,它有一个 Ajax 提交按钮来执行验证,而无需关闭对话框或将其重定向到其他页面。我的问题是,在我的表单中,我显示了当前值以及新值的空输入框,如果新值不是数字,则当前值仍会更改为该值。

例如,如果编辑窗口显示“月内”当前值为 5,并且用户输入 5sdf,则验证将启动并说修复错误,但当前值列现在将显示 5sdf。我需要帮助保持当前值以保持其最新的有效值。

这是我在控制器中编辑操作的代码:

public function edit($id = null)
    {
        $this->LocalClock->id = $id;
        $this->set('isEditValid', false);
        $this->set('editValidationErrors', false);

        if ($this->request->is('get'))
        {
               $this->request->data = $this->LocalClock->read();
               $this->set('localClocks', $this->LocalClock->read());
            }
            else
            {
               if ($this->LocalClock->save($this->request->data))
               {
                $this->set('isEditValid', true);
                $this->set('editValidationErrors', false);
                $this->set('localClocks', $this->request->data);
            }
               else
               {
                $this->set('isEditValid', false);
                $this->set('editValidationErrors', true);
                $this->set('localClocks', $this->request->data);
               }
        }
    }

这是我的edit.ctp:

<div id="edit_table">

<div id="edit_errors">
</div>

<?php echo $this->Form->create('LocalClock', array('action' => 'edit', 'inputDefaults' => array('label' => false))); ?>
<?php echo $this->Form->input('id', array('type' => 'hidden')); ?>

<table>
    <thead><tr>
        <th>Field</th>  <th>Current Value</th>  <th>New Value</th>
    </tr></thead>

    <tbody>
<tr><td>Name</td><td> <?php echo $localClocks['LocalClock']['name']; ?></td><td>  <?php echo $this->Form->input('LocalClock.name', array('id' => 'focusMeEdit'));?></td></tr>
    <tr><td>Auto Offset</td><td><?php echo $localClocks['LocalClock']['auto_offset'];?> </td><td><?php echo $this->Form->input('LocalClock.auto_offset');?> </td></tr>
    <tr><td>UTC Offset Sec</td><td><?php echo $localClocks['LocalClock']['utc_offset_sec'];?> </td><td><?php echo $this->Form->input('LocalClock.utc_offset_sec');?></td></tr>
    <tr><td>In Month</td><td><?php echo $localClocks['LocalClock']['in_month'];?></td>  <td><?php echo $this->Form->input('LocalClock.in_month');?> </td>  </tr>
    </tbody>
</table>

<?php
    // The Ajax Helper submit is used to submit the changes made to the edit form
    // because it allows the modal window to be loaded with the updated edit view
    // without leaving the modal window. 
    echo $this->Ajax->submit('Save Changes', array(
        'url' => array('controller' => 'localClocks', 'action' => 'edit'),
        'update' => 'edit_table'));

    // Call the close Dialog() function if data was validated sucessfully; valid == true. 
    // Else it stays open displaying validation error message.
    if (false != $isEditValid)
    {
        echo "<script>$('#[id*=dialog]').dialog('close');</script>";
        echo "<script>$('#success_messages').dialog('open');</script>";
        echo "<script>$('#success_messages').text('Local Clock Successfully Edited')</script>";
    }
    if(false != $editValidationErrors)
    {
        echo "<script>$('#edit_errors').html('<h3><em><font color=\"red\">Please Correct Errors Before Proceeding</font></em></h3>')</script>";
    }

echo $this->Form->end(); ?>

</div>

我不确定问题是否在我的行为或观点中导致它发生。

提前致谢

4

1 回答 1

1

它是显示不正确值的标准行为。如果您输入了一个由于某种原因无效的长答案,您不希望删除该答案,否则您可能需要重新输入很多内容。

保存失败后为什么不读取原始记录,检查 $this->LocalClock->invalidFields() 是否有错误并将 $this->request->data 替换为受影响字段的原始值?

于 2012-06-21T00:27:06.117 回答